NATについて改めて学習しなおそうと思い、パケットトレーサーでNAPTを使った簡単な構成を作りました。
参考にしたのはこちらの方の記事になります。
参考というかほぼ真似させていただきました、、
Cisco Packet TracerでNAPTを設定しよう
(config)#hostname RT1
(config)#ip nat pool CISCO 10.1.1.1 10.1.1.1 netmask 255.255.255.0
(config)#access-list 1 permit 192.168.2.0 0.0.0.255
(config)#ip nat inside source list 1 pool CISCO overload
(config)#interface GigabitEthernet0/0
(config-if)#ip address 192.168.1.254 255.255.255.0
(config-if)#ip nat outside
(config-if)#no shutdown
(config)#interface GigabitEthernet0/1
(config-if)#ip address 192.168.2.254 255.255.255.0
(config-if)#ip nat inside
(config-if)#no shutdown
PC1からServer1へpingおよびTCP接続を行ってみると、
RT1から出力したパケット
以上の2つを比較してみると、Src IPがNAPT変換によって192.168.2.1→10.1.1.1に
書き換えられていることがわかります。
Server1からPC1に折り返すパケットを見ると
Server1からRT1に飛ばされたパケットのDST IPは10.1.1.1になっていて、
RT1からPC1に向けて飛ばされたパケットではNAPT変換でDST IPが10.1.1.1→192.168.2.1に
なり、もとのローカルIPにもどっていることがわかります。
PC2からServer1への通信も同様に変換されていることが確認できました。またポート番号がPC1とPC2でそれぞれ異なっていることも検証できました。ここでは繰り返しになるので割愛します。
検証自体は、参考にさせていただいたMakoto Taguchiさんと同様うまくいったのですが、不図疑問に思ったことがあります。
NATとルーティングの関係はどのようになっているのかということです。
Server1からPC1への折り返しのパケットを覗いてみると以下のようになります。
再掲
Des:10.1.1.1になっています。ですが、RT1のルーティングテーブルには10.1.1.1が宛先となるものは存在しません。
今まであまり意識していませんでしたがNAT変換とルーティングについて調べてみると
以下のような記事を見つけました。
CiscoにおけるNATの処理順序
今焦点となっているNATとルーティングについて抜粋すると
insideからoutsideの時は、ルーティング→NAT変換の順番
outsideからinsideの時は、NAT変換→ルーティングの順番で処理が行われるとのことです。
今回の場合だと、Server1からRT1に折り返されたパケットは、outsideからinsideの処理になるので、DST IP 10.1.1.1が192.168.1.2に変換されてからルーティング処理が行われているということになります。
なのでルーティングテーブルに10.1.1.1宛ての情報が載っていなくても問題はないということですね。
ではServer1から10.1.1.1に向けてPingを打ってみれば通信できるのかと思い、やってみました。
そうすると、うまくいきません笑
NAT変換の状況を調べようと思い、おもむろに「show ip nat translations」で見てみると
ICMPプロトコルのNAT変換テーブルがありません、、
TCPはあるのですが
そこでまたいろいろ知らべてみると、ICMPのNATテーブルのキャッシュ保存時間は1分ほどと書いてありました。なるほど。
そしてまた、キャッシュの保存時間を変更できるコマンドもあるみたいなのですが、パケットトレーサーでは使えないみたいです。
なので、強行作戦になりますが、PC1からServer1へ永続Pingを打って、かつその間にServer1から10.1.1.1に向けてPingを打てばうまくいくんじゃないかと、、
やってみると
PC1→Server1
Server1→PC1(10.1.1.1)
Server1側からでもPingの疎通を確かめることができました。
今回の検証はあまり実用的なものではないかもしれませんが、機器の挙動について見つめるいい機会になったのではないかと思います。