Linux
Network
ARP

Linux で仮想的に IP アドレス重複環境を構築する

はじめに

Linux で brctlnetns を用いて、IPアドレスが重複したホストが存在する環境を仮想的に構築します。
dup.svg.png

必要なもの

  • 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 が来れば成功です。