虚拟化与母鸡

PVE 母鸡网卡配置:桥接与路由模式、额外 /24 IP 段、MAC 绑定与 IPv6 子网设置

6 个步骤 9 分钟阅读 17 次阅读 0
本文目录

Proxmox VE 母鸡上的 VPS 故障,大多数是网络问题:小鸡 ping 不通网关、额外的 /24 在母鸡上能用但小鸡里不通、IPv6 始终没有响应。解决方法取决于机房以何种方式交付 IP 地址。本文介绍两种常见的交付模式:桥接(on-link)和路由(routed),给出各自对应的 /etc/network/interfaces 配置,讲解 MAC 绑定的 IP、额外 /24 IP 段和 IPv6 子网,以及如何验证和排错。

网络配置一旦写错,SSH 和 Web 管理界面都会断开。请保持 IPMI/KVM 控制台可用,修改前先备份 /etc/network/interfaces,并在能连上控制台的情况下用 ifreload -a 应用更改。

步骤 1:确认 IP 的交付方式

交付模式特征小鸡如何联网
桥接 / on-linkIP 段自带网关且网关在段内(例如 203.0.113.0/24 的网关为 203.0.113.1),与服务器处于同一网络接在 vmbr0 上的小鸡直接使用机房网关
路由机房把 IP 段路由到服务器的主 IP,段内没有网关母鸡充当路由器,小鸡以母鸡作为网关
MAC 绑定只允许服务器自身的 MAC(或已登记的虚拟 MAC)为这些 IP 发送流量母鸡上使用路由模式,或为每台小鸡登记一个虚拟 MAC

服务器的交付信息中列出了每个 IP 段的网关和子网掩码。如果没有注明某个 IP 段是路由还是 on-link,请在配置前先咨询技术支持;靠猜往往要浪费好几个小时。

步骤 2:桥接模式(网关在 IP 段内)

物理网卡作为 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。

步骤 3:路由模式(IP 段路由到主 IP)

当机房把 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。

步骤 4:MAC 绑定的 IP

有些网络只接受来自服务器自身 MAC 地址的 IP 流量。桥接的小鸡各自有独立的 MAC,因此它们的数据包会被丢弃,表现为配置看起来没错却“没有网络”。有两种解决办法:

  • 路由模式:请机房把 IP 段路由到服务器主 IP,然后按步骤 3 配置,这样所有流量都通过母鸡自身的 MAC 地址发出。
  • 虚拟 MAC:如果机房提供虚拟 MAC,为每个 IP 申请一个 MAC 并设置到小鸡网卡上:qm set 101 --net0 virtio=02:00:00:AA:BB:CC,bridge=vmbr0。

步骤 5:为小鸡配置 IPv6 子网

如果 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 技术支持可以告诉你的服务器属于哪种情况。

步骤 6:应用配置并验证

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 小鸡和 NAT 小鸡吗?

可以。公网 IP 小鸡放在 vmbr0 或 vmbr1 上,NAT 小鸡放在单独的内网网桥上,具体参见 Proxmox VE NAT 网络配置。

IMIDC 的 IP 段是桥接交付还是路由交付?

取决于机房和服务器。网关和子网掩码都写在交付信息中;如有任何不清楚的地方,请提交工单,我们会确认交付模式并协助你完成配置。

如果按以上步骤操作后问题仍未解决,请提交工单联系 IMIDC 7×24 技术支持,并附上母鸡服务器 IP、你的 IP 段、/etc/network/interfaces 的内容以及 ip -br addr 和 ip route 的输出,方便工程师快速定位。

这篇文章有帮助吗?

相关教程