Linuxをルーターに仕立て、IPパケットのTTLが機能していることを確認
IPパケットのTTL(Time to Live)は無限転送を防ぐためのもの。サブネット(ルーター)を通過するとデクリメント(値が1減)される。ここでは、Linuxにルーター設定を行い、TTLの動作を確認する。
ネットワーク構成
例によってVirtualBoxを使ってこのような構成を作る。VirtualBoxの設定例は、こちらを参照。
Linuxルーターの設定
上記構成だとStatic Routeの設定は不要。単にForwarding(net.ipv4.ip_forward)を有効化するのみ。
~# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0
~# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
実験
その1
端末2(192.168.102.2)から端末1(192.168.101.2)へpingする。このときTTLを10(-tオプション)に設定。
~# ping -t 10 192.168.101.2
PING 192.168.101.2 (192.168.101.2) 56(84) bytes of data.
64 bytes from 192.168.101.2: icmp_seq=1 ttl=63 time=0.691 ms
通常ttlのデフォルトは64になっている様子。リプライパケットの”ttl=63”でも、TTLのデクリメントが確認できるが、ここでは、送信時の”TTL=10”の様子をパケットキャプチャデータで確認する。送信側(端末2)のキャプチャデータはこちら。
受信側(端末1)のキャプチャデータはこちら。
期待どおり、”TTL=9”とデクリメントされている。
その2
”TTL=1”に設定する。
~# ping -t 1 192.168.101.2
PING 192.168.101.2 (192.168.101.2) 56(84) bytes of data.
From 192.168.102.1 icmp_seq=1 Time to live exceeded
ルーターでTTLがデクリメントされて、’0’となりパケット到達不能となった。
終わりに
Linuxでもルーターになることを確認した。当たりまえか。