单IP服务器利用ProxmoxVE建立IPv4-NAT和IPv6虚拟机 – 蜂鸣器

单IP服务器利用ProxmoxVE建立IPv4-NAT和IPv6虚拟机 – 蜂鸣器

ProxmoxVE是一个集成了KVM、OpenVZ的开源虚拟化管理平台。基于Debian构建。Proxmox有简单易用的WEB控制面板。让用户可以在网页环境中轻松的建立和管理KVM以及OpenVZ构架的虚拟机。

本方法适用于online.net / oneprovider.comhetzner.de的独立服务器,以及digitalocean.com的VPS服务器。

1:安装ProxmoxVE

ProxmoxVE有2种安装方式,一种是常见的从ISO引导安装,需要独立服务器提供IPMI远程界面及远程挂载ISO的功能,因为地域网络限制,不方便且速度较慢。另外一种方法是直接在Debian9系统中通过网络安装,通用性较强,且直接安装最新版本,推荐使用。
首先安装标准的Debian9(64位),一般系统模板中提供的Debian9即可。

为服务器IP地址添加/etc/hosts解析

ProxmoxVE需要主机名可通过/etc/hosts解析,即需要为该主机名分配一个IPv4地址,同时确保未指定主机名的IPv6地址。
例如,服务器IP地址195.154.138.88,我们为主机设定名称为pve,那么文件应该如下所示:

127.0.0.1       localhost.localdomain localhost  195.154.138.88  pve  # The following lines are desirable for IPv6 capable hosts  ::1     localhost ip6-localhost ip6-loopback  ff02::1 ip6-allnodes  ff02::2 ip6-allrouters  

输入命令hostname --ip-address,返回值应该是你的服务器IPv4地址。这一步不可跳过且必须正确配置,这是后续安装顺利进行的保证。
接着添加ProxmoxVE的软件源及密钥,并更新系统,出现选项,选择默认即可。

echo "deb http://download.proxmox.com/debian/pve stretch pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list    wget http://download.proxmox.com/debian/proxmox-ve-release-5.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-5.x.gpg    apt update && apt dist-upgrade -y  

安装ProxmoxVE。如果你的服务器没有邮件系统,在出现的选项里面选择local only即可。

apt install proxmox-ve postfix open-iscsi -y  

安装结束。

适用于online.net / oneprovider.com的ipv6安装说明

online.net提供IPv6地址是需要通过DHCP客户端获得,且官方给的教程安装,不适用于最新的ProxmoxVE环境,即使按照教程修改配置好,又会出现一个小时左右就断开连接的问题,所以我们另外使用odhcp6c来获得IPv6地址。
首先安装软件源,编辑/etc/apt/sources.list 添加以下内容:

#DHCP6 Client  deb http://httpredir.debian.org/debian experimental main  

然后安装odhcp6c

apt-get update    apt-get install odhcp6c  

通过ifconfig查看你的物理网卡的名称,例如eno1
通过online网页的服务器控制台得到IPv6地址信息:

IPv6:2001:123:456:789::1/64    DUID:00:03:00:01:3f:12:34:56:78:90  

/etc/network/interfaces中添加以下内容

post-up odhcp6c -P 64 -c 00:03:00:01:3f:12:34:56:78:90 eno1 -d    post-up ip -6 a a 2001:123:456:789::1/64 dev eno1  

重启服务器后即可获得IPv6地址。

2:配置网络

首先,配置IPv6网络,编辑/etc/modprobe.d/local.conf,修改或者添加如下内容:

options ipv6 disable=0  

编辑/etc/modules,添加如下字符:

ipv6  

开启IPv4,IPv6转发,编辑/etc/sysctl.conf,添加以下内容到尾部:

net.ipv4.ip_forward=1  net.ipv4.conf.all.rp_filter=1  net.ipv4.icmp_echo_ignore_broadcasts=1  net.ipv4.conf.default.forwarding=1  net.ipv4.conf.default.proxy_arp = 0  net.ipv4.conf.default.send_redirects = 1  net.ipv4.conf.all.send_redirects = 0  net.ipv6.conf.eno1.autoconf=0  net.ipv6.conf.eno1.accept_ra=2  net.ipv6.conf.default.forwarding=1  net.ipv6.conf.all.forwarding=1  net.ipv6.conf.default.proxy_ndp=1  net.ipv6.conf.all.proxy_ndp=1  

其中红色部分修改为自己的网卡名:

net.ipv6.conf.eno1.autoconf=0
net.ipv6.conf.eno1.accept_ra=2

最后,编辑/etc/network/interfaces,内容如下:

auto lo  iface lo inet loopback  iface lo inet6 loopback    auto eno1  iface eno1 inet static          address  195.154.138.88          netmask  255.255.255.0          gateway  195.154.138.1  iface eno1 inet6 static          address  2a01:4f8:200:1241::1          netmask  64          gateway  fe80::1  #物理网卡配置一般不做改动,系统模板都是配置好的。    auto vmbr0            #为虚拟机新建一个虚拟网桥  iface vmbr0 inet static          address  10.10.10.1  #内网地址,虚拟机的网关          netmask  255.255.255.0          bridge-ports none          bridge-stp off          bridge-fd 0  iface vmbr0 inet6 static   #为虚拟机提供IPv6桥接,与主机IPv6地址相同          address  2001:123:456:789::1          netmask  64    #转发IPv4流量到虚拟机,使虚拟机与外网联通。  post-up   iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o eno1 -j MASQUERADE    post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o eno1 -j MASQUERADE    #online服务器专用  post-up odhcp6c -P 64 -c 00:03:00:01:3f:12:34:56:78:90 eno1 -d    post-up ip -6 a a 2001:123:456:789::1/64 dev eno1  

重启服务器,登录https://195.154.138.88:8006 网页端进行配置。

3:配置虚拟机

ProxmoxVE可以创建KVM和OpenVZ类型虚拟机。
OpenVZ类型虚拟机是有官方提供的系统模板,可以直接下载使用,KVM需要自己上传ISO镜像进行系统安装。

模板

CPU,内存,硬盘大小等可根据个人需求选择调配。网路部分配置如下

networkconfig

OpenVZ虚拟机的网卡选择桥接在vmbr0上,IPv4地址选择内网地址段,IPv6地址选择对应物理网卡的地址段。DNS可以填写8.8.8.8或者2001:4860:4860::8888.配置完成后,启动虚拟机就可以连接到外网,但是这时只能访问IPv4地址,IPv6这个时候还是不通的,需要在主机输入以下命令开启:

ip -f inet6 neigh add proxy 2001:123:456:789::100 dev eno1    ip -f inet6 route add 2001:123:456:789::100 dev vmbr0  

尝试ping google.com以及ping6 ipv6.google.com来检验网络是否通畅。
因为IPv6地址没有内网与外网区分,外网是可以直接通过IPv6地址访问虚拟机,所以也可只配置IPv6信息,不配置IPv4信息。
如果有多台虚拟机,可以为每台虚拟机配置一个IPv6地址。理论上硬件允许的话你可以开无限个IPv6虚拟机。
另一方面,IPv4是经过内网转发的,所以现在只可以访问外网,而外网却无法访问虚拟机。所以我们需要配置端口转发,将外部的访问转发到虚拟机。一般的做法是通过iptables进行转发。
例如在主机中输入命令

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 10022 -j DNAT --to-destination 10.10.10.100:22  

这样,访问服务器10022端口就会自动转发到虚拟机10.10.10.100的22端口上,实现了外网通过ssh登陆虚拟机的目的。但是,这样做有一个问题,ProxmoxVE自带防火墙,iptables开放22端口,相当于在防火墙上面开了一个洞,而且这个洞不受防火墙的控制,如果需要做安全防护,你还需要单独配置iptables,不是很方便。于是想到一个折中办法,用brook做端口转发,同时利用ProxmoxVE的防火墙进行统一控制。
首先获取brook,项目地址https://github.com/txthinking/brook
在主机中,输入命令,获取最新版brook

ver=$(wget -qO- "https://github.com/txthinking/brook/tags"| grep "/txthinking/brook/releases/tag/"| head -n 1| awk -F "/tag/" '{print $2}'| sed 's/">//') && echo ${brook_ver}    wget -O /root/brook https://github.com/txthinking/brook/releases/download/$ver/brook    chmod +x /root/brook  

输入命令,启动端口转发

nohup /root/brook relay -l :10022 -r 10.10.10.100:22  

利用命令ps -ef|grep brook来查看转发是否生效,同时在ProxmoxVE防火墙中开放或者关闭10022端口来控制外网对虚拟机的访问。

KVM虚拟机的配置是类似的,创建时选择桥接vmbr0,不论安装的是Linux系统还是windows系统,都需要手动输入IPv4和IPv地址,同时在主机配置IPv6信息和添加端口转发。

这样,一个同时开启了NAT和IPv6的虚拟机就创建好了,但是,还有个问题,IPv6的配置和端口转发是会随着主机重启而失效,我们需要在主机上启动开机自启服务,保证每次开机的时候,虚拟机器都能正常工作。
首先,需要在debian9中开启开机自启服务,创建/etc/rc.local,填写:

#!/bin/sh -e  #  # rc.local  #  # This script is executed at the end of each multiuser runlevel.  # Make sure that the script will "exit 0" on success or any other  # value on error.  #  # In order to enable or disable this script just change the execution  # bits.  #  # By default this script does nothing.    exit 0  

运行命令:

chmod +x /etc/rc.local赋予执行权限

systemctl start rc-local启动服务

这样,我们只需要将需要执行的命令写在/etc/rc.localexit 0前面,就可以在开机后自动执行。

单IP的服务器,可以通过以上方式创建虚拟机。拥有多IP的服务器,需要把物理网卡设置成手动模式iface eno1 inet manual,然后新建一个网桥vmbr1,同时写入物理网卡信息:

vmbr1

独立IP虚拟机配置网卡时选择桥接到vmbr1,并填写独立IP地址,并安照要求绑定MAC地址。不要忘记将所有填写eno1的地方改为vmbr1。

更改ProxmoxVE的更新源

默认的更新源是订阅用户的更新源,这个是收费的,免费用户更新是失败的,我们需要更改至免费源。
编辑/etc/apt/sources.list,添加:

# PVE pve-no-subscription repository provided by proxmox.com,  # NOT recommended for production use  deb http://download.proxmox.com/debian/pve stretch pve-no-subscription  

同时在/etc/apt/sources.list.d/pve-enterprise.list中注释掉

#deb https://enterprise.proxmox.com/debian/pve stretch pve-enterprise  

再次更新,就不会报错。

apt-get update    apt-get dist-upgrade  

解决KVM关闭失败的问题

apt-get install acpid  

至此,ProxmoxVE的虚拟机环境就配置完成,你可以按照自己的需要建立各类虚拟机,开展各种项目。

标签: brook, nat, ipv6, proxmoxve, online.net, oneprovider.com, digitalocean.com