久しぶりにGNS3（その11：セキュアL2トンネリング/ブリッジ：NAT）

# IPsecを伴ったL2トンネリング/ブリッジ（経路内にNATがあるケース）
[その10](https://qiita.com/infinite1oop/items/b9cb94e96335f0f8eabb)の続き。トンネリング（IPsec）内にNAT(NAPT)がある場合の検証。NATトラバーサルを用いる。（今回は、L2トンネリングというよりIPsecの話になってしまっている。）

## NATトラバーサル
NAPTは、ルーターにて、ポート番号のマッピングを行い、「複数」のローカルIPアドレスを１つのグローバルIPアドレスに割り当てるもの。今回のケース（L2TP over IPsec）では、NAPTを通過するとポート番号こと暗号化されてしまう。こで、NATトラバーサル機能を用いて、これを解決する。簡潔に言うと、IPsecによって暗号化されたパケット（ESP）にUDPヘッダを付加する。詳細については、次のサイトを参考にされたい。
- [L2TP/IPsecの概要](https://beginners-network.com/vpn_l2tp_ipsec.html)
- [IPsec - NAT Traversal](https://www.infraexpert.com/study/ipsec15.html)

## トポロジー
![Topology.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/ad34ddc7-2291-6169-fe04-2bd85789f511.png)

末端のPCは同一セグメント（10.0.0.0/24）、固定IPアドレスがアサインされており、JPN-RouterとEU-Routerとの通信がIPsec化される。この経路の途中にNAT-Routerが存在するものとする。

## 設定
[Ciscoサイト「PAT を実行し LAN 間 IPSec トンネルを通す IOS ルータの設定例」](https://www.cisco.com/c/ja_jp/support/docs/security-vpn/ipsec-negotiation-ike-protocols/23820-ios-pat-ipsec-tunnel.html)を参考に設定。

### NAT-Router
```
interface FastEthernet0/0
 ip address 192.168.1.1 255.255.255.0
 ip nat inside

interface FastEthernet0/1
 ip address 172.16.1.1 255.255.255.0
 ip nat outside

ip nat inside source list 1 interface FastEthernet0/1 overload
```

NAPT（シスコ用語ではPAT）の設定。192.168.1.0/24ネットワークが内側、172.16.1.0/24ネットワークが外側である。

### JPN-Router
```
pseudowire-class test
 encapsulation l2tpv3
 ip local interface FastEthernet0/0

crypto isakmp policy 1
 encr 3des
 authentication pre-share
 group 2
crypto isakmp key testpwd address 172.16.1.2
crypto isakmp keepalive 60 periodic

crypto ipsec transform-set ABC esp-3des esp-sha-hmac 

crypto map To_R3 1 ipsec-isakmp 
 set peer 172.16.1.2
 set transform-set ABC 
 match address DEF

interface FastEthernet0/0
 ip address 192.168.1.2 255.255.255.0
 crypto map To_R3

interface FastEthernet0/1
 no ip address
 xconnect 172.16.1.2 1 encapsulation l2tpv3 manual pw-class test
  l2tp id 1 2

ip route 0.0.0.0 0.0.0.0 FastEthernet0/0

ip access-list extended DEF
 permit 115 any any
```

こちらは、[その10](https://qiita.com/infinite1oop/items/b9cb94e96335f0f8eabb)と同じ（3DES以外）。

### EU-Router
```
pseudowire-class test
 encapsulation l2tpv3
 ip local interface FastEthernet0/0

crypto isakmp policy 1
 encr 3des
 authentication pre-share
 group 2
crypto isakmp key testpwd address 172.16.1.1
crypto isakmp keepalive 60 periodic
!
!
crypto ipsec transform-set ABC esp-3des esp-sha-hmac 
!
crypto map To_R2 1 ipsec-isakmp 
 set peer 172.16.1.1
 set transform-set ABC 
 match address DEF

interface FastEthernet0/0
 ip address 172.16.1.2 255.255.255.0
 crypto map To_R2

interface FastEthernet0/1
 no ip address
 xconnect 192.168.1.2 1 encapsulation l2tpv3 manual pw-class test
  l2tp id 2 1

ip route 0.0.0.0 0.0.0.0 FastEthernet0/0

ip access-list extended DEF
 permit 115 any any
```

ここ（NAT外側）でのポイントは、IPsecの対向先に、NAT-Routerの外側のIPアドレスを指定することである。JPN-RouterのIPアドレスを指定しても動作しない。IKE/IPsec通信経路にNATが存在すると、自動的にNATトラバーサルを行うシスコルーターの仕様のような気がする。これについては、[記事「IPSec VPN」](https://www.ciscopress.com/articles/article.asp?p=2803868&seqNum=2)に「NOTE R3 has to use the translated IP address because, from its perspective, it’s establishing an IPSec tunnel with 23.1.1.1:」と、類似の説明が見つかった。

## 検証
PC1からPC2へのping実施時のWiresharkデータ。

### Switch1とNAT-Router間
IKE初期時。IKEのポート番号500が見える。
![1-1stのコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/9b9208dc-cc7a-b089-c575-e2746892109d.png)
その次。「Malformed Packet」とあることから、おそらく各ルーターにて経路内にNATがあることを把握したのか？
![1-2ndのコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/a7dcd9ad-6404-793f-89b5-e12ae033e0a2.png)
で、「UDP Encapsulation...」とUDPパケットが追加され、NATトラバーサルが始まる。ポート番号も4500に変更されている。
![1-3rdのコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/853afaf8-4db5-27cd-35d4-30bfb0216df2.png)
暗号化されたパケットにも、UDPパケットが追加されている。
![1-4thのコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/a93f47a7-09a5-2cde-51c3-9bd3612669b3.png)

### NAT-RouterとSwitch2間
上記のWiresharkデータに相当する状況を表示。
![2-1st.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/1a4b8a10-968d-2eb7-3eb6-99ecee172bf8.png)

![2-2nd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/c1b7225e-8972-6e51-d8d0-990452ed16aa.png)

![2-3nd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/897baeeb-64ba-fdf6-40b4-f36d0fe29c18.png)

![2-4th.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/31014846-ae7a-74aa-7ad3-0f110884575a.png)

## 終わりに
### NAT外側から起動（PC2からping）するには、、
NAT-Routerにて下記設定が必要（さきほどのCiscoサイト情報より）。

```
ip nat inside source static udp inside_ip 4500 interface interface 4500
ip nat inside source static udp inside_ip 500 interface interface 500
```

### NATルーターのIPアドレス指定
末端のルーターでは対向ルーターまでの経路が通常わからないため、IPsecの対抗先として、NATを行うルーターのIPアドレスを末端のルーターで指定するのはいかがなものかと考える。最初からNATトラバーサル前提で両端ルーターの設定ができればよいと思うのだが、、、。これについて少々調べたが、Ciscoルーター以外では情報が見つかるが、Ciscoルーターでは見つからず。時間があるときに調べてみたい。同時に情報ありませんか、、、> 有識者のみなさま。