KVM 橋接與多個子網的綁定
我可以通過
213.xxx.xxx.1
分配給主機訪問主機,但帶有(橋接介面打開)的br0:1
虛擬機不起作用。213.xxx.xxx.2``br0:1
我是否必須為第二個子網創建另一個橋接介面,但
bond0
已經連接br0
?!基本上,在這種情況下,我如何將第二個子網用於虛擬機?
子網:
213.xxx.xxx.176/28 213.xxx.xxx.0/27 routed via 213.xxx.xx.180
設置:
在
$$ 1-2 $$
# cat /etc/sysconfig/network-scripts/ifcfg-em[1-2] DEVICE="em[1-2]" NAME="bond0-slave[1-2]" BOOTPROTO="none" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" USERCTL=no IPV6INIT=no PEERDNS=no MASTER=bond0 SLAVE=yes
債券0
# cat /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE="bond0" NAME="bond0" BOOTPROTO="none" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Bond" USERCTL="no" IPV6INIT="no" PEERDNS="no" BONDING_OPTS="mode=active-backup miimon=100" BRIDGE=br0
br0
# cat /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE="br0" NAME="br0" BOOTPROTO="none" IPADDR="213.xxx.xxx.180" GATEWAY="213.xxx.xxx.177" NETMASK="255.255.255.240" BROADCAST="213.xxx.xxx.191" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Bridge" USERCTL="no" IPV6INIT="no" PEERDNS="no"
br0:1
# cat /etc/sysconfig/network-scripts/ifcfg-br0:1 DEVICE="br0:1" NAME="br0:1" BOOTPROTO="none" IPADDR="213.xxx.xxx.1" NETMASK="255.255.255.224" BROADCAST="213.xxx.xxx.31" NM_CONTROLLED="yes" #ONBOOT="yes" TYPE="Bridge" USERCTL="no" IPV6INIT="no" PEERDNS="no" ONPARENT="yes"
2017 年 1 月 18 日星期三 16:25:17 GMT 更新:
<interface type='bridge'> <mac address='52:54:00:4c:4f:27'/> <source bridge='br0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface>
2017 年 1 月 24 日星期二 11:44:21 GMT 更新:
虛擬機網路設置:
# cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE="Ethernet" BOOTPROTO="none" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" NAME="eth0" DEVICE="eth0" ONBOOT="yes" IPADDR="213.xxx.xxx.2" PREFIX="27" GATEWAY="213.xxx.xxx.177" <-- not sure if this should be 213.xxx.xxx.180 instead?!
主機上的 IPTables:
# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:67 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:67 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target prot opt source destination ACCEPT all -- 0.0.0.0/0 192.168.122.0/24 ctstate RELATED,ESTABLISHED ACCEPT all -- 192.168.122.0/24 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:68 # iptables -t nat -nL Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination RETURN all -- 192.168.122.0/24 224.0.0.0/24 RETURN all -- 192.168.122.0/24 255.255.255.255 MASQUERADE tcp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535 MASQUERADE udp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535 MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24
當我在VM上將預設網關設置為213.xxx.xxx.1(主機上的br0:1的IP)時,它可以工作 - 不知道為什麼我不能只使用與主機相同的預設網關(213.xxx.xxx .177)。
我還必須刷新 IPTables,所以我需要找出哪些規則是必要的。
從 VM ping 時,我也會收到重定向,因此不確定此配置是否最佳:
# ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. From 213.xxx.xxx.1: icmp_seq=1 Redirect Host(New nexthop: 213.xxx.xxx.177) From 213.xxx.xxx.1 icmp_seq=1 Redirect Host(New nexthop: 213.xxx.xxx.177) 64 bytes from 8.8.8.8: icmp_seq=1 ttl=47 time=7.26 ms ...
2017 年 1 月 24 日星期二 14:49:43 GMT 更新:
我不確定為什麼 IPTables 會過濾通過網橋的數據包,即使
br_netfilter
模組沒有載入# lsmod | grep "br_netfilter"; echo $? 1 # test -d /proc/sys/net/bridge; echo $? 1
這條規則也沒有幫助:
# iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
“回答問題”的解決方案:
cat /proc/sys/net/ipv4/ip_forward
如果不是 1,請確保在主機上啟用了 ip 轉發,請查看此站點如何更改它- 將VM網關更改為vm子網上的hosts ip:213.xxx.xxx.1
- 修復損壞的 iptable 配置。
iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
看起來不錯。最終將其更改為某個連結iptables -I FORWARD -s 213.xxx.xxx.0/27 -j ACCEPT
(這意味著:接受從 vms 網路到另一個網路的所有流量)此解決方案的想法是使用您的主機作為 vm 網路的網關。顯然,如果您在 213.xx0 網路( 213.xxx.xx.180 )上已經有其他網關,您可以直接從您的虛擬機中使用它。
建議的 iptables 配置將允許從虛擬機到外部的流量。如果你想允許從外部連接到虛擬機,你必須設置一個看起來像的規則
iptables -I FORWARD -d 213.xxx.xxx.0/27 -j ACCEPT
推薦的解決方案:請記住,由於提出問題的方式,這一切可能只是一團糟。在現實世界中,如果你有一個路由器/防火牆來管理你的兩個子網,你應該採取簡單的方法: - 路由器/防火牆將在每個子網上都有一個 IP 地址。它將成為子網中所有主機的網關 - 為每個子網分配一個 vlan - 在您的主機上,您將有 2 個介面和網橋 - 您的 vm 將在“vms 子網”上橋接,並使用防火牆作為網關
這樣你就不會有瘋狂的 iptables / 別名 / 轉發配置。您將在一個子網上擁有一些主機,而在另一個子網上擁有其他主機,並且在您的防火牆上配置了路由/acls/nats。您甚至不應該將“vm 網路”上的 IP 地址分配給您的主機。
將兩個網路合併到同一個廣播域是問題的根源,如果您對網路配置不是很自信,應該避免在主機上配置多個 ip 地址。