【6日目】TCP/IPネットワーク入門(第3章ルータを介したネットワーク編)

皆さん,こんにちは.bb_lotusです. さて,今回はTCP/IPネットワークに関しての6日目のアウトプットになります.

すぐアウトプットだけ見たい人はこちらから

(ネットワーク初学者のため,記載内容等間違いがありましたらどしどしコメント,指摘等していただければと思います.)

使用する教材はこちらです.

 

Linuxで動かしながら学ぶTCP/IPネットワーク入門」

 

Linuxで動かしながら学ぶTCP/IPネットワーク入門 | もみじあめ |本 | 通販 | Amazon

www.amazon.co.jp

 

--------------↓ここからアウトプット--------------

今回は第3章の続き,ルータを介したネットワークを組んでいきます.

ネットワーク構成は以下のようになります.(前回と同じです)

f:id:bb_lotus:20220408020157j:plain

f:id:bb_lotus:20220408020156j:plain

 

前回は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