单IP服务器利用ProxmoxVE建立IPv4-NAT和IPv6虚拟机 作者: Fmq 时间: 2018-10-19 分类: 随手笔记 ProxmoxVE是一个集成了KVM、OpenVZ的开源虚拟化管理平台。基于Debian构建。Proxmox有简单易用的WEB控制面板。让用户可以在网页环境中轻松的建立和管理KVM以及OpenVZ构架的虚拟机。 本方法适用于online.net / oneprovider.com和hetzner.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`,那么文件应该如下所示: ```bash 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的软件源及密钥,并更新系统,出现选项,选择默认即可。 ```bash 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`即可。 ```bash apt install proxmox-ve postfix open-iscsi -y ``` 安装结束。 #### 适用于online.net / oneprovider.com的ipv6安装说明 online.net提供IPv6地址是需要通过DHCP客户端获得,且官方给的教程安装,不适用于最新的ProxmoxVE环境,即使按照教程修改配置好,又会出现一个小时左右就断开连接的问题,所以我们另外使用odhcp6c来获得IPv6地址。 首先安装软件源,编辑`/etc/apt/sources.list` 添加以下内容: ```bash #DHCP6 Client deb http://httpredir.debian.org/debian experimental main ``` 然后安装odhcp6c ```bash apt-get update apt-get install odhcp6c ``` 通过ifconfig查看你的物理网卡的名称,例如`eno1` 通过online网页的服务器控制台得到IPv6地址信息: ```bash IPv6:2001:123:456:789::1/64 DUID:00:03:00:01:3f:12:34:56:78:90 ``` 在`/etc/network/interfaces`中添加以下内容 ```bash 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`,修改或者添加如下内容: ```bash options ipv6 disable=0 ``` 编辑`/etc/modules`,添加如下字符: ```bash ipv6 ``` 开启IPv4,IPv6转发,编辑`/etc/sysctl.conf`,添加以下内容到尾部: ```bash 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`,内容如下: ```bash 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镜像进行系统安装。 [](/usr/uploads/2018/10/moban.png "模板") CPU,内存,硬盘大小等可根据个人需求选择调配。网路部分配置如下 [](/usr/uploads/2018/10/networkconfig.png "networkconfig") OpenVZ虚拟机的网卡选择桥接在vmbr0上,IPv4地址选择内网地址段,IPv6地址选择对应物理网卡的地址段。DNS可以填写8.8.8.8或者2001:4860:4860::8888.配置完成后,启动虚拟机就可以连接到外网,但是这时只能访问IPv4地址,IPv6这个时候还是不通的,需要在主机输入以下命令开启: ```bash 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进行转发。 例如在主机中输入命令 ```bash 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](https://github.com/txthinking/brook "https://github.com/txthinking/brook") 在主机中,输入命令,获取最新版brook ```bash 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 ``` 输入命令,启动端口转发 ```bash 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`,填写: ```bash #!/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.local`的`exit 0`前面,就可以在开机后自动执行。 单IP的服务器,可以通过以上方式创建虚拟机。拥有多IP的服务器,需要把物理网卡设置成手动模式`iface eno1 inet manual`,然后新建一个网桥vmbr1,同时写入物理网卡信息: [](/usr/uploads/2018/10/vmbr1.png "vmbr1") 独立IP虚拟机配置网卡时选择桥接到vmbr1,并填写独立IP地址,并安照要求绑定MAC地址。不要忘记将所有填写eno1的地方改为vmbr1。 #### 更改ProxmoxVE的更新源 默认的更新源是订阅用户的更新源,这个是收费的,免费用户更新是失败的,我们需要更改至免费源。 编辑`/etc/apt/sources.list`,添加: ```bash # 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`中注释掉 ```bash #deb https://enterprise.proxmox.com/debian/pve stretch pve-enterprise ``` 再次更新,就不会报错。 ```bash apt-get update apt-get dist-upgrade ``` 解决KVM关闭失败的问题 ```bash apt-get install acpid ``` 至此,ProxmoxVE的虚拟机环境就配置完成,你可以按照自己的需要建立各类虚拟机,开展各种项目。 标签: brook, nat, ipv6, proxmoxve, online.net, oneprovider.com, digitalocean.com