MACアドレス重複によるネットワークトラブル
Xenで作業中になぜかネットワークに接続できなくなりました。構成は以下の通り。
ゲスト(DebianとUbuntu)とはLinuxの仮想ブリッジ(bridge-utils)で接続されています。
kmr@kmr-W35-37ET:~$ brctl show bridge name bridge id STP enabled interfaces xenbr0 8000.0090f5de2c1b no enp4s0f2 vif1.0 vif1.0-emu vif4.0 vif4.0-emu
外部からのpingは応答があったり無かったり。
c:\>ping 192.168.10.3 -t 要求がタイムアウトしました。 要求がタイムアウトしました。 要求がタイムアウトしました。 要求がタイムアウトしました。 要求がタイムアウトしました。 192.168.10.3 からの応答: バイト数 =32 時間 <1ms TTL=63 192.168.10.3 からの応答: バイト数 =32 時間 <1ms TTL=63 192.168.10.3 からの応答: バイト数 =32 時間 <1ms TTL=63 要求がタイムアウトしました。 192.168.10.3 からの応答: バイト数 =32 時間 =1ms TTL=63 192.168.10.3 からの応答: バイト数 =32 時間 <1ms TTL=63 192.168.10.3 からの応答: バイト数 =32 時間 <1ms TTL=63 192.168.10.3 からの応答: バイト数 =32 時間 <1ms TTL=63 192.168.10.3 からの応答: バイト数 =32 時間 <1ms TTL=63 192.168.10.3 からの応答: バイト数 =32 時間 <1ms TTL=63 192.168.10.3 からの応答: バイト数 =32 時間 <1ms TTL=63 192.168.10.3 からの応答: バイト数 =32 時間 <1ms TTL=63 要求がタイムアウトしました。 要求がタイムアウトしました。 要求がタイムアウトしました。 要求がタイムアウトしました。 要求がタイムアウトしました。
pingの応答は非常に不安定。まずは、tracerouteで通信経路を確認します。
c:\>tracert 192.168.10.3 192.168.10.3 へのルートをトレースしています。経由するホップ数は最大 30 です 1 <1 ms <1 ms <1 ms 192.168.11.1 2 <1 ms <1 ms <1 ms 192.168.11.66 3 * * * 要求がタイムアウトしました。 4 * * * 要求がタイムアウトしました。 5 * * * 要求がタイムアウトしました。
ルータのポートまでは正常に到達できていることが確認できました。問題は192.168.10.0/24のネットワークにありそうです。パケットキャプチャでブリッジ(xenbr0)の通信内容を確認してみます。
23:05:05.730363 IP 192.168.11.65 > 192.168.10.3: ICMP echo request, id 1, seq 516, length 40 23:05:10.730667 IP 192.168.11.65 > 192.168.10.3: ICMP echo request, id 1, seq 517, length 40 23:05:15.730628 IP 192.168.11.65 > 192.168.10.3: ICMP echo request, id 1, seq 518, length 40 23:05:20.730326 IP 192.168.11.65 > 192.168.10.3: ICMP echo request, id 1, seq 519, length 40 23:05:25.729839 IP 192.168.11.65 > 192.168.10.3: ICMP echo request, id 1, seq 520, length 40 23:05:30.731034 IP 192.168.11.65 > 192.168.10.3: ICMP echo request, id 1, seq 521, length 40
ICMP echo request(ping)は来ているようですが、応答がありません。ゲスト側のUbuntuからDebianに対してpingを打ってみます。
23:30:25.175909 ARP, Request who-has 192.168.10.3 tell 192.168.10.4, length 28 23:30:25.176112 ARP, Reply 192.168.10.3 is-at 00:16:3e:e1:b0:63 (oui Unknown), length 28 23:30:26.184669 ARP, Request who-has 192.168.10.3 tell 192.168.10.4, length 28 23:30:26.184996 ARP, Reply 192.168.10.3 is-at 00:16:3e:e1:b0:63 (oui Unknown), length 28 23:30:27.208692 ARP, Request who-has 192.168.10.3 tell 192.168.10.4, length 28 23:30:27.208881 ARP, Reply 192.168.10.3 is-at 00:16:3e:e1:b0:63 (oui Unknown), length 28 23:30:28.232947 ARP, Request who-has 192.168.10.3 tell 192.168.10.4, length 28 23:30:28.233213 ARP, Reply 192.168.10.3 is-at 00:16:3e:e1:b0:63 (oui Unknown), length 28
パケットは非常に奇妙な動きをしています。ARPで送信先のMACアドレスを見つけ出しているのに、すぐにまたARPを使ってMACアドレスの探索をしています。 しばらく眺めていて、あることを思い出しました。Ubuntuの仮想マシンはDebianの設定ファイルをコピーして作成しました。
jianlan@dom0:~$ cat /etc/xen/hvm-debian.cfg | grep xenbr0 vif = [ 'mac=00:16:3E:E1:B0:63,bridge=xenbr0' ] jianlan@dom0:~$ cat /etc/xen/hvm-ubuntu.cfg | grep xenbr0 vif = [ 'mac=00:16:3E:E1:B0:63,bridge=xenbr0' ]
ネットワークインターフェイスを抜粋したところ、使用しているMACアドレスが同一のものであることが判明しました。ネットワーク上に同じMACアドレスが存在していたためARPが正しく動作しなかったのです。外部からのpingが不安定であったのも、ARPをするたびにDebianとUbuntuのどちらかが選ばれ、正しいIPを持っている時だけ正常に応答し、それ以外はパケットを破棄していたためタイムアウトになっていました。
MACアドレスは一意になるよう割り当てられていますが、仮想環境では自分で設定することが可能です。今回のトラブルは仮想環境ならではの原因でした。