ヤマハルーターでL2TPv3（その２：NAT環境＋α）

# NAT環境でL2TPv3
「[ヤマハルーターでL2TPv3](https://qiita.com/infinite1oop/items/73e2e57c90e377c7bae3)」の続編、NAT環境でL2TPv3を確認するとともに、少々深堀りを実施。今回は、「[ヤマハルーターでL2TPv3 over IPsec（NATあり）](https://qiita.com/infinite1oop/items/bf375772655d606f931d)」とは異なり、Non-IPsec環境での実践。

## ネットワーク構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/d4bde01f-33a1-ec32-9db1-f1bcb67b7c50.png)
Router1は、NATルーターからDHCPによりWAN側IPアドレスを取得する。Router2のWAN側は固定のグローバルIPアドレスを持つ。Router2は、接続されるまで相手がわからない。末端のPCが同一ネットワークに属し、192.168.10.xx/24の固定IPアドレスを持つ。

## 設定
主要部分を説明。

### Router1（NAT内側）
```
administrator password *
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-raw　　　　　　# L2TPv3トンネル
 tunnel endpoint address 192.168.2.10 60.xxx.yyy.zz2　　# トンネル始点（ブリッジIPアドレス）と終点（対向ルーターのWAN 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　　　　　　　　　　　　　　　　　# トンネルKeepAlive 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=WAN側）
nat descriptor address inner 1 auto # NAT内側IPアドレス（自動）
nat descriptor masquerade static 1 1 192.168.2.10 udp 1701 # L2TPポート番号（1701）をブリッジIPアドレスへ転送 
telnetd host lan
l2tp service on l2tpv3              # L2TPv3有効化
```

### Router2（NAT外側）
```
administrator password *
ip route default gateway xxx.yyy.zzz.177  # デフォルトゲートウェイ
bridge member bridge1 lan1 tunnel1  # LAN側とトンネルとをブリッジ化
ip bridge1 address 192.168.2.20/24  # ブリッジにIPアドレスアサイン
ip lan2 address 60.jjk.mlj.xx2/29   # WAN側IPアドレス（固定）
ip lan2 nat descriptor 1            # 適用するNATディスクリプタ
tunnel select 1                     # トンネル設定
 tunnel encapsulation l2tpv3-raw    # L2TPv3トンネル
 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         # トンネルKeepAlive 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=WAN側）
nat descriptor address inner 1 auto # NAT内側IPアドレス（自動）
nat descriptor masquerade static 1 1 192.168.2.20 udp 1701  # L2TPポート番号（1701）をブリッジIPアドレスへ転送
telnetd host lan
dns server 8.8.8.8
l2tp service on l2tpv3              # L2TPv3有効化
```
NAT外側のルーターの設定には、「tunnel endpoint address」が存在しない（できない）。

## 検証
### Router1コンソールでのL2TPv3ステータス
```
# show status l2tp  
------------------- L2TP INFORMATION -------------------
L2TP情報テーブル
  L2TPトンネル数: 1, L2TPセッション数: 1 
TUNNEL[1]:
  トンネルの状態: established
  バージョン: L2TPv3
  自機側トンネルID: 54524
  相手側トンネルID: 50910
  自機側IPアドレス: 192.168.2.10
  相手側IPアドレス: 60.xxx.yyy.zz2
  自機側送信元ポート: 1701
  相手側送信元ポート: 1701
  ベンダ名: YAMAHA Corporation
  ホスト名: RT2
  Next Transmit sequence(Ns): 10
  Next Receive sequence(Nr) : 8
  トンネル内のセッション数: 1 session
  セッション情報:
    セッションの状態: established
    自機側セッションID: 14473
    相手側セッションID: 54668
    Circuit Status 自機側:UP 相手側:UP
    通信時間: 6分16秒
    受信: 81 パケット [16814 オクテット]
    送信: 156234 パケット [86537568 オクテット]
# 
```
### Router2のWAN側に入る手前のネットワークキャプチャデータ
#### L2TPv3確立
![L2tP確立のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/f8985499-9b10-bb05-9373-5a4c8a941404.png)
確立までのシーケンスは、Cisco（「[久しぶりにGNS3（その25：L2TPをWiresharkで確認）](https://qiita.com/infinite1oop/items/0641cb6762fe79d96954)」）とは異なるようだ。

#### Cookieサイズ
![Cookieサイズ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/e3f9294a-ff61-5c2b-00a4-e262d5ad03fc.png)
Yamahaルーターでは、Cookieサイズが”0”となっている。（Ciscoでは”4”）

#### ping
![YamahaL2TPv3(overUDPのコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/149b48f1-96ef-cda1-5573-6bb9ac4a8599.png)
「L2TPv3 over UDP」となっている。Cisco「[久しぶりにGNS3（その25：L2TPをWiresharkで確認）](https://qiita.com/infinite1oop/items/0641cb6762fe79d96954)」では、UDPが存在しない（下記）。
![CiscoL2TPv3(NonUDP).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/7c889aca-9c0e-2e84-3fbb-09a891abc761.png)

#### Keep Alive
![KeepAliveのコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/ee1def94-3e54-5915-1df8-c7b5d98835e3.png)
「l2tp keepalive use on 60 3」にて設定したとおり、60秒ごとに、双方向のHello-ACKのやりとりが行われている。

### 深堀り
#### Router ID
Router IDは、L2TPv3の最初のネゴシエーション時のSCCRQ/SCCRPにてやり取りされている。
![SCCRQのコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/bd1f3a4a-5a0f-72ed-f104-58afa49d7ffb.png)
3232236042 = 192.168.2.10（Router1のRouter ID）
![SCCRPのコピー2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/e6834889-6a42-6f4d-d519-fee76cc0a4f5.png)
3232236052 = 192.168.2.20（Router２のRouter ID）

#### トンネルIDとセッションID
![L2TP確立詳細のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/0f5e1fb8-994f-90f4-19d4-9724008f9766.png)
トンネルIDは相手側から指定されるようだ。
- Router1 Tunnel ID: 54524
- Router2 Tunnel ID: 50910

L2TPv3確立後に使われるセッションIDは、その次のネゴシエーションICRQ/ICRP/ICRNでやり取りされている。
- Router1 Session ID: 14473
- Router2 Session ID: 54668

上記の値は、さきほどの「show status l2tp」に表示されている。下記に再掲。
```
  自機側トンネルID: 54524
  相手側トンネルID: 50910

    自機側セッションID: 14473
    相手側セッションID: 54668
```

#### セッションIDが使われている様子
![54668のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/7e6a97a7-831f-5de4-9c73-a934006baa1f.png)
![14473のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/b3722c5d-e8a9-1e6d-f1ed-06159c88580c.png)
さきほどのセッションIDが見られる。相手のIDを指定するようだ。

Router ID（IPアドレス）、トンネルID、セッションIDをリンクさせて、通信を行っている。

### その他
#### NAT
Router1の場合、Router IDであるブリッジIPアドレス（bridge1）192.168.2.10が内側、DHCPで取得したIPアドレス（lan2）が外側（WAN）となっている。Static NATにより、外側に来たUDP Port 1702を、すべてブリッジIPアドレスに転送すること、イコール、ブリッジ化されているLAN側（lan1）に転送することになる、、、と理解。

#### L2TPv3ヘッダ
Router ID（192.168.2.xxx）レイヤと捉えることができるかもしれない。

#### 最後に
上述した、L2TPv3のクッキーサイズのこともあり、異なるメーカー間のSite間VPNは難しそう。

EOF