web-dev-qa-db-ja.com

KVMのLinuxブリッジング

ブリッジネットワークでKVM)をセットアップしようとしたDebian Wheezyマシンがあります。残念ながら、ブリッジはトラフィックを正しく転送していないようです。

私の設定は次のとおりです。

物理マシンにはeth0IPアドレス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          

iptablesebtablesはどちらも空で、デフォルトのポリシーは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を示しています。

2
Sarek

カーネルが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の下のファイルに入れて、再起動時に値をリセットすることができます。

ルーターのサブネット上の別のデバイスからテストすると、問題の特定に役立つ場合があります。

  • 仮想マシンにpingを実行すると、有用な診断が提供される場合があります。
  • 仮想マシンのARPが可能かどうかを確認すると、サーバーのMACアドレスが見つかるかどうかがわかります。 pingを実行した後、「arp -a」を使用して、MACアドレスが正常に検出されたかどうかを確認します。
  • Tracerouteは、問題の発生場所を示している場合があります。

eth0インターフェースでtcpdumpを使用してテストすると、接続が失敗している場所も示される場合があります。

  • 有効な応答なしに繰り返されるarpリクエストは、到達可能性の問題を示します。
  • echoまたはecho replyトラフィックが欠落している場合は、どちら側に問題があるかを示している可能性があります。
  • ルータまたはその背後にあるアドレスへのtraceroute応答は、追加情報を提供する場合があります。
2
BillThor