第三篇 Proxmox 网络配置

教程参考:
1.Network Configuration by Proxmox
https://pve.proxmox.com/wiki/Network_Configuration
2.Network Configuration by Hetzner
https://community.hetzner.com/tutorials/install-and-configure-proxmox_ve#step-2---network-configuration
在完成PVE安装之后,它默认是使用物理网卡作为PVE网卡,由于hetzner严格的防MAC多用检查机制,一旦您直接开虚拟机,会容易收到来自hetzner的MAC abuse滥用警告邮件,不及时处理会导致您的杜甫直接没收,甚至封禁您的账号。所以每次安装pve之后,别着急开虚拟机,得先做好虚拟机专用网卡以替代物理网卡从而避免MAC abuse滥用警告。
由于hetzner的IPv4地址收费规则过于离谱,不仅比常规市场价稍高还特么收金子般的设置费。

我们购买这样的独立服务器,会有一个IPv4地址和一个IPv6子网,/64的掩码前缀意味着是你拥有着:18 446 744 073 709 552 000个IPv6地址。因此这是我们建站或者设置服务的必选地址,因为域名可以是对接服务端上的ipv4也可以是ipv6的,而且Cloudflare一般支持IPv6接入,这样就可以访问Web服务了,如果您的地方网络只能支持IPv4的话,Cloudflare的6 to 4的选择最有价值的!参考:使用Cloudflare代理为纯IPv6站点添加IPv4访问
现在我们开始设置PVE网络配置教程!
本教程将采用我们最为常见的PVE网络状态:单IPv4 + 64前缀的IPv6子网。如果预算足够,本人则建议购买IPv4子网以此作为部分虚拟机公网IPv4,这样就不需要特别麻烦的端口转发设置。如下图所示是PVE网络拓扑图:

—分隔符—

Step 1 : 开启端口转发和流量控制
由于您的地方网络可能没有IPv6地址,因此在虚拟机上面的RDP远程桌面,SSH,FTP等必需开启的服务是需要使用IPv4作为通信地址,但是只有一个的IPv4地址,还是只能给予宿主机的;不过除了宿主机必须使用的端口之外,还有剩余端口仍在空闲状态,因此采用端口转发来使在宿主机上未使用的端口对接到虚拟机上必须转发的端口。以此可以访问<公网IPv4地址> : <目标端口>来使用虚拟机上的服务。
用文本编辑器打开 /etc/sysctl.conf :
root@BSX05 ~ # vim /etc/sysctl.conf
在 sysctl.conf 里面,在末尾添加以下内容:
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
net.ipv4.ip_forward = 1
net.ipv6.conf.all.accept_dad = 1
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.all.accept_redirects = 1
net.ipv6.conf.all.accept_source_route = 0
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.all.forwarding = 1

其中,前两行为流量控制,剩下的则为端口转发。
输入完之后,保存并退出至命令行界面,输入此命令以生效:
root@BSX05 /etc # sysctl -p
您可以输入以下命令以检查是否真正生效:
root@BSX05 /etc # sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
root@BSX05 /etc # sysctl net.ipv6.conf.all.forwarding
net.ipv6.conf.all.forwarding = 1
root@BSX05 /etc #

Step 2 : 设置INTERFACES文件
PVE 8.4带来的新功能:ifupdown2,此功能可以允许您先创建interfaces.new,然后交由ifupdown2进行验证,如果其中有错误,它会恢复原interfaces,而不会导致您与服务器的连接中断并无法连接;如果正确无误,它会在ifreload命令下将interfaces.new替换原interfaces以此新网络配置生效。
本人这里使用一个物理网卡,两个虚拟网卡搭建好PVE网络体系,其中第一个虚拟网卡作为桥接网卡桥接于物理网卡,第二个虚拟网卡就正式作为虚拟机内网网卡。在此之前,请收集此宿主机的物理网卡名称和公网IP信息.
要收集的公网IP信息如下:
- 公网IPv4地址
- 此地址的子网掩码
- 公网IPv4地址所在的网关
同样IPv6也是需要收集的:
- 公网IPv6地址(一般带有子网前缀,便是子网掩码的数字:2a01:4f9:xxxx:xxxx::/64)
- 公网IPv6地址所在的网关
- 此地址的子网掩码(可选,仅供参考)


在Network Configuration By Proxmox中,有多种搭建方法供君选择,这里本人推荐:
Masquerading (NAT) with iptables
同样,也可以使用Masquerading (NAT) By Hetzner的方法。
Masquerading (NAT) / 伪装(NAT) 解释:
无需配置/拥有任何其他公共 IP 地址,即可将虚拟机/LXC 容器暴露到互联网。Hetzner 具有严格的 IP/MAC 绑定,这意味着如果流量路由不当,将导致滥用并可能导致服务器阻塞。为了避免此问题,我们可以通过主机的主接口路由来自 LXC/VM 的流量。这可确保所有网络数据包的 MAC 地址相同。伪装使具有私有 IP 地址的虚拟机能够通过主机的公共 IP 地址访问互联网进行出站通信。Iptables 会修改每个传出的数据包,使其看起来像是来自主机,并且传入的回复也会进行调整,以便将其定向回初始发送者。
要使用此方法,请先进入network文件夹,用文本编辑器新建 interfaces.new 。
root@BSX05 ~ # cd /etc/network
root@BSX05 /etc/network # vim /etc/network/interfaces.new
新建 interfaces.new 之后,请复制粘贴以下的模板:(省事)
### Hetzner Online GmbH installimage
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
iface lo inet6 loopback
auto enp41s0
#注意更改enp41s0为自己网卡名称
iface enp41s0 inet manual
# post-up /sbin/ethtool -K enp41s0 tx off rx off
iface enp41s0 inet6 manual
auto vmbr0
iface vmbr0 inet static
address 1.2.3.10
#母鸡ipv4
netmask 255.255.255.192
#母鸡ipv4子网掩码
gateway 1.2.3.4
#母鸡ipv4网关
pointopoint 1.2.3.4
#同上ipv4网关
hwaddress ether aa:bb:cc:dd:ee:ff
#网卡mac地址
bridge_ports enp41s0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
# post-up /sbin/ethtool -K vmbr0 tx off rx off
iface vmbr0 inet6 static
address 2a01:abc:abc:abc::2
#母鸡ipv6
netmask 64
gateway fe80::1
#母鸡ipv6网关
bridge_ports enp41s0
bridge_stp off
bridge_fd 0
up ip -6 route del 2a01:abc:abc:abc::/64 dev vmbr0
#上面为母鸡ipv6网段
auto vmbr1
iface vmbr1 inet static
address 192.168.1.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.1.0/24' -o vmbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '192.168.1.0/24' -o vmbr0 -j MASQUERADE
iface vmbr1 inet6 static
address 2a01:abc:abc:abc::3/64
#母鸡另一个ipv6地址,作为小鸡ipv6网关
#gateway fe80::1
bridge_ports none
bridge_stp off
bridge_fd 0
up ip -6 route add 2a01:abc:abc:abc::/64 dev vmbr1
post-down ip -6 route del 2a01:abc:abc:abc::/64 dev vmbr1
#上面为母鸡ipv6网段
请按照在模板上面的的注释,修改相应的内容以匹配您的公网IP信息。下面是本人配置的参考:
### BSX05 interfaces ###
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
iface lo inet6 loopback
auto enp5s0
iface enp5s0 inet manual
# post-up /sbin/ethtool -K enp5s0 tx off rx off
iface enp5s0 inet6 manual
auto vmbr0
iface vmbr0 inet static
address 65.108.xxx.xxx
netmask 255.255.255.192
gateway 65.108.xxx.xxx
# hwaddress ether 60:cf:84:5f:55:bc
bridge_ports enp5s0
bridge_stp off
bridge_fd 0
# bridge_maxwait 0
# post-up /sbin/ethtool -K vmbr0 tx off rx off
iface vmbr0 inet6 static
address 2a01:4f9:xxxx:xxxx::2
netmask 64
gateway fe80::1
bridge_ports enp5s0
bridge_stp off
bridge_fd 0
up ip -6 route del 2a01:4f9:xxxx:xxxx::/64 dev vmbr0
auto vmbr1
iface vmbr1 inet static
address 10.0.0.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
post-up iptables -t nat -A POSTROUTING -s '10.0.0.0/24' -o vmbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.0.0.0/24' -o vmbr0 -j MASQUERADE
post-up iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1
iface vmbr1 inet6 static
address 2a01:4f9:xxxx:xxxx::3
netmask 64
# gateway fe80::1
bridge_ports none
bridge_stp off
bridge_fd 0
up ip -6 route add 2a01:4f9:xxxx:xxxx::/64 dev vmbr1
post-down ip -6 route del 2a01:4f9:xxxx:xxxx::/64 dev vmbr1
保存并退出,重启宿主机的网络服务:
systemctl restart networking.service
检查网络服务状态:
systemctl status networking.service
如果网络服务状态是正常运行的话,可以尝试重启服务器,为了以防万一,IPMI还是要申请一下:
reboot
如果您能正常进入ssh,则表示您所配置的已经正确地生效了,检查路由:
root@BSX05 /etc/network # ip route
default via 65.108.196.xxx dev vmbr0 proto kernel onlink
10.0.0.0/24 dev vmbr1 proto kernel scope link src 10.0.0.1
65.108.196.xxx/26 dev vmbr0 proto kernel scope link src 65.108.196.xxx
输出如上结果,这样虚拟机的网络数据包正确被转发到物理网卡上以传出到以太网。
root@BSX05 /etc/network # ip -6 route
2a01:4f9:1a:xxxx::/64 dev vmbr1 proto kernel metric 256 pref medium
2a01:4f9:1a:xxxx::/64 dev vmbr1 metric 1024 pref medium
fe80::/64 dev vmbr0 proto kernel metric 256 pref medium
fe80::/64 dev vmbr1 proto kernel metric 256 pref medium
fe80::/64 dev enp5s0 proto kernel metric 256 pref medium
fe80::/64 dev tap101i0 proto kernel metric 256 pref medium
fe80::/64 dev tap102i0 proto kernel metric 256 pref medium
fe80::/64 dev tap100i0 proto kernel metric 256 pref medium
default via fe80::1 dev vmbr0 proto kernel metric 1024 onlink pref medium
输入 ip -6 route ,输出如上结果则表示可以以ipv6方式访问虚拟机上的服务。
这样,您的服务器可以使用NATv4 + 独立v6的网络配置方式,在只能使用IPv4网络的地方可以使用<公网IPv4地址> : <目标端口> 访问ssh或者rdp,建站或游戏服务器搭建则可以使用IPv6套上CF,以域名方式可以连接上,或者如果您的网络支持IPv6情况下,则可以全权v6方式访问虚拟机上了。
对于NATv4如何使用端口转发,我将会再发一篇专门介绍如何使用iptables来进行端口转发。传送门:(第四篇)。

Step 3 : 让NATv4启用DHCP自动分配(可选)
为了解放人工,不需要为虚拟机单独分配静态IPv4地址而焦头烂额,大掉头发。效仿三层交换机该有的功能一样,我们可以选择软件DHCP来帮助我们自动分配IPv4/IPv6地址。
在选择DHCP方面上,我们可以直接在interfaces上面直接:iface vmbr1 inet dhcp ,让内核进行DHCP自动分配,而IPv6同样可以使用SLAAC方式来DHCPv6自动分配。
或者跟本人的选择一样,采用较为成熟的DHCP软件方案来执行DHCPv4自动分配,而DHCPv6本人正在研究但研究优先级非常非常低,就先不考虑DHCPv6了。这次教程我们选择:ISC-DHCP-Server。由于ISC宣布于2022年结束维护ISC-DHCP,这意味着目前版本即为最终版,因此不考虑后面的bug,当然ISC也发布他们的新一代DHCP软件:Kea。但目前处于开发状态,对于需要稳定的用户来说不需要考虑它,但是尝鲜的话可以试用一下。
1.安装isc-dhcp-server:
root@BSX05 ~ # apt install isc-dhcp-server
2.配置监听网卡:
用文本编辑器打开 /etc/default/isc-dhcp-server :
root@BSX05 ~ # vim /etc/default/isc-dhcp-server

INTERFACESv4="" # 此处添加需要提供DHCP服务的网卡名,如虚拟内网网卡:vmbr1
3.配置DHCP池:
用文本编辑器打开 /etc/dhcp/dhcpd.conf,按照您的要求修改如下内容:
root@BSX05 /etc/dhcp # vim /etc/dhcp/dhcpd.conf


下列是仅供参考的模板,需要根据情况修改相应配置内容:
option domain-name "dns.sb";
option domain-name-servers 185.222.222.222, 45.11.45.11;
default-lease-time 600;
max-lease-time 2400;
ddns-update-style none;
.......
authoritative;
log-facility local7;
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.5 10.0.0.240;
option subnet-mask 255.255.255.0;
option domain-name "dns.sb";
option domain-name-servers 185.222.222.222, 45.11.45.11;
option routers 10.0.0.1;
option netbios-name-servers 10.0.0.1;
option netbios-node-type 8;
get-lease-hostnames true;
use-host-decl-names true;
default-lease-time 600;
max-lease-time 2400;
interface vmbr1;
}
保存并退出。
4.配置静态地址绑定(可选):
host <任意名称> {
hardware ethernet 00:00:00:00:00:00; # MAC地址 -> 虚拟机网卡地址
server-name "dsm.wangsansan.com"; # 主机名 -> 虚拟机主机名
fixed-address 10.0.0.125; # IP地址 -> 你选定的
infinite-is-reserved on; # 保留该地址
}
5.启动 isc-dhcp-server 服务:
service isc-dhcp-server start # 启动服务
service isc-dhcp-server status # 查看状态
6.检查服务状态:
#dhcpd为 isc-dhcp-server 服务
root@BSX05 /etc/dhcp # netstat -uap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 0.0.0.0:bootps 0.0.0.0:* 209902/dhcpd
udp 0 0 0.0.0.0:sunrpc 0.0.0.0:* 1/init
udp 0 0 localhost.localdoma:323 0.0.0.0:* 926/chronyd
udp6 0 0 [::]:sunrpc [::]:* 1/init
udp6 0 0 ip6-localhost:323 [::]:* 926/chronyd
或者
root@BSX05 /etc/dhcp # systemctl status isc-dhcp-server
● isc-dhcp-server.service - LSB: DHCP server
Loaded: loaded (/etc/init.d/isc-dhcp-server; generated)
Active: active (running) since Sat 2025-05-10 19:34:16 EEST; 4 days ago
Docs: man:systemd-sysv-generator(8)
Tasks: 1 (limit: 76544)
Memory: 8.6M
CPU: 1.444s
CGroup: /system.slice/isc-dhcp-server.service
└─209902 /usr/sbin/dhcpd -4 -q -cf /etc/dhcp/dhcpd.conf vmbr1
May 14 22:43:18 BSX05 dhcpd[209902]: DHCPACK on 10.0.0.8 to bc:24:11:46:f8:2b (WIN-BCU5MPFK6FQ) via vmbr1
May 14 22:44:24 BSX05 dhcpd[209902]: No hostname for 10.0.0.7
May 14 22:44:24 BSX05 dhcpd[209902]: DHCPREQUEST for 10.0.0.7 from bc:24:11:d1:a8:65 (bsx06-Standard-PC-Q35-ICH9-2009) via vmbr1
May 14 22:44:24 BSX05 dhcpd[209902]: DHCPACK on 10.0.0.7 to bc:24:11:d1:a8:65 (bsx06-Standard-PC-Q35-ICH9-2009) via vmbr1
May 14 22:47:39 BSX05 dhcpd[209902]: No hostname for 10.0.0.9
May 14 22:47:39 BSX05 dhcpd[209902]: DHCPREQUEST for 10.0.0.9 from bc:24:11:98:73:64 (bsx07) via vmbr1
May 14 22:47:39 BSX05 dhcpd[209902]: DHCPACK on 10.0.0.9 to bc:24:11:98:73:64 (bsx07) via vmbr1
May 14 22:48:18 BSX05 dhcpd[209902]: No hostname for 10.0.0.8
May 14 22:48:18 BSX05 dhcpd[209902]: DHCPREQUEST for 10.0.0.8 from bc:24:11:46:f8:2b (WIN-BCU5MPFK6FQ) via vmbr1
May 14 22:48:18 BSX05 dhcpd[209902]: DHCPACK on 10.0.0.8 to bc:24:11:46:f8:2b (WIN-BCU5MPFK6FQ) via vmbr1

至此,您的DHCPv4正常启动,在您的虚拟机上面网络设置改为DHCP方式即可接收自动分配地址。
—分隔符—

