CenturyルーターにてNAT環境でのL2TPv3 Over IPsec

# CenturyルーターにてNAT環境でのL2TPv3 Over IPsec
CenturyルーターNXR-230を用いて、NAT環境でのL2TPv3 Over IPsecを実現したときの記録である。

## ネットワーク
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/e29e6ffc-0dfb-e1f2-fb7a-99d8d53540b5.png)
- ClientはDHCPによりIPアドレスを取得
- NATルーターが存在
- Serverは固定IPアドレスを持つ
- 末端のPCどうしが同一ネットワークセグメント

## Configuration（設定）
先日の記事「[CenturyルーターでIPsec](https://qiita.com/infinite1oop/items/5e16728fbb960a4b9b66)」同様、本家サイト「[2. L2TPv3応用設定](https://www.centurysys.co.jp/futurenet-tech-wiki/setting/setting-10417/)」を試したが、動作せず。各種トライをして、動作した設定が下記となる（未関連部分は省略）。設定内にポイントとなるコメント追加。

### Client
```
hostname Client
!
ipsec nat-traversal enable # NATトラバーサルをON
!
l2tpv3 udp path-mtu-discovery
l2tpv3 hostname nxr-client # ホスト名
l2tpv3 router-id 192.168.10.10 # ルーターID
!
ipsec local policy 1 # IPsecローカルポリシー
 address ip 
 self-identity fqdn test # IPsecで用いるidentity
!
ipsec isakmp policy 1 # IKEポリシー
 authentication pre-share himitsu # 事前共有鍵
 hash sha256
 encryption aes128
 group 2
 isakmp-mode aggressive
 remote address ip aaa.bbb.ccc.201 # Server　IPアドレス
 remote identity fqdn test # Server identity
 local policy 1 # 適用するIPsecローカルポリシー
!
ipsec tunnel policy 1 # IPsecトンネルポリシー
 set transform esp-aes128 esp-sha256-hmac
 set key-exchange isakmp 1 # 適用するIKEポリシー
 match address ipsecACL # IPsecを適用するIPアドレス（後述）
!
l2tpv3 tunnel 1 # L2TPv3トンネル定義
 tunnel address 192.168.10.20 # 相手先IPアドレス
 tunnel hostname nxr-server # 相手先ホスト名
 tunnel router-id 192.168.10.20 # 相手先ルーターID
!
l2tpv3 xconnect 1 # L2Tv3接続情報
 tunnel 1
 xconnect ethernet 0 # 適用する物理I/F
 xconnect end-id 1
 retry-interval 30
 ip tcp adjust-mss auto
!
interface tunnel 0 # IPsecトンネルI/F定義
 ip address 192.168.10.10/32 # IPアドレス（ルーターIDと同一にすることがポイントの様子）
 tunnel mode ipsec ipv4 # IPsecトンネル
 tunnel protection ipsec policy 1 # 適用するIPsecトンネルポリシー
!
interface ethernet 0 # L2TPv3の対象となる物理I/F
 no ip address
!
interface ethernet 1 # WAN側IPアドレス
 ip address dhcp # DHCPによりIPアドレス取得
 ip masquerade # IPマスカレード
 ipsec policy 1 # 適用するIPsecポリシー
!
ip route 192.168.10.20/32 tunnel 0 # IPsecの相手先へのルートにトンネルを指定
!
ipsec access-list ipsecACL ip any any # IPsecの対象IPアドレス
```

### Server
```
hostname Server
!
ipsec nat-traversal enable # NATトラバーサルをON
!
l2tpv3 udp path-mtu-discovery
l2tpv3 hostname nxr-server # ホスト名
l2tpv3 router-id 192.168.10.20 # ルーターID
!
ipsec local policy 1 # IPsecローカルポリシー
 address ip 
 self-identity fqdn test # IPsecで用いるidentity
!
ipsec isakmp policy 1 # IKEポリシー
 authentication pre-share himitsu # 事前共有鍵
 hash sha256
 encryption aes128
 group 2
 isakmp-mode aggressive
 remote address ip any #　相手先IPアドレス（Server側なので不定(any)）
 remote identity fqdn test # Client identity
 local policy 1 # 適用するIPsecローカルポリシー
!
ipsec tunnel policy 1 # IPsecトンネルポリシー
 set transform esp-aes128 esp-sha256-hmac
 set key-exchange isakmp 1 # 適用するIKEポリシー
 match address ipsecACL # IPsecを適用するIPアドレス（後述）
!
l2tpv3 tunnel 1 # L2TPv3トンネル定義
 tunnel address 192.168.10.10 # 相手先IPアドレス
 tunnel hostname nxr-client # 相手先ホスト名
 tunnel router-id 192.168.10.10 # 相手先ルーターID
!
l2tpv3 xconnect 1 # L2Tv3接続情報
 tunnel 1
 xconnect ethernet 0 # 適用する物理I/F
 xconnect end-id 1
 retry-interval 30
 ip tcp adjust-mss auto
!
interface tunnel 0 # IPsecトンネルI/F定義
 ip address 192.168.10.20/32 # IPアドレス（ルーターIDと同一にすることがポイントの様子）
 tunnel mode ipsec ipv4 # IPsecトンネル
 tunnel protection ipsec policy 1 # 適用するIPsecトンネルポリシー
!
interface ethernet 0 # L2TPv3の対象となる物理I/F
 no ip address
!
interface ethernet 1 # WAN側IPアドレス
 ip address aaa.bbb.ccc.201/24 # 固定IPアドレス
 ip masquerade　# IPマスカレード
 ipsec policy 1　# 適用するIPsecポリシー
!
ip route 0.0.0.0/0 aaa.bbb.ccc.1　# デフォルトルート
ip route 192.168.10.10/32 tunnel 0　# IPsecの相手先へのルートにトンネルを指定
!
ipsec access-list ipsecACL ip any any　# IPsecの対象IPアドレス
```

## Status
IPsecの状況である（Client）。
```
Client#show ipsec sa
src 192.168.200.19 dst aaa.bbb.ccc.201
	proto esp spi 0xbeaf66a1 reqid 16385 mode tunnel
	interface tunnel0
	replay-check enable replay-window 32 flag 20
	auth hmac(sha256) 0x465888810300c585bea5c3967a2cac425c8e976ee263ef5a4dfc
4e400492f5be
	enc cbc(aes) 0x4433fbeb719ad12029107268c7ebf201
	encap type espinudp sport 4500 dport 4500 addr 0.0.0.0
	sel src 0.0.0.0/0 dst 0.0.0.0/0 interface tunnel0 
src aaa.bbb.ccc.201 dst 192.168.200.19
	proto esp spi 0x269d553a reqid 16385 mode tunnel
	interface tunnel0
	replay-check enable replay-window 32 flag 20
	auth hmac(sha256) 0x6560bcee01efe3f74f17a225dac2f1988e18e1d2667147913790
001f15e12ae8
	enc cbc(aes) 0x276229953bd47385e66bae6285f85f00
	encap type espinudp sport 4500 dport 4500 addr 0.0.0.0
	sel src 0.0.0.0/0 dst 0.0.0.0/0 interface tunnel0 
```

L2TPv3の状況である（Client）。
```
Client#show l2tpv3 tunnel detail 

Tunnel Information Total tunnels 1

Tunnel id 3844543436 is up, remote id is 1646783082, 1 active sessions
  Tunnel state is established, time since change 00:08:25
  Tunnel transport is IP(115)
  Interop Mode is IETF(RFC3931)
  Remote tunnel name is nxr-server
    Internet Address 192.168.10.20, port0
  Local tunnel name is nxr-client
  10 packets sent, 8 received
  449 bytes sent, 221 received
  4 sent errors, 0 received errors
  Control Ns 8, Nr 8
  Local RWS 4, Remote RWS 4
  Retransmission count 0, timeout 1, max 8 seconds
  ZLB ACKs sent 6, received 6
  Session attempt 1, est 1, fail 0
```
「Tunnel state is established」により、L2TPv3が確立されていることがわかる。

EOF