NAPTとルーティング、NATテーブルについて

NATについて改めて学習しなおそうと思い、パケットトレーサーでNAPTを使った簡単な構成を作りました。

参考にしたのはこちらの方の記事になります。
参考というかほぼ真似させていただきました、、
[Cisco Packet TracerでNAPTを設定しよう](https://qiita.com/MakotoTaguchi/items/17487208f05c4e0b5c49) 

構成図は以下になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710882/6961481d-e010-1d4c-e578-d63ab63945df.png)

```
(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に着信したパケット
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710882/bbd6ee61-188a-f95a-7bc4-dde62576ad18.png)

RT1から出力したパケット
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710882/39e5caf7-fa24-f28f-6c9f-7b0498648971.png)
以上の2つを比較してみると、Src IPがNAPT変換によって192.168.2.1→10.1.1.1に
書き換えられていることがわかります。

Server1からPC1に折り返すパケットを見ると

RT1に着信したパケット
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710882/27516da2-d933-a3f2-fe53-efe43f4a2ee6.png)

RT1から出力したパケット
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710882/57ca5539-45c3-eb51-cc49-08c357e29e4a.png)

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への折り返しのパケットを覗いてみると以下のようになります。
再掲
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710882/27516da2-d933-a3f2-fe53-efe43f4a2ee6.png)
Des:10.1.1.1になっています。ですが、RT1のルーティングテーブルには10.1.1.1が宛先となるものは存在しません。

RT1のルーティングテーブル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710882/7d73bba1-34ee-3e95-a303-0d0b2b67c95b.png)

今まであまり意識していませんでしたがNAT変換とルーティングについて調べてみると
以下のような記事を見つけました。
[CiscoにおけるNATの処理順序](https://www.infraexpert.com/study/nat7.htm)

今焦点となっているNATとルーティングについて抜粋すると
insideからoutsideの時は、ルーティング→NAT変換の順番
outsideからinsideの時は、NAT変換→ルーティングの順番で処理が行われるとのことです。

今回の場合だと、Server1からRT１に折り返されたパケットは、outsideからinsideの処理になるので、DST IP 10.1.1.1が192.168.1.2に変換されてからルーティング処理が行われているということになります。
なのでルーティングテーブルに10.1.1.1宛ての情報が載っていなくても問題はないということですね。


ではServer1から10.1.1.1に向けてPingを打ってみれば通信できるのかと思い、やってみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710882/bcf11347-4958-f658-af84-37b034c7e77a.png)

そうすると、うまくいきません笑

NAT変換の状況を調べようと思い、おもむろに「show ip nat translations」で見てみると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710882/83756f41-3ba4-e563-b5a7-a13a162899be.png)

ICMPプロトコルのNAT変換テーブルがありません、、
TCPはあるのですが

そこでまたいろいろ知らべてみると、ICMPのNATテーブルのキャッシュ保存時間は1分ほどと書いてありました。なるほど。
そしてまた、キャッシュの保存時間を変更できるコマンドもあるみたいなのですが、パケットトレーサーでは使えないみたいです。


なので、強行作戦になりますが、PC1からServer1へ永続Pingを打って、かつその間にServer1から10.1.1.1に向けてPingを打てばうまくいくんじゃないかと、、

やってみると
PC1→Server1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710882/32f76853-0419-c8e5-3138-1a8abbc7e05a.png)
Server1→PC1(10.1.1.1)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710882/093dcde2-f6a2-a3fc-f291-ecaa881dacd2.png)

Server1側からでもPingの疎通を確かめることができました。

その間のNATテーブルは大変なことになっていますが、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710882/ed8f7a27-d508-17f4-e244-a91edae1d8af.png)


今回の検証はあまり実用的なものではないかもしれませんが、機器の挙動について見つめるいい機会になったのではないかと思います。