213.xxx.xxx.1
割り当てられたホスト経由ではアクセスできますが、 (ブリッジ インターフェイスがオン)br0:1
の VM は機能しません。213.xxx.xxx.2
br0: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でない場合は、ホストでIP転送が有効になっていることを確認してください。
cat /proc/sys/net/ipv4/ip_forward
変更方法については、このサイトを参照してください。 - VM ゲートウェイを VM サブネット上のホスト 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) に別のゲートウェイが既にある場合は、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/27
。213.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 サービスを再起動します。