原文地址:https://lala.im/5994.html,請支持原作者!該處僅作轉載。
你的KVM小鸡除了能够吃灰以外,还能拿来生小鸡!今天给各位带锅们介绍一下这个玩法,流程很简单,稍微有点Linux基础都应该可以看懂。。
你可曾知道,你曾经买过的某些Xen/OpenVZ小鸡,可能是在KVM里面生出来的?
先简单确定一下你的VPS是否支持此玩法:
lscpu | grep Virt
回显如下,说明你可以继续往下看这篇文章:
Virtualization type: full
更新系统/安装依赖包:
apt -y update
apt -y dist-upgrade
apt -y install xen-hypervisor-4.8-amd64 xen-tools bridge-utils net-tools
这里有一个包应该和xen-hypervisor-4.8-amd64是等效的,但我不能完全确定:xen-system-amd64
更新Grub:
dpkg-divert --divert /etc/grub.d/08_linux_xen --rename /etc/grub.d/20_linux_xen
update-grub
重启VPS使其加载Xen的内核:
reboot
机器没爆炸还能登录上来的话,你现在可以检查Xen状态:
xl info
有类似如下回显说明正常:
host : li1609-54
release : 4.9.0-9-amd64
version : #1 SMP Debian 4.9.168-1+deb9u3 (2019-06-16)
machine : x86_64
nr_cpus : 1
max_cpu_id : 0
nr_nodes : 1
cores_per_socket : 1
threads_per_core : 1
cpu_mhz : 2300
hw_caps : 078bfbff:f7fa3203:2c100800:00000121:00000001:001c0fbb:00000000:00000000
virt_caps :
total_memory : 1023
free_memory : 63
sharing_freed_memory : 0
sharing_used_memory : 0
outstanding_claims : 0
free_cpus : 0
xen_major : 4
xen_minor : 8
xen_extra : .5
xen_version : 4.8.5
xen_caps : xen-3.0-x86_64 xen-3.0-x86_32p
xen_scheduler : credit
xen_pagesize : 4096
platform_params : virt_start=0xffff800000000000
xen_changeset :
xen_commandline : placeholder
cc_compiler : gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516
cc_compile_by : ijackson
cc_compile_domain : chiark.greenend.org.uk
cc_compile_date : Fri Jan 11 18:02:57 UTC 2019
build_id : 9a71c39470d087c0c9fa0d33c04d985ea08aaa04
xend_config_format : 4
编辑Xen配置文件:
nano /etc/xen/xend-config.sxp
确保在这个配置文件内,如下两行是这样的(4.8版本的Xen默认这两行就是这样):
# (network-script network-bridge)
(vif-script vif-bridge)
然后取消这两行的注释:
(network-script network-nat)
(vif-script vif-nat)
重启Xend:
systemctl restart xend
找到自己小鸡的网关IP:
netstat -r -n
例如我的:
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 139.162.125.1 0.0.0.0 UG 0 0 0 eth0
139.162.125.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
同时找到自己小鸡的子网掩码:
ifconfig
例如我的:
eth0: flags=4163 mtu 1500
inet 139.162.125.54 netmask 255.255.255.0 broadcast 139.162.125.255
inet6 fe80::f03c:91ff:fe9a:f00 prefixlen 64 scopeid 0x20
inet6 2400:8902::f03c:91ff:fe9a:f00 prefixlen 64 scopeid 0x0
ether f2:3c:91:9a:0f:00 txqueuelen 1000 (Ethernet)
RX packets 697 bytes 315320 (307.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 445 bytes 71363 (69.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
现在编辑网卡配置文件:
nano /etc/network/interfaces
我的默认是使用的DHCP:
allow-hotplug eth0
iface eth0 inet dhcp
改桥接以及配置NAT(第一套方案):
allow-hotplug eth0
iface eth0 inet manual
auto xenbr0
iface xenbr0 inet static
address 139.162.125.54
netmask 255.255.255.0
gateway 139.162.125.1
bridge_ports eth0
auto xenbr1
iface xenbr1 inet static
address 192.168.0.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '192.168.0.0/24' -o xenbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '192.168.0.0/24' -o xenbr0 -j MASQUERADE
这套方案是桥接/NAT都能使用,如果你的小鸡有多个独立IP,那么待会创建小鸡的时候把网卡桥到xenbr0上面,如果小鸡只有一个独立IP,那么就桥到xenbr1上面用NAT。当然有些小鸡改桥接可能一重启网卡就会挂,再加上一般的VPS也没有多IP,那么你可以使用下面这套方案。
纯NAT(第二套方案):
allow-hotplug eth0
iface eth0 inet static
address 139.162.125.54
netmask 255.255.255.0
gateway 139.162.125.1
auto xenbr0
iface xenbr0 inet static
address 192.168.0.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '192.168.0.0/24' -o eth0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '192.168.0.0/24' -o eth0 -j MASQUERADE
当然我这边还是使用的第一套方案,配置好了之后现在重启网络服务:
systemctl restart networking.service
我的建议是既然改了Xen配置又改了网卡配置,用systemd去重启这些服务并不妥当,很有可能会报错,干脆再重启一遍VPS:
reboot
上来之后检查网桥状态:
brctl show
回显如下表示网桥正常: