lala.im:Debian9 KVM小鸡生小鸡(XenPV)

運維技術·lala.im · 2019-07-06 · 97 人浏览

原文地址: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

回显如下表示网桥正常:

運維技術 lala.im
Theme Jasmine by Kent Liao