Ubuntu

KVM Ubuntu Guest 無法通過橋接網路連接到 Internet

  • August 15, 2014

我有 Ubuntu 14.04(64 位)+ 帶有 2 個 NIC 的 KVM 主機:

  • eth0 連接到“公共”網路

  • eth1 連接到具有私有 IP 地址範圍的 br0 網橋

從主機我可以訪問網際網路,ping VM Guest 並通過 SSH 連接到它。

從 VM 來賓我只能 ping 主機,但無法訪問 Internet,也無法 ping google.com

請幫助我按照下述設置將 VM Guest 連接到 Internet:


在主機上:

/etc/網路/介面

自動lo
iface lo inet 環回

自動 eth0
iface eth0 inet 靜態
地址 192.168.2.60
網路遮罩 255.255.255.0
網關 192.168.2.254
dns 名稱伺服器 8.8.8.8

汽車 eth1
iface eth1 inet 手冊

自動 br0
iface br0 inet 靜態
地址 10.0.0.1
網路遮罩 255.255.255.0
橋接埠 eth1
bridge_stp 關閉
橋接最大等待 0
bridge_fd 0

# 自動創建和銷毀網橋。
預 brctl addbr br0
ip link set dev br0 up
發布 /usr/sbin/brctl setfd br0 0 addif br0 eth1
後置 brctl delbr br0

KVM 網路定義為:

<network>
<name>br0-net</name>
<uuid>9d24b473-0b4d-4cfa-8b12-7bf267d856ae</uuid>
<forward mode='bridge'/>
<bridge name='br0'/>
</network>

sysctl -p /etc/sysctl.conf

net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

路線 -n

核心IP路由表
目標網關 Genmask 標誌 Metric Ref Use Iface
0.0.0.0 192.168.2.254 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

iptables -t nat -vnL

鏈 PREROUTING(策略接受 0 個數據包,0 個字節)
pkts bytes target prot opt in out source destination

鏈輸入(策略接受 0 個數據包,0 個字節)
pkts bytes target prot opt in out source destination

鏈輸出(策略接受 0 個數據包,0 個字節)
pkts bytes target prot opt in out source destination

Chain POSTROUTING(策略接受 0 個數據包,0 個字節)
pkts bytes target prot opt in out source destination

在虛擬機訪客上:

/etc/網路/介面

自動lo
iface lo inet 環回

自動 eth0
iface eth0 inet 靜態
地址 10.0.0.11
網路遮罩 255.255.255.0

來賓 xml 定義為

<interface type='bridge'>
<mac address='52:54:00:6b:93:69'/>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</interface>

路線 -n

核心IP路由表
目標網關 Genmask 標誌 Metric Ref Use Iface
0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

iptables -t nat -vnL

鏈 PREROUTING(策略接受 0 個數據包,0 個字節)
pkts bytes target prot opt in out source destination

鏈輸入(策略接受 0 個數據包,0 個字節)
pkts bytes target prot opt in out source destination

鏈輸出(策略接受 0 個數據包,0 個字節)
pkts bytes target prot opt in out source destination

Chain POSTROUTING(策略接受 0 個數據包,0 個字節)
pkts bytes target prot opt in out source destination

來自 Guest 的 Ping KVM 主機確實適用於 10.0.0.1 和 192.168.2.60:

$ ping 10.0.0.1

PING 10.0.0.1 (10.0.0.1) 56(84) 字節數據。
來自 10.0.0.1 的 64 個字節:icmp_seq=1 ttl=64 time=0.555 ms

$ ping 192.168.2.60

PING 192.168.2.60 (192.168.2.60) 56(84) 個字節的數據。
來自 192.168.2.60 的 64 個字節:icmp_seq=1 ttl=64 time=0.772 ms

從 Guest ping 另一台電腦 192.168.2.3 不起作用:

--- 192.168.2.3 ping 統計 ---
277個包發送,0個接收,100%丟包,時間276399ms

從訪客 Ping google.com 不起作用:

ping:未知主機 google.com

我認為您缺少偽裝的 iptable 規則

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE

引用自:https://serverfault.com/questions/620811