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,那么文件应该如下所示:

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镜像进行系统安装。

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

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

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

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

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

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,同时写入物理网卡信息:

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

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

独立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的虚拟机环境就配置完成,你可以按照自己的需要建立各类虚拟机,开展各种项目。