YAMAHAのRTX1200でL2TP/IPsecがうまく接続できないし、つながっても想定された経路通らない...どうして...

# TL;DR  
- 私「あー、久々にコンフィグいじったろ」
- るーた「お、メンテかなぁ」
- 私「プロバイダ２つあるし、パケット転送フィルタでもしたろかな。」
- るーた「あ、ちょっとまって....あああああああ」
- 私「あるぇ、VPN繋がんね？？？」
- るーた「わいしーらね」

# 環境
- Roter : YAMAHA RTX1200
- Firmware :  
  ```
  RTX1200 Rev.10.01.78 (Wed Nov 13 16:29:42 2019)
  ```

# 何じゃその転送フィルタとかいうの

http://www.rtpro.yamaha.co.jp/RT/docs/forward-filter/

サイト内を抜粋しますが。このようなものです。
>1. 概要  
パケット転送フィルターは、 ip filterコマンドで定義したフィルターとの比較にもとづいて、 パケットの転送先を決める機能です。 従来のフィルター型ルーティングと似ていますが、 次の2点が大きく異なります。
  - パケット転送フィルターは、ルーティングの処理とは独立に動作します。 静的経路や動的経路の設定とはまったく関係がありません。
  - フィルタ型ルーティングではゲートウェイのロードバランスや hide指定が可能ですが、パケット転送フィルタでは対応していません。 
パケット転送フィルターの処理の位置づけは次のようになっています。
 
- イメージ

![ForwardFilter](http://www.rtpro.yamaha.co.jp/RT/docs/forward-filter/fig01.png)


...まぁ要するにルールに一致するパケットを転送設定された方向に投げますよと。そういうことですね。
まぁ、ここで書かれているようにフィルタ型ルーティングしろよっていえばまぁそれはそれでありなんですけどね。


# 実際のフィルタ設定部分を御覧ください。
まぁ、コンフィグいじってるわけなのでコンフィグ見に行きますわね。
設定にくだらんコメント入れてんじゃねぇぞオラァってヤクザみたいなこと言わないで泣いてしまいます。

## Config
```
# IP filter configure

## Standard configure
  ip filter source-route on
  ip filter directed-broadcast on

## 1 - 1000 Wellknown
  ip filter 1 pass * * icmp
  
## 1000 - 1499 NetBios blocker
  ip filter 1000 reject * * udp,tcp 135 *
  ip filter 1001 reject * * udp,tcp * 135
  ip filter 1002 reject * * udp,tcp netbios_ns-netbios_dgm *
  ip filter 1003 reject * * udp,tcp * netbios_ns-netbios_dgm
  ip filter 1004 reject * * udp,tcp netbios_ssn *
  ip filter 1005 reject * * udp,tcp * netbios_ssn
  ip filter 1006 reject * * udp,tcp 445 *
  ip filter 1007 reject * * udp,tcp * 445

## 1500 - 1999 Malformed packet block
  ip filter 1500 reject 10.0.0.0/8 * * * *
  ip filter 1501 reject 172.16.0.0/12 * * * *
  ip filter 1502 reject 192.168.0.0/16 * * * *


## 2000 L2TP/IPsecVPN 
  ip filter 2000 pass * 192.168.100.1 ah  * *
  ip filter 2001 pass * 192.168.100.1 esp * *
  ip filter 2002 pass * 192.168.100.1 udp * 500
  ip filter 2003 pass * 192.168.100.1 udp * 4500
  ip filter 2004 pass * 192.168.100.1 udp * 1701

## 100000 - 199999 192.168.100.0/24 packet filter
  ip filter 100000 pass * 192.168.100.127 tcp * 443
  ip filter 100001 pass * 192.168.100.127 udp * 443

## 500000 IP filter routing
  # 192.168.100.0-7
  ip filter 500000 pass  192.168.100.0/29  * * * *
  # 192.168.100.8-15
  ip filter 500001 pass  192.168.100.8/29  * * * *
  # 192.168.100.16-23
  ip filter 500002 pass  192.168.100.16/29  * * * *
  # 192.168.100.24-31
  ip filter 500003 pass  192.168.100.24/29  * * * *
  # 192.168.100.32-39
  ip filter 500004 pass  192.168.100.32/29  * * * *
  # 192.168.100.40-47
  ip filter 500005 pass  192.168.100.40/29  * * * *
  # 192.168.100.48-55
  ip filter 500006 pass  192.168.100.48/29  * * * *
  # 192.168.100.56-63
  ip filter 500007 pass  192.168.100.56/29  * * * *
  # 192.168.100.64-71
  ip filter 500008 pass  192.168.100.64/29  * * * *
  # 192.168.100.72-79
  ip filter 500009 pass  192.168.100.72/29  * * * *
  # 192.168.100.80-87
  ip filter 500010 pass  192.168.100.80/29  * * * *
  # 192.168.100.88-95
  ip filter 500011 pass  192.168.100.88/29  * * * *
  # 192.168.100.96-103
  ip filter 500012 pass  192.168.100.96/29  * * * *
  # 192.168.100.104-111
  ip filter 500013 pass  192.168.100.104/29  * * * *
  # 192.168.100.112-119
  ip filter 500014 pass  192.168.100.112/29  * * * *
  # 192.168.100.120-127
  ip filter 500015 pass  192.168.100.120/29  * * * *
  # 192.168.100.128-254
  ip filter 500016 pass  192.168.100.128/25  * * * *
  
  # Forward to pp 2
 
  ip forward filter 100 2 gateway pp 2 filter 500001   
  ip forward filter 100 3 gateway pp 2 filter 500002 
  ip forward filter 100 4 gateway pp 2 filter 500003 
  ip forward filter 100 5 gateway pp 2 filter 500004 
  ip forward filter 100 6 gateway pp 2 filter 500005 
  ip forward filter 100 7 gateway pp 2 filter 500006 
  ip forward filter 100 8 gateway pp 2 filter 500007 
  ip forward filter 100 9 gateway pp 2 filter 500008

 

  # 192.168.111.1-254
  ip filter 501000 pass  192.168.111.0/24  * * * *
    ip forward filter 200 1 gateway pp 2 filter 501000
##  All deny or All allow
  ip filter 999998 reject * 192.168.100.0/24 * * *
  ip filter 999999 pass * * * * *

## Dynamic Filter list
  ip filter dynamic 100 * * ftp
  ip filter dynamic 101 * * www
  ip filter dynamic 102 * * domain
  ip filter dynamic 103 * * smtp
  ip filter dynamic 104 * * pop3
  ip filter dynamic 105 * * submission
  ip filter dynamic 106 * * tcp
  ip filter dynamic 107 * * udp

# IPv6 filter configure 
  ipv6 filter 1010 pass   * * icmp6 * *
  ipv6 filter 1011 pass   * * tcp * ident
  ipv6 filter 1012 pass   * * udp * 546
  ipv6 filter 2000 reject * * * * *
  ipv6 filter 3000 pass   * * * * *
  ipv6 filter dynamic 100 * * ftp
  ipv6 filter dynamic 101 * * domain
  ipv6 filter dynamic 102 * * www
  ipv6 filter dynamic 103 * * smtp
  ipv6 filter dynamic 104 * * pop3
  ipv6 filter dynamic 105 * * tcp
  ipv6 filter dynamic 106 * * udp


# NAT
  nat descriptor type 1 nat-masquerade
  nat descriptor masquerade incoming 1 reject
  nat descriptor log on
  nat descriptor address outer 1 ipcp
  nat descriptor address inner 1 auto
  nat descriptor masquerade static 1 1 192.168.100.1 ah
  nat descriptor masquerade static 1 2 192.168.100.1 esp
  nat descriptor masquerade static 1 3 192.168.100.1 udp 500
  nat descriptor masquerade static 1 4 192.168.100.1 udp 4500
  nat descriptor masquerade static 1 5 192.168.100.127 tcp https
  nat descriptor masquerade static 1 6 192.168.100.127 udp https

```


## 上のConfig抜粋と説明

500000番台には、細かくIPレンジを設定して、転送フィルタ用に設定しています。
`8アドレス/ルール`で区切ってます。

```
## 500000 IP filter routing
  # 192.168.100.0-7
  ip filter 500000 pass  192.168.100.0/29  * * * *
  # 192.168.100.8-15
  ip filter 500001 pass  192.168.100.8/29  * * * *
  # 192.168.100.16-23
  ip filter 500002 pass  192.168.100.16/29  * * * *
  # 192.168.100.24-31
  ip filter 500003 pass  192.168.100.24/29  * * * *
  # 192.168.100.32-39
  ip filter 500004 pass  192.168.100.32/29  * * * *
  # 192.168.100.40-47
  ip filter 500005 pass  192.168.100.40/29  * * * *
  # 192.168.100.48-55
  ip filter 500006 pass  192.168.100.48/29  * * * *
  # 192.168.100.56-63
  ip filter 500007 pass  192.168.100.56/29  * * * *
  # 192.168.100.64-71
  ip filter 500008 pass  192.168.100.64/29  * * * *
  # 192.168.100.72-79
  ip filter 500009 pass  192.168.100.72/29  * * * *
  # 192.168.100.80-87
  ip filter 500010 pass  192.168.100.80/29  * * * *
  # 192.168.100.88-95
  ip filter 500011 pass  192.168.100.88/29  * * * *
  # 192.168.100.96-103
  ip filter 500012 pass  192.168.100.96/29  * * * *
  # 192.168.100.104-111
  ip filter 500013 pass  192.168.100.104/29  * * * *
  # 192.168.100.112-119
  ip filter 500014 pass  192.168.100.112/29  * * * *
  # 192.168.100.120-127
  ip filter 500015 pass  192.168.100.120/29  * * * *
  # 192.168.100.128-254
  ip filter 500016 pass  192.168.100.128/25  * * * *
```

`ip forward filter` を設定してLANからのパケットを転送します。

```
  # Forward to pp 2
  ip forward filter 100 2 gateway pp 2 filter 500001   
  ip forward filter 100 3 gateway pp 2 filter 500002 
  ip forward filter 100 4 gateway pp 2 filter 500003 
  ip forward filter 100 5 gateway pp 2 filter 500004 
  ip forward filter 100 6 gateway pp 2 filter 500005 
  ip forward filter 100 7 gateway pp 2 filter 500006 
  ip forward filter 100 8 gateway pp 2 filter 500007 
  ip forward filter 100 9 gateway pp 2 filter 500008

 ```

# おわかりいただけただろうか...
この設定。どうやらフィルタ設定的に書式通りではなかった...エラー出してくれ。
（今思い返せば、pp1から出ていくはずのマシンが突然pp2から出ていったりしていたのでおかしいと思わなければいけなかった！！）

よく見てみたら

パケット転送フィルターを設定するコマンドの書式は次のようになっています。  

>ip forward filter ID ORDER gateway GATEWAY filter FILTER_ID ... [ keepalive KEEPALIVE_ID ]  
IDはパケット転送フィルターの識別子です。 同じインターフェースに対して、複数のパケット転送フィルターを設定するときには、 それらのすべてに対して、同じ番号を指定します。  
ORDERは、評価の順番を示すものです。ルータは、 若い番号を持つ設定ほど先に評価します。典型的には、 次のようにいくつかのコマンドを順番に並べて設定します。  
  - ip forward filter 100 1 gateway tunnel 1 filter 11 12 13
  - ip forward filter 100 2 gateway tunnel 2 filter 21 22 23
  - ip forward filter 100 3 gateway tunnel 3 filter 31 32 33
FILTER_ID ...の部分は前に書いているものから順に評価します。

なるほど...ip forward filter のフィルタ番号は繋げるのか。これに合わせた書き方に変えてみよう...デフォゲに飛ぶ設定も一旦つくっておこう。

- 変更後  

```
 ip forward filter 100 1 gateway pp 1 filter 500000 500009 500010 500011 500012 500013 500014 500015 500016
 ip forward filter 100 2 gateway pp 2 filter 500001 500002 500003 500004 500005 500006 500007 500008 
```

# ip forward filterをまとめたらVPNにつながるようになった...が...
とりあえずVPNに接続失敗しまくる現象からは逃れられたのですが、問題がまた発生します。

## VPNクライアントにあたっているIPはpp1(接続プロパティ1)のレンジなのにpp2(接続プロパティ2)で外部に出てしまう。
ここでこの問題が出てしまいました。
どうやら、このパケット転送フィルタを経由していないらしい。
パケット転送フィルタが経由されない通信....もしかしてルータ自身のパケットのように扱われているのでは....


## もういっそのことフィルタ型ルーティングにしてやれ！
もう、いっそのことフィルタ型ルーティングしてやろうと決心。ip route 設定で以下のようにしました。  

- 変更前

```
 ip route default gateway pp 1 gateway pp 2 hide 
```

- 変更後

```
    ip route default gateway pp 1 gateway pp 2 filter 500001 gateway pp 2 filter 500002 gateway pp 2 filter 500003 gateway pp 2 filter 500004 gateway pp 2 filter 500005 gateway pp 2 filter 500006 gateway pp 2 filter 500007 gateway pp 2 filter 500008 

```


# 結果
パケット転送フィルタを使わずにフィルタルーティングにすることで、想定される正しいルールで通信が流れるようになりました。
YAMAHAルータ初心者なので、かなり初歩ミスのようなところ引っかかりまくりました...次からの教訓にしよう。
なんで突然ゲートウェイ変わってたのか多分わかった気がする...  

1. 最後に通信されたゲートウェイをデフォゲにしているっぽい?
1. VPNで接続した場合、本来のローカル接続とは違いルータが応答しているのでルータ自身のパケットになってしまっている。 
 

最終的な形

```
    ip routing process fast
    ip route default gateway pp 1 gateway pp 2 filter 500001 gateway pp 2 filter 500002 gateway pp 2 filter 500003 gateway pp 2 filter 500004 gateway pp 2 filter 500005 gateway pp 2 filter 500006 gateway pp 2 filter 500007 gateway pp 2 filter 500008 
    ip filter source-route on
    ip filter directed-broadcast on

~省略~

# IP filter configure

## Standard configure
  ip filter source-route on
  ip filter directed-broadcast on

## 1 - 1000 Wellknown
  ip filter 1 pass * * icmp
  
## 1000 - 1499 NetBios blocker
  ip filter 1000 reject * * udp,tcp 135 *
  ip filter 1001 reject * * udp,tcp * 135
  ip filter 1002 reject * * udp,tcp netbios_ns-netbios_dgm *
  ip filter 1003 reject * * udp,tcp * netbios_ns-netbios_dgm
  ip filter 1004 reject * * udp,tcp netbios_ssn *
  ip filter 1005 reject * * udp,tcp * netbios_ssn
  ip filter 1006 reject * * udp,tcp 445 *
  ip filter 1007 reject * * udp,tcp * 445

## 1500 - 1999 Malformed packet block
  ip filter 1500 reject 10.0.0.0/8 * * * *
  ip filter 1501 reject 172.16.0.0/12 * * * *
  ip filter 1502 reject 192.168.0.0/16 * * * *


## 2000 L2TP/IPsecVPN 
  ip filter 2000 pass * 192.168.100.1 ah  * *
  ip filter 2001 pass * 192.168.100.1 esp * *
  ip filter 2002 pass * 192.168.100.1 udp * 500
  ip filter 2003 pass * 192.168.100.1 udp * 4500
  ip filter 2004 pass * 192.168.100.1 udp * 1701

## 100000 - 199999 192.168.100.0/24 packet filter
  ip filter 100000 pass * 192.168.100.127 tcp * 443
  ip filter 100001 pass * 192.168.100.127 udp * 443

## 500000 IP filter routing
  # 192.168.100.0-7
  ip filter 500000 pass  192.168.100.0/29  * * * *
  # 192.168.100.8-15
  ip filter 500001 pass  192.168.100.8/29  * * * *
  # 192.168.100.16-23
  ip filter 500002 pass  192.168.100.16/29  * * * *
  # 192.168.100.24-31
  ip filter 500003 pass  192.168.100.24/29  * * * *
  # 192.168.100.32-39
  ip filter 500004 pass  192.168.100.32/29  * * * *
  # 192.168.100.40-47
  ip filter 500005 pass  192.168.100.40/29  * * * *
  # 192.168.100.48-55
  ip filter 500006 pass  192.168.100.48/29  * * * *
  # 192.168.100.56-63
  ip filter 500007 pass  192.168.100.56/29  * * * *
  # 192.168.100.64-71
  ip filter 500008 pass  192.168.100.64/29  * * * *
  # 192.168.100.72-79
  ip filter 500009 pass  192.168.100.72/29  * * * *
  # 192.168.100.80-87
  ip filter 500010 pass  192.168.100.80/29  * * * *
  # 192.168.100.88-95
  ip filter 500011 pass  192.168.100.88/29  * * * *
  # 192.168.100.96-103
  ip filter 500012 pass  192.168.100.96/29  * * * *
  # 192.168.100.104-111
  ip filter 500013 pass  192.168.100.104/29  * * * *
  # 192.168.100.112-119
  ip filter 500014 pass  192.168.100.112/29  * * * *
  # 192.168.100.120-127
  ip filter 500015 pass  192.168.100.120/29  * * * *
  # 192.168.100.128-254
  ip filter 500016 pass  192.168.100.128/25  * * * *
  
  # Forward to pp 2
  ip forward filter 100 1 gateway pp 1 filter 500000 500009 500010 500011 500012 500013 500014 500015 500016
  ip forward filter 100 2 gateway pp 2 filter 500001 500002 500003 500004 500005 500006 500007 500008 
 

  # 192.168.111.1-254
  ip filter 501000 pass  192.168.111.0/24  * * * *
    ip forward filter 200 1 gateway pp 2 filter 501000
##  All deny or All allow
  ip filter 999998 reject * 192.168.100.0/24 * * *
  ip filter 999999 pass * * * * *

## Dynamic Filter list
  ip filter dynamic 100 * * ftp
  ip filter dynamic 101 * * www
  ip filter dynamic 102 * * domain
  ip filter dynamic 103 * * smtp
  ip filter dynamic 104 * * pop3
  ip filter dynamic 105 * * submission
  ip filter dynamic 106 * * tcp
  ip filter dynamic 107 * * udp

# IPv6 filter configure 
  ipv6 filter 1010 pass   * * icmp6 * *
  ipv6 filter 1011 pass   * * tcp * ident
  ipv6 filter 1012 pass   * * udp * 546
  ipv6 filter 2000 reject * * * * *
  ipv6 filter 3000 pass   * * * * *
  ipv6 filter dynamic 100 * * ftp
  ipv6 filter dynamic 101 * * domain
  ipv6 filter dynamic 102 * * www
  ipv6 filter dynamic 103 * * smtp
  ipv6 filter dynamic 104 * * pop3
  ipv6 filter dynamic 105 * * tcp
  ipv6 filter dynamic 106 * * udp


# NAT
  nat descriptor type 1 nat-masquerade
  nat descriptor masquerade incoming 1 reject
  nat descriptor log on
  nat descriptor address outer 1 ipcp
  nat descriptor address inner 1 auto
  nat descriptor masquerade static 1 1 192.168.100.1 ah
  nat descriptor masquerade static 1 2 192.168.100.1 esp
  nat descriptor masquerade static 1 3 192.168.100.1 udp 500
  nat descriptor masquerade static 1 4 192.168.100.1 udp 4500
  nat descriptor masquerade static 1 5 192.168.100.127 tcp https
  nat descriptor masquerade static 1 6 192.168.100.127 udp https

```

# 結論

- 原因
  - パケット転送フィルタではルーティング設定のようにhide指定ができない（あぇぇぇぃしまったぁぁぁ気付かんかった）
  - ルーター自身のパケットはパケット転送フィルタにかからない（うわぁぁんちくせう）

### = **パケット転送フィルタはあんまり使うな**