【6日目】TCP/IPネットワーク入門(第3章ルータを介したネットワーク編)
皆さん,こんにちは.bb_lotusです. さて,今回はTCP/IPネットワークに関しての6日目のアウトプットになります.
すぐアウトプットだけ見たい人はこちらから
(ネットワーク初学者のため,記載内容等間違いがありましたらどしどしコメント,指摘等していただければと思います.)
使用する教材はこちらです.
「Linuxで動かしながら学ぶTCP/IPネットワーク入門」
--------------↓ここからアウトプット--------------
今回は第3章の続き,ルータを介したネットワークを組んでいきます.
ネットワーク構成は以下のようになります.(前回と同じです)
前回はns1とrouter間,ns2とrouter間の疎通は確認ができているので,ns1からns2へpingを打ってみると,,
$ sudo ip netns exec ns1 ping -c 3 198.51.100.254 -I 192.0.2.1
PING 198.51.100.254 (198.51.100.254) from 192.0.2.1 : 56(84) bytes of data.
ping: sendmsg: Network is unreachable //ネットワークに到達できない
ping: sendmsg: Network is unreachable
ping: sendmsg: Network is unreachable
--- 198.51.100.254 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2055ms
※なぜうまくいかないのか?
Network Namespaceにルーティングの設定がないから!!
ns1のルーティング
$ sudo ip netns exec ns1 ip route show
192.0.2.0/24 dev ns1-veth0 proto kernel scope link src 192.0.2.1
これが意味しているものは,
192.0.2.0/24宛は
ns1-veth0というネットワークインターフェイスで通信する.
ということ.
つまり,現在のルーティングでは,直接つながっているセグメントしか行き先がないため「198.51.100.254と言われてもわからんよ!」となっている訳です.
そこでns1にルーティングテーブルを追加する必要があるのですが,追加するルーティングエントリはデフォルトルートというものを追加します.
デフォルトルートというものは,他の宛先に一致しない(192.0.2.0/24のように設定したものに一致しない)ときに使われるものです.
これをルータのインターフェースに付与しているIPアドレスに設定することでns1はrouterにパケットを届けるようになるという訳です!!
$ sudo ip netns exec ns1 ip route add default via 192.0.2.254
---補足---
defaultではなく,直接IPアドレスを指定する方法もありですが,直接つながっていないセグメントと通信するときは必ずrouterを介すのでdefaultでおけ!
$ sudo ip netns exec ns1 ip route add 198.51.100.1 via 192.0.2.254
ns2とrouter間でも同じような状況になっているので,設定していきます.
$ sudo ip netns exec ns2 ip route add default via 198.51.100.254
設定完了!
改めて,ns1からns2へpingを打っていきます.
$ sudo ip netns exec ns1 ping -c 3 198.51.100.1 -I 192.0.2.1
PING 198.51.100.1 (198.51.100.1) from 192.0.2.1 : 56(84) bytes of data.
--- 198.51.100.1 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2037ms
しかし,またエラー..
でも今度はメッセージが違うようです.
どうやら,送ったpingに対してメッセージが返ってきていないよう.
これは以下のコマンドで解決できるようです.
$ sudo ip netns exec router sysct1 net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1