久しぶりにGNS3（その15：Port Forward）

# Port Forward
今回は、Port Forwardを試す。

## トポロジー
![topology.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/024b0817-6096-7eeb-5696-5dabcecf38b9.png)
ルーターR1がNATルーターとなっており、右側がインターネット（NAT外）側でクライアント（ここではGNS3から起動されるVM:xubuntu）がDHCPによりIPアドレスを取得、左側がローカル（NAT内）側で、ルーターR2にhttpサーバー（固定IPアドレス）、ルーターR3にsshサーバー（固定IPアドレス）が起動しているものとする。

## Configuration
関連するところのみ記載。
## NAT（ルーターR1）
DHCPサーバー関連。
```
hostname R1
!
ip dhcp excluded-address 101.99.88.1 101.99.88.10
!
ip dhcp pool P1
 network 101.99.88.0 255.255.255.0
 default-router 101.99.88.1 
```

IPアドレス設定（外側：101.99.88.1、内側：172.16.1.1）、NATの外側および内側の設定。
```
!
interface FastEthernet0/0
 ip address 172.16.1.1 255.255.255.0
 ip nat inside
!
interface FastEthernet0/1
 ip address 101.99.88.1 255.255.255.0
 ip nat outside
```

Port Forwardの設定。NAT外側のPort22(ssh)にアクセスされた場合は、172.16.1.3（ルーターR3）のPort22へ転送、NAT外側のPort80(http)にアクセスされた場合は、172.16.1.2（ルーターR2）のPort80へ転送する。
```
ip nat inside source static tcp 172.16.1.3 22 101.99.88.1 22 extendable
ip nat inside source static tcp 172.16.1.2 80 101.99.88.1 80 extendable
!
access-list 10 permit any
```

### httpサーバー（ルーターR2）
IPアドレス設定、httpサーバー設定、スタティックルート設定。記事[「IOSでのhttp serverの設定」](https://tempest.blog.jp/archives/50415123.html)によると、Ciscoルーターでのhttpサーバーには、enableパスワードの設定が必要らしい。
```
hostname R2
!
enable password 7 himitsu
!
interface Ethernet0
 ip address 172.16.1.2 255.255.255.0
ip route 0.0.0.0 0.0.0.0 Ethernet0
!
ip http server
```

### sshサーバー（ルーターR3）
ドメイン名の設定（[「Ciscoルータ - SSHの設定」](https://www.infraexpert.com/study/ciscorouter7.html)によると、Ciscoルーターsshサーバーに必要）、アカウント設定、sshサーバーの設定、IPアドレス設定、スタティックルート設定。

```
hostname R3
!
ip domain name test.com
!
username test password 7 1248574446
!
ip ssh version 2
! 
interface Ethernet0
 ip address 172.16.1.3 255.255.255.0
!
ip route 0.0.0.0 0.0.0.0 Ethernet0
```

## 検証
xubuntuからアクセスする。

### http
![WebAccessのコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/d2670747-fe8c-d754-ed79-63d96fb2037c.png)
ブラウザから、NAT外側IPアドレスである「101.99.88.1」へアクセスすると、ルーターR2の表示が見える。

### ssh
![sshAccessのコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/eef64cd6-e9d1-d6d5-c7d2-83d0d3752bd9.png)
sshコマンドでログインすると、CLIプロンプトが、ルーターR3であることが見える。

### コマンドnc(netcat)
結果は下記であった。
```
$ nc 101.99.88.1 80
GET / HTTP/1.1
HOST: 101.99.88.11

HTTP/1.1 401 Unauthorized
Date: Fri, 01 Mar 2002 01:07:23 GMT
Server: cisco-IOS
Connection: close
Accept-Ranges: none
WWW-Authenticate: Basic realm="level_15_access"

401 Unauthorized

$ nc 101.99.88.1 1356
$ 
$ nc 101.99.88.1 22
SSH-2.0-Cisco-1.25

$ nc 101.99.88.1 2346
$ 
```
Port22,80以外は応答なし。期待どおり。

### ルーターR1の状況
```
R1#show ip nat translations 
Pro Inside global      Inside local       Outside local      Outside global
tcp 101.99.88.1:80     172.16.1.2:80      101.99.88.11:39792 101.99.88.11:39792
tcp 101.99.88.1:80     172.16.1.2:80      ---                ---
tcp 101.99.88.1:22     172.16.1.3:22      101.99.88.11:42304 101.99.88.11:42304
tcp 101.99.88.1:22     172.16.1.3:22      ---                ---

R1#show ip nat statistics   
Total active translations: 4 (2 static, 2 dynamic; 4 extended)
Outside interfaces:
  FastEthernet0/1
Inside interfaces: 
  FastEthernet0/0
Hits: 415  Misses: 0
CEF Translated packets: 415, CEF Punted packets: 0
Expired translations: 8
Dynamic mappings:
nat-limit statistics:
 max entry: max allowed 0, used 0, missed 0

R1#show ip nat portblock pat     
tcp:
  80     22 
```

### おまけ
sshアクセスで、「no matching key exchange method found. Their offer: diffie-hellman-group1-sha1」なるエラーに遭遇。記事[「Macを Version UPしたらCisco機器にSSHできなくなった」](https://zenn.dev/billy/articles/729e61ae41702f)に従い、~/.ssh/config に下記記載をすることによりエラー解消。
```
$ cat .ssh/config 
Host *.*.*.*
KexAlgorithms +diffie-hellman-group1-sha1
Ciphers +3des-cbc,aes128-cbc,aes192-cbc,aes256-cbc,
```