インターフェイス間のすべての通信がホストから永続的なデフォルトゲートウェイに送信されるように、仮想インターフェイス(MACVLANタイプ)を作成しようとしています。 「プライベート」モードを説明する記事がたくさんあります。ここ
プライベート:インターフェイスにバインドされたMAC VLANが互いに通信できないように、すべての着信パケットをフィルタリングします(ソースMACアドレスがMAC VLANインターフェイスの1つと一致するインターフェイスを介して着信パケットをすべて破棄します)。
いくつかのインターフェイスを設定しましたが、「プライベート」モードが広告どおりに機能しないようです。私は何が間違っていましたか?ホストはUbuntu 18.04 Bionicバージョンです。
「モード別」コマンドは無視され、ホスト内でパケットが交換されます。たった4つのコマンドで簡単に再現できます。どんな助けでも大変感謝します。
root@ubnt-bkp:/home/super# uname -a
Linux ubnt-bkp 4.15.0-96-generic #97-Ubuntu SMP Wed Apr 1 03:25:46 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
root@ubnt-bkp:/home/super# ip link add link ens160 address 38:94:ed:99:99:1A ens160.3 type macvlan mode private
root@ubnt-bkp:/home/super# ip link set ens160.3 up
root@ubnt-bkp:/home/super# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 08:4f:a9:99:99:02 brd ff:ff:ff:ff:ff:ff
...
...
18: ens160.3@ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP **mode** **DEFAULT** group default qlen 1000
link/ether 38:94:ed:99:99:1a brd ff:ff:ff:ff:ff:ff
問題を再現するコマンド
root@ubnt-bkp:/home/super# ip link add link ens160 address 38:94:ed:99:99:1B ens160.5 type macvlan mode private
root@ubnt-bkp:/home/super# ip link set ens160.5 up
root@ubnt-bkp:/home/super# dhclient ens160.5
root@ubnt-bkp:/home/super# ip link add link ens160 address 38:94:ed:99:99:1C ens160.6 type macvlan mode private
root@ubnt-bkp:/home/super# ip link set ens160.6 up
root@ubnt-bkp:/home/super# dhclient ens160.6
次にオプションをping
使用してください-I
。
root@ubnt-bkp:/home/super#ping -I <IP address of ens160.5> <IP address of ens160.6>
(ens160
再現しようとしている場合は、イーサネットインターフェイス名(例:eth0)に変更してください。)
ベストアンサー1
MACVLAN インターフェイスを生成するために使用したコマンドは正しいです。
ただし、を使用してもping -I
これを確認するのに役立ちません。これは、ソースインターフェイスとターゲットインターフェイスが同じホスト(およびあなたの場合と同じ名前空間)にある場合はping
常に成功します。
それではこれをどのようにテストしますか? MACVLANインターフェイスをデフォルト以外の名前空間に配置します。その後、ping
名前空間で実行します。
ens160
IPアドレスを持つ物理インターフェイス()で始まるとします192.0.2.2/24
。また、ルーターのゲートウェイアドレスがあるとします192.0.2.1
。
今:
# Create namespace named "ns5"
ip netns add ns5
# Create the macvlan interface as usual
ip link add link ens160 address 38:94:ed:99:99:1B ens160.5 type macvlan mode private
# Move the just-created macvlan interface into the "ns5" namespace
ip link set ens160.5 netns ns5
# Set the link up. Observe the "ip netns exec ns5" prefix.
ip netns exec ns5 ip link set ens160.5 up
# Set the IP address for the macvaln interface. Observe the "ip netns exec ns5" prefix.
ip netns exec ns5 ip address add dev ens160.5 192.0.2.205/24
# Repeat above for another macvlan interface, this one in another namespace
# called "ns6"
ip netns add ns6
ip link add link ens160 address 38:94:ed:99:99:1C ens160.6 type macvlan mode private
ip link set ens160.6 netns ns6
ip netns exec ns6 ip link set ens160.6 up
ip netns exec ns6 ip address add dev ens160.6 192.0.2.206/24
この時点から、両方のmacvtapインターフェイスは正常にゲートウェイをpingできます。
ip netns exec ns5 ping 192.0.2.1
ip netns exec ns6 ping 192.0.2.1
ゲートウェイデバイスにアクセスできる場合は、192.0.2.205および192.0.2.6のARPエントリにmacvlanインターフェイスのMACアドレスが表示されていることを確認できる必要があります。
ただし、macvlan インターフェイスがprivate
モードになっているため、次のコマンドはすべて失敗します。
# Try to reach ens160.6 from ens160.5
ip netns exec ns5 ping 192.0.2.206
# Try to reach ens160.5 from ens160.6
ip netns exec ns6 ping 192.0.2.205
bridge
代わりに実験を繰り返すと、private
最後の2つのpingコマンドが成功したことがわかります。