Windows10とヤマハのルータ間でL2TP接続をする

WindowsからヤマハのルータにVPN接続する必要があり、色々設定していたのですがかなりハマったのでそのメモです。
似たような記事はネットに大量にありますが、どれもちょっとずつ参考になったり自分のケースとは違ったりで、みなそれぞれに苦戦しているようです。
ですので、私の場合はこれで動いたよという例として。

## 環境

#### ルータ

機種: RTX810
ファーム: Rev.11.01.33

#### クライアント

Windows10 Pro

## やったこと

### ルータ側設定

#### pp設定

```
### PP anonymous ###

pp select anonymous
 pp name ${l2tp-name}
 pp bind tunnel3
 pp auth request mschap-v2
 pp auth username ${vpn-user} ${pass}
 ppp ipcp ipaddress on
 ppp ipcp msext on
 ip pp remote address pool dhcp
 ip pp mtu 1258
 pp enable anonymous
```

- bindがtunnel3となっているのは他にIPsec設定が2ついるため
- auth request は mschap-v2にしました

#### tunnel設定

```
### TUNNEL 3 ###

tunnel select 3
 tunnel encapsulation l2tp
 ipsec tunnel 3
  ipsec sa policy 3 3 esp aes-cbc sha-hmac
  ipsec ike keepalive log 3 off
  ipsec ike keepalive use 3 off
  ipsec ike local address 3 192.168.0.1
  ipsec ike nat-traversal 3 on
  ipsec ike pre-shared-key 3 text ${shared-key}
  ipsec ike remote address 3 any
 l2tp tunnel auth off
 l2tp keepalive use on
 l2tp syslog on
 ip tunnel tcp mss limit auto
 tunnel enable 3
```

- 認証アルゴリズムは sha-hmac、暗号アルゴリズムはaes-cbcをそれぞれ選択
- ipsec ike local addressにルータの内側アドレスを記載する設定を追加

#### NATディスクリプタ

```
nat descriptor masquerade static 1000 1 192.168.0.1 udp 500
nat descriptor masquerade static 1000 2 192.168.0.1 esp
nat descriptor masquerade static 1000 3 192.168.0.1 udp 1701
nat descriptor masquerade static 1000 4 192.168.0.1 udp 4500
```

#### フィルタ

```
ip filter 200080 pass * 192.168.0.1 udp * 500
ip filter 200081 pass * 192.168.0.1 esp * *
ip filter 200082 pass * 192.168.0.1 udp * 1701
ip filter 200083 pass * 192.168.0.1 udp * 4500

pp select 1
 ip pp secure filter in ${既存のフィルタ} 200080 200081 200082 200083
```

- PP1にudpの指定ポートのパケットを通過するように設定

#### その他の設定

```
ipsec auto refresh on
ipsec transport 3 3 udp 1701

l2tp service on
```

#### ネットボランチDNSの登録

予めやっておきました。

`{host名}.xxx.netvolante.jp` でルータへの経路が確保できるのはありがたいですね。

#### ファームウェアの更新

ファームウェアが古いとL2TP周りの不具合がある場合もあるとのことで最新化しました。

比較としてiPhoneからのL2TP接続も試したりしてたのですが、ファームの更新前だと接続エラーになっていたものがファームの更新で接続できるようになったので、まずは最新化するのがよさそうです。

### Windows側設定

#### 基本のVPN接続を作成

[設定]→[ネットワークとインターネット]→[VPN] から、[VPN接続を追加する]を選んで追加します。

- サーバ名: ネットボランチDNSに登録したアドレス
- VPNの種類: [事前共有キーを使った L2TP/IPsec]
- 事前共有キー、ユーザ名、パスワードはそれぞれルータ側に設定したもの

くらいでしょうか。

#### アダプターの設定

- 設定メニュー右の関連設定にある「アダプターのオプションを変更する」を開く
- VPNを右クリックしてプロパティを開く
- プロパティのセキュリティタブを開く

![vpn-property.png](https://qiita-image-store.s3.amazonaws.com/0/204890/49967bc3-5d3a-fc5c-e9f9-35f7c7a52df1.png)

- データの暗号化を「暗号化が必要」を選択する
- 「次のプロトコルを許可する」を選び、MS-CHAP v2にチェックを入れる
    - 今回はルータ側がmschap-v2にしてるのでこちらだけでも恐らくよいはず
    - 色々試していたのでCHAPも選択してある
- となりの「ネットワーク」タブを開き、IPv6のチェックを外す
    - 外さなくてもいけたかもしれない
    - 「ハマりポイント」としてる記事がいくつかあったので念の為外した(今回必要なかったので)

#### レジストリの設定

- レジストリエディタを開く
- "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent"を開く
- [編集]→[新規]→[DWARD(32ビット値)]を選択し、レジストリ項目を作成する
    - 値の名前: AssumeUDPEncapsulationContextOnSendRule
    - 値のデータ: 2

#### ファイアウォール

- Windows Defender ファイアウォールを開く
- [Windows Defender ファイアウォールを介したアプリまたは機能を許可」を開く
- [ルーティングとリモートアクセス]に許可を追加する

![firewall.png](https://qiita-image-store.s3.amazonaws.com/0/204890/5e6878a3-ceb3-97c7-35bc-6fe138bd6338.png)

#### NATトラバーサルが有効になるように設定

- コマンドプロンプトを管理者権限で起動
- 以下のコマンドを実行

```
C:\>netsh advfirewall set global ipsec ipsecthroughnat serverandclientbehindnat
```

### ファイアウォール設定やレジストリ修正を反映するようにWindowsを再起動

これで接続できるようになりました。