单IPv4独服利用ProxmoxVE建立IPv4-NAT和IPv6虚拟机(小鸡)

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

据我参考的作者所说这个方法适合online.net / oneprovider.com和hetzner.de的独立服务器,以及digitalocean.com的VPS服务器。但目前我只在online的服务器上成功安装。

启用独服(母鸡)的ipv6

关于怎么让母鸡获取ipv6,可以看我这个教程:


最好不要使用ipv6 slaac获取ipv6,ipv6 slaac并没有把/64子网分配给你。请使用ipv6 blocks

安装ProxmoxVE

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

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

ProxmoxVE需要主机名可通过/etc/hosts解析,即需要为该主机名分配一个IPv4地址,同时确保未指定主机名的IPv6地址。
例如,服务器IP地址195.154.138.88,我们为主机设定名称为pve(如果你不知道主机名称是啥,直接在命令行里输入hostname,显示的即为你的主机名),那么文件应该如下所示:

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。
Postfix Configuration选项处,如果你的服务器没有邮件系统,并且大部分服务器商家也禁止用服务器向外界发送邮件,所以在出现的选项里面选择No configuration即可。

apt install proxmox-ve postfix open-iscsi -y

等待它安装结束。

配置网络

首先,配置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.enp1s0.autoconf=0
net.ipv6.conf.enp1s0.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

其中的enp1s0需要修改为自己的网卡名:

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


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

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug enp1s0
iface enp1s0 inet dhcp

post-up odhcp6c -P 56 -c 00:03:00:01:6b:e2:4e:a1:46:40    enp1s0 -d
post-up ip -6 a a 2001:bc8:2e51:100::/56 dev enp1s0
post-up ip -6 r a 2001:bc8:2e51:100::/56 dev enp1s0

#之前的内容都不动
#创建虚拟网桥
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
    address  2001:bc8:2e51:100::1
    netmask  56
#转发IPv4流量到虚拟机,使虚拟机与外网联通。
post-up   iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o enp1s0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o enp1s0 -j MASQUERADE

重启服务器,登录https://195.154.138.88:8006(注意这里是https)网页端进行配置。

可能会提示网站证书问题,这是因为它使用了自签证书,忽略即可。登陆用户名是root,密码是你的root密码

配置虚拟机

由于3o的独服性能并不算好,虽然ProxmoxVE可以创建KVM和OpenVZ类型虚拟机。但我还是选择使用OpenVZ类型虚拟机。
OpenVZ类型虚拟机是有官方提供的系统模板,可以直接下载使用,KVM需要自己上传ISO镜像进行系统安装。
左侧选择:数据中心-FR-local,选择模板,即为openvz的模板。
LXC.png
moban.png
选择一个模板下载使用。点击网页右上角创建CT,即为创建openvz虚拟机。
CPU,内存,硬盘大小等可根据个人需求选择调配。网路部分配置如下:
networkconfig.png
OpenVZ虚拟机的网卡选择桥接在vmbr0上,IPv4地址选择内网地址段,IPv6地址选择对应物理网卡的地址段。DNS可以填写8.8.8.8或者2001:4860:4860::8888,不填写也行。配置完成后,启动虚拟机就可以连接到外网,但是这时只能访问IPv4地址,IPv6这个时候还是不通的,需要在主机输入以下命令开启:

ip -f inet6 neigh add proxy 2001:bc8:2e51:100::100  dev enp1s0
ip -f inet6 route add 2001:bc8:2e51:100::100 dev vmbr0

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


端口中转的本地监听端口是外网访问母鸡的端口,比如10022。被转发ip是虚拟机的内网ip,比如10.10.10.100。被转发端口是虚拟机的端口,比如22。

基本上自带的openvz镜像都是最小镜像,没有ssh服务,需要你在小鸡的面板终端里面手动安装ssh服务

同时在ProxmoxVE防火墙中开放或者关闭10022端口来控制外网对虚拟机的访问。

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

这样,一个同时开启了NAT和IPv6的虚拟机就创建好了。但是,还有个问题,IPv6的配置和端口转发是会随着主机重启而失效,我们需要在主机上启动开机自启服务,保证每次开机的时候,虚拟机器都能正常工作。
(下面的方法不可行,求大神留言最新的方法)

使用下面的方法会导致重启母鸡后小鸡无法正常启动

这个方法压根不可行,为了防止有人和我一样被坑我就留着了,注意:使用该方法开机运行会导致小鸡无法正常启动,删除rc.local内的内容后,会导致母鸡无法启动
首先,需要在debian 9中开启开机自启服务:

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

由于online的一个ipv4要5€,我就不测试pve使用多个ipv4创建小鸡了。
没事别修改PVE的更新源,默认的源虽然不会更新PVE的版本,但还是会更新openvz的镜像包的,足够用了。

建议安装PVE之前母鸡启用BBR,毕竟openvz小鸡不能开启BBR


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

最后修改:2019 年 11 月 30 日 09 : 42 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论