Networking
具有多個子網的 KVM 的 IP 橋接器
我有一台執行 KVM 的機器,並在 eth0 上有一個帶有機器 IP 地址的網橋。該機器的 IP 地址範圍內沒有更多可用的 IP 地址。我正在嘗試為 KVM 來賓提供第二個子網,以用於他們的 IP 地址。
network -- eth0 --- bridge0 --| (x.x.x.75/26) |-- guest0:eth0 (x.x.y.213/28) | |-- guest1:eth0 (x.x.y.214/28)
我通過在主機上創建一個 ifcfg-bridge0 文件來創建網橋,它通常似乎可以正常工作,但是我無法啟動從外部世界到來賓的連接。奇怪的是客人可以訪問網際網路,所以很明顯返回的數據包到達了它們要去的地方,但無法建立新的連接。這方面的範例是,如果我使用 VNC 連接到其中一位客人,我可以執行
wget http://google.com/
並獲得頁面。主機和來賓 iptables 都已刷新,因此沒有 iptables 規則。在主機上,路由命令的輸出是
host# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface x.x.x.64 0.0.0.0 255.255.255.224 U 0 0 0 bridge0 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0 169.254.0.0 0.0.0.0 255.255.0.0 U 1004 0 0 bridge0 0.0.0.0 x.x.x.94 0.0.0.0 UG 0 0 0 bridge0
為了嘗試使路由正常工作,我嘗試使用類似
route add --net x.x.y.208 netmask 255.255.255.240 bridge0
. 添加路由後,我在主機上的路由表看起來像host# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface x.x.y.208 0.0.0.0 255.255.255.240 U 0 0 0 bridge0 x.x.x.64 0.0.0.0 255.255.255.224 U 0 0 0 bridge0 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0 169.254.0.0 0.0.0.0 255.255.0.0 U 1004 0 0 bridge0 0.0.0.0 x.x.x.94 0.0.0.0 UG 0 0 0 bridge0
但是,主機仍然無法訪問來賓。如果我跟踪客人,我看不到連接斷開,我只是看到
host# traceroute x.x.y.213 traceroute to x.x.y.213, 30 hops max, 60 byte packets 1 x.x.y.213 0.639 ms 0.771 ms 0.784 ms
但是當我嘗試連接到機器時(例如
telnet x.x.y.213 22
)我沒有連接(如果我執行telnet x.x.y.213 22
或者telnet x.x.x.75 22
我得到結果,則在來賓上進行比較)。
如果兩個子網(/28 和/26)都橋接到同一個介面,那麼您需要上游網路上兩個網路中的地址(即整個網路的路由器上的輔助地址)。
將網橋上的虛擬主機想像成它們連接到與主機的 NIC 相同的交換機。主機(即 bridge0)位於不同的 IP 子網中這一事實意味著兩者之間需要有某種網關。
兩個選項 - 要麼將所有主機重新編號到同一網路,要麼在兩者之間提供某種路由介面。