ブリッジネットワークでKVM)をセットアップしようとしたDebian Wheezyマシンがあります。残念ながら、ブリッジはトラフィックを正しく転送していないようです。
私の設定は次のとおりです。
物理マシンにはeth0
IPアドレス192.168.0.1のルーターに接続されています。
この eth0
はブリッジインターフェースのメンバーですbr0
、IPアドレス192.168.0.101に静的に構成されます。
仮想マシンのネットワークインターフェイスはvnet0
物理ホスト上およびeth0
仮想マシン内。仮想マシンでは、インターフェイスはIPアドレス192.168.0.110に静的に構成されます。
物理ホストから、仮想マシンとルーターの両方にpingを実行できます。
# ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_req=1 ttl=64 time=0.331 ms
# ping 192.168.0.110
PING 192.168.0.110 (192.168.0.110) 56(84) bytes of data.
64 bytes from 192.168.0.110: icmp_req=1 ttl=64 time=0.417 ms
仮想マシンから、物理マシンにpingを実行できます。
# ping 192.168.0.101:
PING 192.168.0.101 (192.168.0.101) 56(84) bytes of data.
64 bytes from 192.168.0.101: icmp_req=1 ttl=64 time=0.133 ms
しかし、ルーターにpingを実行できません。
# ping 192.168.0.1:
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
From 192.168.0.110 icmp_seq=10 Destination Host Unreachable
私の知る限り、ブリッジは正しくセットアップされており、接続されているすべてのポートは転送状態にあります。
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.2cd444acf8ad no eth0
vnet0
# brctl showstp br0
br0
bridge id 8000.2cd444acf8ad
designated root 8000.2cd444acf8ad
root port 0 path cost 0
max age 20.00 bridge max age 20.00
hello time 2.00 bridge hello time 2.00
forward delay 0.00 bridge forward delay 0.00
ageing time 300.01
hello timer 1.20 tcn timer 0.00
topology change timer 0.00 gc timer 28.95
flags
eth0 (1)
port id 8001 state forwarding
designated root 8000.2cd444acf8ad path cost 4
designated bridge 8000.2cd444acf8ad message age timer 0.00
designated port 8001 forward delay timer 0.00
designated cost 0 hold timer 0.20
flags
vnet0 (2)
port id 8002 state forwarding
designated root 8000.2cd444acf8ad path cost 100
designated bridge 8000.2cd444acf8ad message age timer 0.00
designated port 8002 forward delay timer 0.00
designated cost 0 hold timer 0.20
flags
iptables
とebtables
はどちらも空で、デフォルトのポリシーはACCEPT
です。
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
# ebtables -L
Bridge table: filter
Bridge chain: INPUT, entries: 0, policy: ACCEPT
Bridge chain: FORWARD, entries: 0, policy: ACCEPT
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT
誰かがこの問題の原因と私がそれを解決する方法を知っていますか?
編集:
どうやら、ブリッジはMACテーブルを作成するときに、何かが接続されていることを認識しています。
# brctl showmacs br0
port no mac addr is local? ageing timer
1 2c:76:8a:ff:88:1d no 1.28 <- ???
1 2c:d4:44:ac:f8:ad yes 0.00 <- MAC of br0 and physical eth0
2 52:54:00:53:dd:34 no 143.80 <- MAC of VM's eth0
1 c8:1f:66:ba:83:33 no 0.00 <- MAC of router interface
2 fe:54:00:53:dd:34 yes 0.00 <- MAC of vnet0
編集2:
2番目の仮想マシンを作成しました。このマシンの物理マシンにはインターフェイスvnet1があり、その仮想eth0にはIPアドレス192.168.0.111が割り当てられています。このVMは、物理マシンにのみpingを実行でき、ルーターも元のVMにもpingを実行できません。brctl showstp
は、vnet1を含むすべてのポートを転送状態で表示し、brctl showmacs
は、上記で書いたものに加えて、vnet1と新しいマシンの仮想eth0のMACを示しています。
カーネルがIP転送を有効にするように設定されていることを確認します。
sysctl -a | grep forwarding
次の方法で有効にできます。
Sudo sysctl net.ipv4.conf.all.forwarding=1
Sudo sysctl net.ipv6.conf.all.forwarding=1
ARPプロキシにも問題がある可能性があります。確認する:
sysctl -a | grep proxy_arp
そして、次のコマンドで設定します。
Sudo sysctl net.ipv4.conf.eth0.proxy_arp=1
キーと値を/etc/sysctl.d
の下のファイルに入れて、再起動時に値をリセットすることができます。
ルーターのサブネット上の別のデバイスからテストすると、問題の特定に役立つ場合があります。
eth0
インターフェースでtcpdump
を使用してテストすると、接続が失敗している場所も示される場合があります。
arp
リクエストは、到達可能性の問題を示します。echo
またはecho reply
トラフィックが欠落している場合は、どちら側に問題があるかを示している可能性があります。