複数のサブネットとのボンディングを介した KVM ブリッジ

複数のサブネットとのボンディングを介した KVM ブリッジ

213.xxx.xxx.1割り当てられたホスト経由ではアクセスできますが、 (ブリッジ インターフェイスがオン)br0:1の VM は機能しません。213.xxx.xxx.2br0:1

bond0すでに接続されている2 番目のサブネットに別のブリッジ インターフェイスを作成する必要がありますかbr0?

基本的に、このシナリオで VM に 2 番目のサブネットをどのように使用できますか?

サブネット:

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更新:

VM ネットワークの設定:

# 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更新:

br_netfilterモジュールがロードされていない場合でも、IPTablesがブリッジを通過するパケットを実際にフィルタリングする理由はわかりません。

# 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

「質問に答える」解決策:

  1. 1でない場合は、ホストでIP転送が有効になっていることを確認してください。cat /proc/sys/net/ipv4/ip_forward 変更方法については、このサイトを参照してください。
  2. VM ゲートウェイを VM サブネット上のホスト 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) に別のゲートウェイが既にある場合は、VM から直接使用できます。

提案されたiptables設定は、VMから外部へのトラフィックを許可します。外部からVMへの接続を許可したい場合は、次のようなルールを設定する必要があります。iptables -I FORWARD -d 213.xxx.xxx.0/27 -j ACCEPT

推奨される解決策: 質問の仕方が原因で、おそらくすべてが混乱しているだけであることに留意してください。現実世界では、2 つのサブネットを管理するルーター/ファイアウォールがある場合は、簡単な方法を取る必要があります。 - ルーター/ファイアウォールは、各サブネットに IP アドレスを持ちます。これは、サブネット内のすべてのホストのゲートウェイになります - 各サブネットに VLAN を割り当てます - ホストには、2 つのインターフェイスとブリッジがあります - VM は「VM サブネット」でブリッジされ、ファイアウォールをゲートウェイとして使用します

この方法なら、面倒な iptables / alias / forwarding 構成は不要です。一部のホストを 1 つのサブネットに配置し、他のホストを別のサブネットに配置し、ルーティング / ACL / NAT をファイアウォール上に構成します。ホストに「vm ネットワーク」の IP アドレスを割り当てる必要さえありません。

同じブロードキャスト ドメイン上で 2 つのネットワークを結合すると問題が発生する可能性があるため、ネットワーク構成にあまり自信がない場合は、ホスト上で複数の IP アドレスを構成することは避けてください。

答え2

Wikipediaより:

コンピュータ ネットワークにおけるデフォルト ゲートウェイは、パケットを他のネットワークに転送する方法を知っていると想定されるノードです。

これは、ゲートウェイ ノードがネットワークまたはサブネット内のノードである必要があることを意味します。 1 つのインターフェイスで 2 つのサブネットを使用しますbr0 213.xxx.xxx.0/27213.xxx.xxx.176/28

213.xxx.xxx.177ネットワークにはゲートウェイ ホストがあります213.xxx.xxx.176/28。そして、ホスト サーバーはこのゲートウェイを介してインターネットにアクセスします。ゲートウェイ ホスト213.xxx.xxx.177はルーターであり、このルーターはサブネットのメンバー (ノード) ではないと思います213.xxx.xxx.0/27。ただし、サブネット213.xxx.xxx.0/27はノード213.xxx.xxx.180(ホスト サーバー) 経由でアクセスできることを認識しています。

VM のゲートウェイ アドレスが間違っています。VM に IP アドレスがある場合213.xxx.xxx.2/27、VM は同じサブネットのゲートウェイ アドレスを持っている必要があります213.xxx.xxx.0/27。そのため、VM にはゲートウェイ アドレスが必要であり213.xxx.xxx.1、ホスト サーバーはインターフェイス上でこれをセカンダリ IP アドレスとして持っていますbr0

サブネットに VM を作成する場合は、ホスト サーバーと213.xxx.xxx.176/28同じゲートウェイ IP を割り当てる必要があります。この IP がどこかで使用されていないことを確認してください。213.xxx.xxx.177

加えて:

記載の通り、すべてのiptablesルールをクリアします。ここ

これを実行する前に、iptables サービスを開始する必要があります。クリアしたルールをディスクに保存するには、クリア後に iptables サービスを再起動します。

関連情報