私のホームLANに接続されたUbuntu 20.04システムでは、イーサネットデバイスの下にmacvlanを作成しました。
$ sudo ip link add macvlan1 link enp37s0 type macvlan mode bridge
$ sudo dhclient macvlan1
$ sudo ip link add macvlan2 link enp37s0 type macvlan mode bridge
$ sudo dhclient macvlan2
偶然彼らはDHCPから次のアドレスを得ました。
- macvlan1:192.168.0.40
- macvlan2:192.168.0.41
各ルーターでルーターをpingできます。
$ ping 192.168.0.1 -I macvlan1
PING 192.168.0.1 (192.168.0.1) from 192.168.0.40 macvlan1: 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.713 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=1.25 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=1.20 ms
^C
--- 192.168.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2034ms
rtt min/avg/max/mdev = 0.713/1.052/1.245/0.240 ms
$ ping 192.168.0.1 -I macvlan2
PING 192.168.0.1 (192.168.0.1) from 192.168.0.41 macvlan2: 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=1.15 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=1.13 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=1.07 ms
64 bytes from 192.168.0.1: icmp_seq=4 ttl=64 time=0.548 ms
64 bytes from 192.168.0.1: icmp_seq=5 ttl=64 time=0.619 ms
^C
--- 192.168.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4030ms
rtt min/avg/max/mdev = 0.548/0.903/1.148/0.263 ms
ブリッジモードで作成されるため、仮想マシンは互いに接続されている必要があります。しかし、反対側にはpingを送ることはできません。
$ ping 192.168.0.40 -I macvlan2
PING 192.168.0.40 (192.168.0.40) from 192.168.0.41 macvlan2: 56(84) bytes of data.
^C
--- 192.168.0.40 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 4128ms
$ ping 192.168.0.41 -I macvlan1
PING 192.168.0.41 (192.168.0.41) from 192.168.0.40 macvlan1: 56(84) bytes of data.
^C
--- 192.168.0.41 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2039ms
なぜ反対側にpingを送ることができないのですか?この問題をどのように解決しますか?
答え1
Linuxカーネルは、ローカルソースアドレスに着信パケットを検出し、それをルーティングエラーとして処理し(特定のシステムからのパケットは返されません)、ネットワークフラッディングを防ぐためにそのパケットを破棄します。
各macvlanを別のネットワークネームスペースに配置してみてください(最終的にmacvlanはネットワークネームスペースで使用するように設計されています)。それではうまくいきます。