ヤマハルーターでL2TPv3 over IPsec（NATあり）

# NATありL2TPv3 over IPsecをヤマハルーターで実現
[前回](https://qiita.com/infinite1oop/items/17ee478cd0ef874b910d)の予告どおり、途中経路にNATがある環境下での、L2TPv3 over IPsecをヤマハルーターで実現した。参考サイトは同じ。
- [L2TPv3を用いたL2VPN](http://www.rtpro.yamaha.co.jp/RT/docs/l2tpv3/)

## ネットワークトポロジー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/7f7c5894-793b-57b7-aca9-06b81a1b17d0.png)
Router 1は、NATルーターからDHCPによりWAN側IPアドレスを取得する。Router 2のWAN側は固定のグローバルIPアドレスを持つ。Router 2は、接続されるまで相手がわからない。

## 設定
今回は非対称のため、両ルーターの設定情報について、関連するところのみ記載することとした。

### Router 1（DHCPによりWAN IPアドレス取得）
```
bridge member bridge1 lan1 tunnel1  # LAN側とトンネルとをブリッジ化
ip bridge1 address 192.168.2.10/24  # ブリッジにIPアドレスアサイン
ip lan2 address dhcp                # WAN側IPアドレスをDHCPで取得
ip lan2 nat descriptor 1            # 適用するNATディスクリプタ
tunnel select 1                     # トンネル設定
 tunnel encapsulation l2tpv3        # L2TPv3/IPsecトンネル
 tunnel endpoint address 192.168.2.10 60.xxx.yyy.zz2 # トンネル始点（ブリッジIPアドレス）と終点（対向ルーターのWAN IPアドレス）
 ipsec tunnel 101                   # IPsecトンネルポリシー
  ipsec sa policy 101 1 esp aes-cbc sha-hmac # ESP及びアルゴリズム
  ipsec ike keepalive log 1 on      # IKEキープアライブSyslog化
  ipsec ike keepalive use 1 on      # IKEキープアライブ有効化
  ipsec ike local address 1 192.168.2.10 # IKEローカルIPアドレス
  ipsec ike local name 1 l2tpv3 key-id # IPsecで使用するローカル名の指定（WAN(LAN2)側IPアドレス不定のため、IPアドレスの代わりに使用。対向ルーターのremote nameで同じ名称を用いる（らしい））
  ipsec ike nat-traversal 1 on      # IPsecでNATトラバーサル有効化
  ipsec ike pre-shared-key 1 text yamaha # IKE事前共有鍵
  ipsec ike remote address 1 60.xxx.yyy.zz2 # IPsecリモートIPアドレス
 l2tp always-on on                  # L2TPv3の常時接続
 l2tp hostname RT1                  # ホスト名
 l2tp tunnel auth on yamaha         # トンネル認証ONおよびパスワード
 l2tp tunnel disconnect time off    # トンネル切断タイマーOFF
 l2tp keepalive use on 60 3         # トンネルキープアライブON、インターバル（秒）、ダウン検出カウント
 l2tp keepalive log on              # トンネルキープアライブログON
 l2tp syslog on                     # L2TPトンネル制御をSyslog化
 l2tp local router-id 192.168.2.10  # ローカル（自分）ルーターID
 l2tp remote router-id 192.168.2.20 # リモート（対向）ルーターID
 l2tp remote end-id yamaha          # リモートエンドID（ルーターどうしで同一）
 ip tunnel tcp mss limit auto       # TCP MSS自動制御
 tunnel enable 1                    # トンネル有効化
nat descriptor type 1 masquerade    # NAT IPマスカレード 
nat descriptor address outer 1 primary # NAT外側IPアドレス（LAN2）
nat descriptor address inner 1 auto # NAT内側IPアドレス（自動）
nat descriptor masquerade static 1 1 192.168.2.10 udp 1701 # L2TPポート番号（1701）をブリッジIPアドレスへ転送
nat descriptor masquerade static 1 2 192.168.2.10 udp 500  # ISAKMPポート番号（500）を同様に転送
nat descriptor masquerade static 1 3 192.168.2.10 udp 4500 # IPsec NAT-Traversalポート番号（4500）を同様に転送
nat descriptor masquerade static 1 4 192.168.2.10 esp      # ESPパケットを同様に転送
ipsec auto refresh on               # IKE鍵交換有効化
ipsec transport 1 101 udp 1701      # IPsecトランスポートモードでL2TP（1701）利用
l2tp service on l2tpv3              # L2TPv3有効化
```
Router 1では、WAN側IPアドレスが不定となるため、IDとして、IPアドレスではなく、名称を使う。次のサイトの説明参照。
- [Yamaha RTX ルータのIPsec設定 片拠点 不定IPアドレス](https://changineer.info/network/yamaha_router_rtx/yamaha_router_rtx_ipsec_any.html)

### Router 2（WAN側、固定グローバルIPアドレス）
```
ip route default gateway 60.xxx.jjj.kkk # デフォルトゲートウェイ
bridge member bridge1 lan1 tunnel1  # LAN側とトンネルとをブリッジ化
ip bridge1 address 192.168.2.20/24  # ブリッジにIPアドレスアサイン
ip lan2 address 60.xxx.jjj.mmm/2z   # WAN側IPアドレス（固定）
ip lan2 nat descriptor 1            # 適用するNATディスクリプタ
tunnel select 1                     # トンネル設定
 tunnel encapsulation l2tpv3        # L2TPv3/IPsecトンネル
 ipsec tunnel 101                   # IPsecトンネルポリシー
  ipsec sa policy 101 1 esp aes-cbc sha-hmac  # ESP及びアルゴリズム
  ipsec ike keepalive log 1 on      # IKEキープアライブSyslog化
  ipsec ike keepalive use 1 on      # IKEキープアライブ有効化
  ipsec ike local address 1 192.168.2.20 # IKEローカルIPアドレス
  ipsec ike nat-traversal 1 on      # IPsecでNATトラバーサル有効化
  ipsec ike pre-shared-key 1 text yamaha # IKE事前共有鍵
  ipsec ike remote address 1 any    # IPsec対向アドレス
  ipsec ike remote name 1 l2tpv3 key-id # IPsecで使用するリモート名の指定（対向ルーターのlocal nameで同じ名称を用いる（らしい））
 l2tp always-on on                  # L2TPv3の常時接続
 l2tp hostname RT2                  # ホスト名
 l2tp tunnel auth on yamaha         # トンネル認証ONおよびパスワード
 l2tp tunnel disconnect time off    # トンネル切断タイマーOFF
 l2tp keepalive use on 60 3         # トンネルキープアライブON、インターバル（秒）、ダウン検出カウント
 l2tp keepalive log on              # トンネルキープアライブログON
 l2tp syslog on                     # L2TPトンネル制御をSyslog化
 l2tp local router-id 192.168.2.20  # ローカル（自分）ルーターID
 l2tp remote router-id 192.168.2.10 # リモート（対向）ルーターID
 l2tp remote end-id yamaha          # リモートエンドID（ルーターどうしで同一）
 ip tunnel tcp mss limit auto       # TCP MSS自動制御
 tunnel enable 1                    # トンネル有効化
nat descriptor type 1 masquerade    # NAT IPマスカレード 
nat descriptor address outer 1 primary # NAT外側IPアドレス（LAN2）
nat descriptor address inner 1 auto # NAT内側IPアドレス（自動）
nat descriptor masquerade static 1 1 192.168.2.20 udp 1701 # L2TPポート番号（1701）をブリッジIPアドレスへ転送
nat descriptor masquerade static 1 2 192.168.2.20 udp 500  # ISAKMPポート番号（500）を同様に転送
nat descriptor masquerade static 1 3 192.168.2.20 udp 4500 # IPsec NAT-Traversalポート番号（4500）を同様に転送
nat descriptor masquerade static 1 4 192.168.2.20 esp      # ESPパケットを同様に転送
ipsec auto refresh on               # IKE鍵交換有効化
ipsec transport 1 101 udp 1701      # IPsecトランスポートモードでL2TP（1701）利用
l2tp service on l2tpv3              # L2TPv3有効化
```

## ルーター間のネットワークキャプチャデータ
![IKE&ESPwith4500のコピー2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/dcd31a4d-d42f-c2a1-6674-bc8a7348657a.png)
Router 1とNAT Routerとの間のデータである。UDPポート番号4500のヘッダにESPデータが続いており、NATトラバーサルが機能していることがわかる。

## クライアントPCでのネットワークキャプチャデータ
![ARP&ICMPのコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/a669f7b3-8873-2715-2e02-1f4baf6071bb.png)
IPアドレス172.16.0.1をPCで取得したデータである。pingを実施した結果であり、ARPのブロードキャストおよびそのリプライ後にICMPパケットが見える（末端が同一ネットワークセグメント）。




## L2TPおよびIPsec状況
```
# show status l2tp  
------------------- L2TP INFORMATION -------------------
L2TP情報テーブル
  L2TPトンネル数: 1, L2TPセッション数: 1 
TUNNEL[1]:
  トンネルの状態: established
  バージョン: L2TPv3
  自機側トンネルID: 39738
  相手側トンネルID: 47634
  自機側IPアドレス: 192.168.2.10
  相手側IPアドレス: 60.xxx.yyy.zz2
  自機側送信元ポート: 1701
  相手側送信元ポート: 1701
  ベンダ名: YAMAHA Corporation
  ホスト名: RT2
  Next Transmit sequence(Ns): 39
  Next Receive sequence(Nr) : 37
  トンネル内のセッション数: 1 session
  セッション情報:
    セッションの状態: established
    自機側セッションID: 12771
    相手側セッションID: 17492
    Circuit Status 自機側:UP 相手側:UP
    通信時間: 35分50秒
    受信: 484 パケット [205813 オクテット]
    送信: 158 パケット [17058 オクテット]
# 
# show ipsec sa  
Total: isakmp:1 send:1 recv:1

sa    sgw isakmp connection    dir  life[s] remote-id
----------------------------------------------------------------------------
1     1    -     isakmp        -    26640   60.xxx.yyy.zz2
2     1    1     tra[0001]esp  send 26642   60.xxx.yyy.zz2
3     1    1     tra[0001]esp  recv 26642   60.xxx.yyy.zz2
```

## 終わりに
以前、「[久しぶりにGNS3（その11：セキュアL2トンネリング/ブリッジ：NAT）](https://qiita.com/infinite1oop/items/4c6bb258abb586037421)」にて、Ciscoルーターで類似の内容を行ったが、NAT Traversalを明示的に指定でき、途中経路を意識せずに実現できるヤマハルーターの方が、扱いやすいと感じる。