Kvm-Virtualization

KVM 橋接與多個子網的綁定

  • October 22, 2018

我可以通過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

“回答問題”的解決方案:

  1. cat /proc/sys/net/ipv4/ip_forward 如果不是 1,請確保在主機上啟用了 ip 轉發,請查看此站點如何更改它
  2. 將VM網關更改為vm子網上的hosts ip:213.xxx.xxx.1
  3. 修復損壞的 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 地址。

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