はじめに
Linux で brctl
と netns
を用いて、IPアドレスが重複したホストが存在する環境を仮想的に構築します。
必要なもの
- brctl コマンド
- Arch Linux なら pacman -S bridge-utils で入ります。
構築
仮想スイッチの作成
brctl addbr yabai
ip link set dev yabai up
ip a a 192.168.100.10/24 dev yabai
veth(仮想 LAN ケーブル)の作成
ip link add y-to-ns1 type veth peer name ns1-to-y
ip link add y-to-ns2 type veth peer name ns2-to-y
仮想ホストの作成
ip netns add ns1
ip netns add ns2
仮想配線
ip link set ns1-to-y netns ns1
ip link set ns2-to-y netns ns2
brctl addif yabai y-to-ns1
brctl addif yabai y-to-ns2
リンクアップ + IP アドレスの割当
ip link set dev y-to-ns1 up
ip link set dev y-to-ns2 up
ip netns exec ns1 ip link set dev ns1-to-y up
ip netns exec ns1 ip addr add 192.168.100.4/24 dev ns1-to-y
ip netns exec ns2 ip link set dev ns2-to-y up
ip netns exec ns2 ip addr add 192.168.100.4/24 dev ns2-to-y # dup!
コマンドまとめたやつ
brctl addbr yabai
ip link set dev yabai up
ip a a 192.168.100.10/24 dev yabai
ip link add y-to-ns1 type veth peer name ns1-to-y
ip link add y-to-ns2 type veth peer name ns2-to-y
ip netns add ns1
ip netns add ns2
ip link set ns1-to-y netns ns1
ip link set ns2-to-y netns ns2
brctl addif yabai y-to-ns1
brctl addif yabai y-to-ns2
ip link set dev y-to-ns1 up
ip link set dev y-to-ns2 up
ip netns exec ns1 ip link set dev ns1-to-y up
ip netns exec ns1 ip addr add 192.168.100.4/24 dev ns1-to-y
ip netns exec ns2 ip link set dev ns2-to-y up
ip netns exec ns2 ip addr add 192.168.100.4/24 dev ns2-to-y # dup!
検証
$ sudo arping -I yabai 192.168.100.4 -c 1
ARPING 192.168.100.4 from 192.168.100.10 yabai
Unicast reply from 192.168.100.4 [B2:37:33:07:94:33] 0.562ms
Unicast reply from 192.168.100.4 [A2:7E:B4:EC:B1:9D] 0.581ms
Sent 1 probes (1 broadcast(s))
Received 2 response(s)
異なる MAC アドレスのホストから Reply が来れば成功です。