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 的輸出,方便工程師快速定位。