NameSpace
プロトコルの階層構造は下に行くほど中傷度が低くより具象的(電気やら光やら)になる
$ sudo ip netns exec ns1 tcpdump -tnel -i ns1-veth0 icmp or arp
ARP経過を確認するため- or arp
を入れて確認
00:00:5e:00:53:01 > …
ethertype ARP (0x0806), length 42 : Request who-has 192.0.2.2 tell 192.0.2.1, length 28…
ARPがやりとりされている様子が見れる
ARPで192.0.2.2
というIPアドレスを持った機器のMACアドレスを192.0.2.1
に教えて欲しいとのコード
これがARPリクエスト
次の行で192.0.2.2
というIPアドレスは00:00:00:33:03:00:00:
というMACアドレスを持っている
というARPリプライ
を送っている
一番最初などのff:ff:ff:ff:ff:ff
と言ったMACアドレスに送信をしているが
これはブロードキャストアドレスという
特殊なMACアドレス
「このフレームが届く限りの範囲で全ての聞きに聞いて欲しい」という意味
通信したIPアドレスのMACアドレスが分からないから教えてという発信
イーサネット観察
状態をupにさせてns1
とns2
をveth
で繋ぐ一連の流れは一緒
その後の追加手順
MACアドレスを変更することができる
vethインターフェースのMACアドレスはデフォだとランダムに割り振られている
$ sudo ip netns exec ns1 ip link set dev ns1-veth0 address 00:00:5E:00:53:01
$ sudo ip netns exec ns2 ip link set dev ns2-veth0 address 00:00:5E:00:53:02
これでns1-veth0
とns2-veth2
のMACアドレス
が変更される
$ sudo ip netns exec ns1 ip link show | grep link/ether
link/ether 00:00:5e:00:53:01 brd ff:ff:ff:ff:ff:ff link-netnsid 1
$ ip link show
でインターフェースのMACアドレスを確認できる
$ sudo ip netns exec ns1 tcpdump -tnel -i ns1-veth0 icmp
tcpdump : verbose output suppressed, use -v pr -vv for full protocol decode
listening on ns1-veth0, link-tyoe EN10MB (Ethernet), capture size 262144 bytes
パケットキャプチャの用意コマンドtcpdump
ここでns1
のvethインターフェース
を観察する
$ sudo ip netns exec ns1 ping -c 3 192.0.2.2 -I 192.0.2.1
準備ができたのでns1
からns2
に向けてPing
を打つ
コマンド実行が終わったらtcpdump
を実行したターミナルに戻って確認
$ sudo ip netns exec ns1 tcpdump -tnel -i ns1-veth0 icmp
tcpdump : verbose output suppressed, use -v or -vv for full protocol decode
listening on ns1-veth0, link-type EN10MB (Ethernet), capture size 262144 bytes
00:00:5e:00:53:01 > 00:00:5e:00:53:02, ethertype IPv4 (0x0800),
length 98: 192.0.2.1 > 192.0.2.2: ICMP echo request, id 23582, seq 1, length 64
00:00:5e:00:53:02 > 00:00:5e:00:53:01, ethertype IPv4 (0x0800),
length 98: 192.0.2.2 > 192.0.2.1: ICMP echo reply, id 23582, seq 1, length 64
オプションをつける(-e)
とイーサネットを見ることができる
先程の設定をしたMACアドレスに送信元と送信先に表示されている
(上記のtcpdump
で上からMACアドレス、IPアドレスと表示されているのは
レイア3.2.1と順番になっているように表示されている構造なのかもしれない)
(イーサネットはレイア2、IPはレイア3のプロトコルなのでフォーマット機略図もそのように書かれているのかも)
はまった件
(名前を間違えて作ってしまったので…)試しに作成したvethを消そうと思ったが
error…
cannot remove namespace file Permission denied
permission
は何らかの権限が絡んでいる可能性があるらしく
sudo
コマンドを加えて実行したところ削除ができた