我可以透過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
設定:
EM[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
布0
# 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
當我在虛擬機器上將預設閘道設定為213.xxx.xxx.1(主機上的br0:1 的IP)時,它會起作用- 不知道為什麼我不能只使用與主機相同的預設閘道(213 .xxx.xxx .177)。
我還必須刷新 IPTables,所以我需要找出哪些規則是必要的。
從虛擬機器 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 轉發,請查看此網站如何變更它- 將虛擬機器網關變更為虛擬機器子網路上的主機 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
(這意味著:接受從虛擬機器網路到其他網路的所有流量)
這個解決方案的想法是使用您的主機作為虛擬機器網路的網關。顯然,如果您在 213.xx0 網路 ( 213.xxx.xx.180 ) 上已有其他網關,則可以直接從虛擬機器使用它。
建議的 iptables 設定將允許從虛擬機器到外部的流量。如果您想要允許從外部連接到虛擬機,您必須設定以下規則iptables -I FORWARD -d 213.xxx.xxx.0/27 -j ACCEPT
推薦的解決方案:請記住,由於問題的提出方式,這一切可能只是一團糟。在現實世界中,如果您有一個路由器/防火牆來管理您的兩個子網,您應該採取簡單的方法: - 路由器/防火牆在每個子網路上都有一個 IP 位址。它將成為子網路中所有主機的網關- 為每個子網路分配一個VLAN - 在您的主機上,您將有2 個介面和網橋- 您的虛擬機器將在「虛擬機器子網路」上橋接,並使用防火牆作為網關
這樣你就不會有瘋狂的 iptables/alias/forwarding 設定。您將在一個子網路上擁有一些主機,在另一個子網路上擁有其他主機,並在防火牆上配置路由/acls/nats。您甚至不應該將「虛擬機器網路」上的 IP 位址指派給您的主機。
在同一廣播網域上合併兩個網路會產生問題,如果您對網路設定不是很有自信,則應避免在一台主機上設定多個 IP 位址。
答案2
來自維基百科:
電腦網路中的預設閘道是假定知道如何將資料包轉送到其他網路的節點。
這意味著網關節點必須是網路或子網路中的節點。您在一個介面上使用兩個子網路br0
213.xxx.xxx.0/27
並且213.xxx.xxx.176/28
.
213.xxx.xxx.177
網路中有網關主機213.xxx.xxx.176/28
。您的主機伺服器透過此網關存取網際網路。我認為網關主機213.xxx.xxx.177
是一個路由器,而且該路由器不是subnet 的成員(節點)213.xxx.xxx.0/27
。但它知道子網路213.xxx.xxx.0/27
可以透過節點213.xxx.xxx.180
(您的主機伺服器)存取。
您的虛擬機器的網關位址錯誤。如果VM有IP位址,213.xxx.xxx.2/27
那麼VM必須有來自相同子網路的網關位址213.xxx.xxx.0/27
。這就是為什麼虛擬機器必須有網關位址,而您的主機伺服器在介面213.xxx.xxx.1
上有輔助 IP 位址。br0
如果您要在子網路中建立 VM,213.xxx.xxx.176/28
則必須213.xxx.xxx.177
在其上指派與主機伺服器上相同的網關 IP。確保該 IP 沒有在其他地方使用。
另外:
清除所有 iptables 規則,如下所述這裡
在執行此操作之前,必須啟動 iptables 服務。清除後重新啟動 iptables 服務,將清除的規則儲存在磁碟上。