Proxmox VE 母鸡上的 VPS 故障,大多数是网络问题:小鸡 ping 不通网关、额外的 /24 在母鸡上能用但小鸡里不通、IPv6 始终没有响应。解决方法取决于机房以何种方式交付 IP 地址。本文介绍两种常见的交付模式:桥接(on-link)和路由(routed),给出各自对应的 /etc/network/interfaces 配置,讲解 MAC 绑定的 IP、额外 /24 IP 段和 IPv6 子网,以及如何验证和排错。
/etc/network/interfaces,并在能连上控制台的情况下用 ifreload -a 应用更改。| 交付模式 | 特征 | 小鸡如何联网 |
|---|---|---|
| 桥接 / on-link | IP 段自带网关且网关在段内(例如 203.0.113.0/24 的网关为 203.0.113.1),与服务器处于同一网络 | 接在 vmbr0 上的小鸡直接使用机房网关 |
| 路由 | 机房把 IP 段路由到服务器的主 IP,段内没有网关 | 母鸡充当路由器,小鸡以母鸡作为网关 |
| MAC 绑定 | 只允许服务器自身的 MAC(或已登记的虚拟 MAC)为这些 IP 发送流量 | 母鸡上使用路由模式,或为每台小鸡登记一个虚拟 MAC |
服务器的交付信息中列出了每个 IP 段的网关和子网掩码。如果没有注明某个 IP 段是路由还是 on-link,请在配置前先咨询技术支持;靠猜往往要浪费好几个小时。
物理网卡作为 vmbr0 的端口,母鸡自身的 IP 移到网桥上。接在 vmbr0 上的小鸡就像一台台独立服务器一样,直接处在机房网络中。
# /etc/network/interfaces (main IP 198.51.100.10/24, gateway 198.51.100.1)
auto lo
iface lo inet loopback
iface eno1 inet manual
auto vmbr0
iface vmbr0 inet static
address 198.51.100.10/24
gateway 198.51.100.1
bridge-ports eno1
bridge-stp off
bridge-fd 0
以 on-link 方式交付的额外 IP 段(例如网关为 203.0.113.1 的 203.0.113.0/24)无需在母鸡上做任何修改:小鸡接在 vmbr0 上,配置该段中的地址和该段的网关即可,例如 ip=203.0.113.11/24,gw=203.0.113.1。
当机房把 203.0.113.0/24 路由到你的主 IP 时,把这个段放在一个不连接任何物理网卡的内部网桥上,母鸡使用段内第一个地址作为小鸡的网关,并开启转发。
# /etc/network/interfaces (vmbr0 as in Step 2, plus:)
auto vmbr1
iface vmbr1 inet static
address 203.0.113.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
echo 'net.ipv4.ip_forward = 1' > /etc/sysctl.d/80-forward.conf
sysctl --system
ifreload -a
小鸡接在 vmbr1 上,使用 203.0.113.2–254 的地址,网关为 203.0.113.1。由于母鸡占用了 .1,网络地址和广播地址也保留不可用,一个路由的 /24 可提供 253 个小鸡可用地址。流量以小鸡自己的源 IP 经母鸡主网卡发出,不涉及 NAT。
有些网络只接受来自服务器自身 MAC 地址的 IP 流量。桥接的小鸡各自有独立的 MAC,因此它们的数据包会被丢弃,表现为配置看起来没错却“没有网络”。有两种解决办法:
qm set 101 --net0 virtio=02:00:00:AA:BB:CC,bridge=vmbr0。如果 IPv6 子网(例如 /64 或 /56)是路由到母鸡的,处理方法与步骤 3 的路由 IPv4 段完全相同:在 vmbr1 上配置该子网中的一个地址,开启 IPv6 转发,并以该地址作为小鸡的网关。
# /etc/network/interfaces: add an IPv6 stanza to vmbr1
iface vmbr1 inet6 static
address 2001:db8:200::1/64
echo 'net.ipv6.conf.all.forwarding = 1' > /etc/sysctl.d/81-ipv6-forward.conf
sysctl --system
ifreload -a
# VM configuration (cloud-init)
qm set 101 --ipconfig0 ip=203.0.113.11/24,gw=203.0.113.1,ip6=2001:db8:200::11/64,gw6=2001:db8:200::1
注意:开启转发后,Linux 会忽略上联口收到的路由通告(RA),因此母鸡自己的 IPv6 默认路由必须在 vmbr0 上静态配置(即添加一段 iface vmbr0 inet6 static 配置,写明 address 和 gateway)。
如果你只有一个位于上联口的 on-link /64(机房路由器期望通过邻居发现直接找到每个地址),那么接在独立网桥上的小鸡将无法被访问,除非母鸡代替它们响应邻居发现(NDP 代理,例如使用 ndppd),并且仔细调整路由。更简单可靠的做法是向机房申请一个路由到母鸡的子网;IMIDC 技术支持可以告诉你的服务器属于哪种情况。
cp /etc/network/interfaces /root/interfaces.bak.$(date +%F)
ifreload -a
ip -br addr # addresses on vmbr0 / vmbr1
ip route # default route via the provider's gateway
bridge link # which ports and VM taps belong to which bridge
# Watch ARP and traffic for one VM address while it pings out
tcpdump -ni vmbr0 host 203.0.113.11
# From inside the VM
ping -c3 203.0.113.1 # gateway
ping -c3 1.1.1.1 # internet
ping -c3 google.com # DNS
如果小鸡能 ping 通网关但无法访问外网,说明上游丢弃了它的流量(MAC 绑定、缺少路由或子网掩码错误)。如果连网关都 ping 不通,请检查网桥、小鸡的 IP 和前缀,以及 Proxmox 防火墙的 IP 过滤是否放行了该地址。
按机房的交付方式来定。IP 段自带 on-link 网关时,桥接最简单。IP 段路由到主 IP 时必须使用路由模式;IP 与 MAC 绑定时,路由模式也是更稳妥的选择。
可以。公网 IP 小鸡放在 vmbr0 或 vmbr1 上,NAT 小鸡放在单独的内网网桥上,具体参见 Proxmox VE NAT 网络配置。
取决于机房和服务器。网关和子网掩码都写在交付信息中;如有任何不清楚的地方,请提交工单,我们会确认交付模式并协助你完成配置。
如果按以上步骤操作后问题仍未解决,请提交工单联系 IMIDC 7×24 技术支持,并附上母鸡服务器 IP、你的 IP 段、/etc/network/interfaces 的内容以及 ip -br addr 和 ip route 的输出,方便工程师快速定位。