CiscoのルーターでダイナミックNAT

# はじめに
人にCiscoコマンドを教えることになり学習をしている。
私はネットワークの知識は多少あるが、Ciscoについては見たこともなければ触ったこともない。
そんな私が学習したCiscoコマンド等を備忘録として残しておく。

# 必要ソフト
Ciscoのルーターを実際に買うと高価なので、学習目的の場合はこのソフトを利用する
- Cisco Packet Tracer
Cisco製のネットワーク機器をソフトウェア上で操作できるシミュレーターツール
こちらから無料でダウンロードできる
https://www.netacad.com/ja/courses/packet-tracer

# 行うこと
- PCとルーターを接続して、ダイナミックNATを行う
- NATとはLAN側のプライベートIPアドレス（内部ローカルアドレスともいう）をWAN側のグローバルIPアドレス（内部グローバルアドレスともいう）に変換する技術である
- NATはIPv4アドレスの枯渇問題の回避策として考えられた
- ダイナミックNATとは、複数の内部グローバルアドレスをアドレスプールとして設定しておき、内部のPCが外部にアクセスする際には、アドレスプールから選択されたIPアドレスの1つに変換されます

# 構成図
![dinamic-nat.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273110/78638d55-6502-8ba4-182f-dba5a3714edb.png)

- 192.168.0.0/24にはPC1、PC2とRouter1が接続されている
- 172.16.0.0/24にはServer1、Sniffer、Router1が接続されている
- Router1にアドレスプールの情報を登録する
- PC1とPC2からServer1に対してそれぞれping通信を行う。このとき、Snifferというパケットキャプチャができる機器を使って、Switch2を通るパケットをキャプチャしてNAT変換が行われていることを確認することをゴールとする

# 実践
Cisco Packet Tracerで以下のような構成を作成する。
- PCは画面下部から「PC-PT」というのを選択してドラッグ＆ドロップする
- Serverは画面下部から「Server-PT」というのを選択してドラッグ＆ドロップする
- Routerは画面下部から「1841」というのを選択してドラッグ＆ドロップする
- Switchは画面下部から「2960」というのを選択してドラッグ＆ドロップする
- Snifferは画面下部から「Sniffer」というのを選択してドラッグ＆ドロップする
- 各デバイス間は「Copper Cross-Over」という線で繋ぐ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273110/2fdba2c0-9496-c201-bf34-3f30473363f8.png)


## PC1での設定
「Desktop」タブの「IP Configuration」を選択して開く画面から、IPアドレス、サブネットマスク、デフォルトゲートウェイを設定する
IPアドレスには自身のIPアドレスである「192.168.0.100」、サブネットマスクは「/24」を現す「255.255.255.0」、デフォルトゲートウェイはRouter1のインタフェースを指定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273110/ec4051c7-14bf-666a-2ebb-5974fb3bfa79.png)

## PC2での設定
「Desktop」タブの「IP Configuration」を選択して開く画面から、IPアドレス、サブネットマスク、デフォルトゲートウェイを設定する
IPアドレスには自身のIPアドレスである「192.168.0.101」、サブネットマスクは「/24」を現す「255.255.255.0」、デフォルトゲートウェイはRouter1のインタフェースを指定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273110/47bf0977-fba6-b96d-798f-63fa505fcdad.png)

## Server1での設定
「Desktop」タブの「IP Configuration」を選択して開く画面から、IPアドレス、サブネットマスク、デフォルトゲートウェイを設定する
IPアドレスには自身のIPアドレスである「172.16.0.100」、サブネットマスクは「/24」を現す「255.255.255.0」、デフォルトゲートウェイはRouter1のインタフェースを指定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273110/17618d2c-68ec-df52-049b-968bc6f7baa6.png)

## Router1での設定コマンド

### IPアドレスの付与とインタフェースにinside, outside設定
NATを使うにはルーターのインターフェースにインサイド（内部）、アウトサイド（外部）の指定をしないといけない。なので、それぞれのインタフェースに指定する
```cisco_ios
Router>en
Router#conf t
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.0.1 255.255.255.0
Router(config-if)#no shutdown 
Router(config-if)#ip nat inside 
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 172.16.0.1 255.255.255.0
Router(config-if)#no shutdown 
Router(config-if)#ip nat outside 
Router(config-if)#exit
```

### ダイナミックNAT設定
- ACLの許可設定に192.168.0.0/24を登録する
- アドレスプール「natpool」に172.16.0.2 - 172.16.0.3のレンジを登録する
- ACLとアドレスプールを関連付ける
```cisco_ios
Router(config)#access-list 10 permit 192.168.0.0 0.0.0.255
Router(config)#ip nat pool natpool 172.16.0.2 172.16.0.3 netmask 255.255.255.248
Router(config)#ip nat inside source list 10 pool natpool
```

### 登録情報を確認する
一度も通信をしていないので、まだ何も表示されない
```cisco_ios
Router#show ip nat translations 
Router#
```

## Switch2での設定コマンド

パケットをSnifferに転送するための設定を行う
```cisco_ios
Switch>en
Switch#conf t
Switch(config)#monitor session 1 source interface fastEthernet 0/1
Switch(config)#monitor session 1 destination interface fastEthernet 0/3
```

## 接続確認

### PC1
PC1の「Desktop」タブから「Command Prompt」を選択してコマンドプロンプトを起動し、ping通信を行う。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273110/89ca555a-cf3a-a577-e61d-ad7022edf73d.png)

SnifferのGUIを見ると、IPパケットの「SRC IP」が「172.16.0.2」と変換されてICMP要求が飛んでいることがわかる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273110/11a6a335-13e2-bb9b-4a1a-ec8d74c52021.png)

### PC2
PC2の「Desktop」タブから「Command Prompt」を選択してコマンドプロンプトを起動し、ping通信を行う。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273110/f783d58d-02a8-14a0-0020-7c4ed3f54a49.png)

SnifferのGUIを見ると、IPパケットの「SRC IP」が「172.16.0.3」と変換されてICMP要求が飛んでいることがわかる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273110/c5d4a86f-275e-73e7-02c0-5a66fd20e8a3.png)

### Router1
再度NATの情報を確認してみるとアドレスプールの内容でNAT変換されているのがわかる
```cisco_ios
Router#show ip nat translations 
Pro  Inside global     Inside local       Outside local      Outside global
icmp 172.16.0.2:5      192.168.0.100:5    172.16.0.100:5     172.16.0.100:5
icmp 172.16.0.2:6      192.168.0.100:6    172.16.0.100:6     172.16.0.100:6
icmp 172.16.0.2:7      192.168.0.100:7    172.16.0.100:7     172.16.0.100:7
icmp 172.16.0.2:8      192.168.0.100:8    172.16.0.100:8     172.16.0.100:8
icmp 172.16.0.3:13     192.168.0.101:13   172.16.0.100:13    172.16.0.100:13
icmp 172.16.0.3:14     192.168.0.101:14   172.16.0.100:14    172.16.0.100:14
icmp 172.16.0.3:15     192.168.0.101:15   172.16.0.100:15    172.16.0.100:15
icmp 172.16.0.3:16     192.168.0.101:16   172.16.0.100:16    172.16.0.100:16

Router#
```


現場からは以上です