はじめてのヤマハルータ_RTX830でv6プラス・IPv4 PPPoE併用設定してみた

# 結論
v6プラス・IPv4 PPPoE併用は成功。
所要時間4時間くらい。
フィルタ型ルーティングにより特定のIPアドレスをPPPoE接続する。
v6プラスの速度は以前と比べてほぼ2.5倍。
DNS周りの知識の課題が残る。

以下導入のログ的なもの。

# はじめに
プロバイダのIPv4 over IPv6サービスがv6プラス（MAP-E方式）になった。
スプラトゥ○ンしてたら、毎試合ごとに接続が切れる。
Switch本体の接続テストでNATタイプがDになったりBになったり不安定。（NATタイプの違いもよくわからない…）

→ゲーム機はPPPoE接続にしよう。
ということでこういう環境構成にしていた。
―[ONU]―[WG1200HP_PPPoE設定_IPv6ブリッジ]―[WN-AX1167GR_v6プラス]―[PC]
　　　　　　└[ゲーム機（Switch）]
無線は基本的にはWN-AX1167GRにつないでv6プラスで通信する。
（Switch本体取り外してゲームするときは基本オフゲーだから別にPPPoEとかこだわらなくていい）

~~Switchってネットワーク機器のスイッチと綴りが一緒だから書きにくい~~
この環境でわりと安定していた。


ところで、MAP-EはNATステートレスとかいうので自分のルータ性能に依存するらしい。
＋
高性能で、設定を自由にいじれると以前から耳にしていたヤマハルータを触ってみたい。
→（ネットワーク初心者のくせに）ヤマハルータでv6プラスとIPv4 PPPoEを併用設定してみよう。

（ついでにQiitaへの投稿も初）

速度がどれくらいあがるかあんまり期待しないようにしつつ実は期待する。

# 作りたいNW環境
192.168.100.0/24ネットワーク

―[ONU]―[RTX830(.1)]―lan1.1:[PC(.10)]
　　　　　　　　　　├―lan1.2:[ゲーム機(Switch)(.20)] 
　　　　　　　　　　└―lan1.3:[WG1200HP_ブリッジモード]
ひかり電話なし。
ゲーム機(Switch)(.20)だけPPPoE接続、ほかはv6プラス接続。

Wifi用の無線ルータはWG1200HPでもWN-AX1167GRでもどちらでもよかったけど、ルータはNECだみたいな風潮があるのでWG1200HPにした。
あんまり性能詳しく知らないけど、どっちもそんなに変わらんだろう。スペック表見る限り、最大伝送速度は同じだった。伝送方式は違ってたけどあんまり調べていない。

# GUIでPPPoE設定

Web GUIだとフィルタ周りの推奨設定をやってくれるので、まずGUIでPPPoE設定をいれてみる。
どういうフィルタが必要なのかとかよくわからないし。

かんたん設定>プロバイダー接続
PPインターフェースのIPアドレス：自動取得する
DNSサーバーの設定：プロバイダーから自動取得
IPフィルターの設定：推奨のIPフィルターを設定する

http://ipv6-test.com/
で確認すると、IPv4のみSupportedになったのを確認した。

GUI右上のCONFIGボタンから現在のconfigを見られる。
設定されたconfigは、事前に勉強していたPPPoE設定とけっこう違っていた。

```
ip route default gateway pp 1
ip lan1 address 192.168.100.1/24
pp select 1
 description pp PPPoE
 pp keepalive interval 30 retry-interval=30 count=12
 pp always-on on
 pppoe use lan2
 pppoe auto disconnect off
 pp auth accept pap chap
 pp auth myname (ユーザ) (パスワード)
 ppp lcp mru on 1454
 ppp ipcp ipaddress on
 ppp ipcp msext on
 ppp ccp type none
 ip pp secure filter in 200003 200020 200021 200022 200023 200024 200025 200030 200032
 ip pp secure filter out 200013 200020 200021 200022 200023 200024 200025 200026 200027 200099 dynamic 200080 200081 200082 200083 200084 200085 200098 200099
 ip pp nat descriptor 1000
 pp enable 1
ip filter 200000 reject 10.0.0.0/8 * * * *
ip filter 200001 reject 172.16.0.0/12 * * * *
ip filter 200002 reject 192.168.0.0/16 * * * *
ip filter 200003 reject 192.168.100.0/24 * * * *  //1020番と同じ
ip filter 200010 reject * 10.0.0.0/8 * * *
ip filter 200011 reject * 172.16.0.0/12 * * *
ip filter 200012 reject * 192.168.0.0/16 * * *
ip filter 200013 reject * 192.168.100.0/24 * * *
ip filter 200020 reject * * udp,tcp 135 *
ip filter 200021 reject * * udp,tcp * 135
ip filter 200022 reject * * udp,tcp netbios_ns-netbios_ssn *
ip filter 200023 reject * * udp,tcp * netbios_ns-netbios_ssn
ip filter 200024 reject * * udp,tcp 445 *
ip filter 200025 reject * * udp,tcp * 445
ip filter 200026 restrict * * tcpfin * www,21,nntp
ip filter 200027 restrict * * tcprst * www,21,nntp
ip filter 200030 pass * 192.168.100.0/24 icmp * *
ip filter 200031 pass * 192.168.100.0/24 established * *
ip filter 200032 pass * 192.168.100.0/24 tcp * ident
ip filter 200033 pass * 192.168.100.0/24 tcp ftpdata *
ip filter 200034 pass * 192.168.100.0/24 tcp,udp * domain
ip filter 200035 pass * 192.168.100.0/24 udp domain *
ip filter 200036 pass * 192.168.100.0/24 udp * ntp
ip filter 200037 pass * 192.168.100.0/24 udp ntp *
ip filter 200099 pass * * * * *
ip filter 500000 restrict * * * * *
ip filter dynamic 200080 * * ftp
ip filter dynamic 200081 * * domain
ip filter dynamic 200082 * * www
ip filter dynamic 200083 * * smtp
ip filter dynamic 200084 * * pop3
ip filter dynamic 200085 * * submission
ip filter dynamic 200098 * * tcp
ip filter dynamic 200099 * * udp
nat descriptor type 1000 masquerade
dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.100.2-192.168.100.191/24
dns host lan1
dns server pp 1
dns server select 500001 pp 1 any . restrict pp 1
dns private address spoof on
```
高速回線（光ファイバー）を利用する : コマンド設定
https://network.yamaha.com/setting/router_firewall/internet/internet_connect/opticalfiber_command
ではフィルタは1000番台を使っているが、
GUI設定では200000番台を使っている。
番号が違うだけで中身は同じというフィルタも多いが、適用するフィルタの数がGUIのconfigのほうが多い等の違いもある。

あとで気がつくが、GUI作成のフィルタの200000番台の番号は、次に設定するIPv4 MAP-Eのフィルターにも一部使われていて、GUI作成のフィルタを使えばフィルタを流用してconfigをスリム化できるのではないかと思う。
中身が同じ1000番台と200000番台のフィルタの重複記述が無くなるという意味で。
~~単に公式サイトの設定例が古いんじゃ？~~

また最後まで課題となるDNSのconfigは以下のものがGUIによって作成された。

```
dns host lan1
dns server pp 1
dns server select 500001 pp 1 any . restrict pp 1
dns private address spoof on
```
特に3行目のコマンドの意味があんまりよくわかっていないのが課題。

# v6プラス設定例を流し込む
2018/06/15 v6プラス対応
http://www.rtpro.yamaha.co.jp/RT/docs/v6plus/index.html

より、GUIで設定はできないが、管理 > 保守 > コマンド実行から、コマンドを流し込む。

その前にnatディスクリプタ番号がGUI作成PPPoE設定で1000番を使われていて、v6プラスで流し込む番号とかぶっているので1番にしておく
（かぶっていても問題あるのかないのかは知らない）

```
nat descriptor type 1 masquerade
pp select 1
ip pp nat descriptor 1 
```

流し込むコマンドはv6プラス設定例そのまま。
ゲートウェイ設定は以下に上書きされるのでPPPoE接続じゃなくなるはずだ。

```
ip route default gateway tunnel 1
```


# つながらない
http://ipv6-test.com/
にアクセスしてみると、つながらない。
エラーメッセージ記録するの忘れました。
タイムアウトだったような。

ルータ再起動したりしてみましたが、やはりつながりません。
ここではDNSに気づかず、
GUIとCUIを混ぜたのがいけなかったのかなあと思い、初期化し、PPPoEもCUIで流し込むことにした。


# CUIでPPPoE
https://network.yamaha.com/setting/router_firewall/internet/internet_connect/opticalfiber_command
の設定例は、192.168.0.0/24ネットワークなので、192.168.100.0/24ネットワークになるようにフィルタの部分を修正して流し込んだ。

## DNS周りに気づく
流し込む際、DNSの設定例は

```
# DNSの設定
dns server (ISPより指定されたDNSサーバーのIPアドレス)
dns private address spoof on
```
なのだが、ここでDNS周りのconfigが良くなかったのではと気づく。

先程初期化する前のDNS configは、GUI作成PPPoE configのものに加えv6プラス設定例のconfigが追加されたので以下になっていた。

```
dns host lan1
dns server pp 1
dns server dhcp lan2 // v6プラス分
dns server select 500001 pp 1 any . restrict pp 1
dns private address spoof on
```

dnsのコマンドリファレンスを見なおすと
http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/dns/dns_chapter.html

> コマンドリファレンス27章 DNS
DNS の機能を使用するためには、dns server 等のコマンドで、問い合わせ先DNS サーバーを設定しておく必要があります。また、この設定はDHCP サーバー機能において、DHCP クライアントの設定情報にも使用されます。問い合わせ先DNS サーバーを設定するコマンドは複数存在しますが、これらのうち複数のコマンドで問い合わせ先DNS サーバーが設定されている場合、利用できる中で最も優先順位の高いコマンドの設定が使用されます。各コマンドによる設定の優先順位は、高い順に以下の通りです。
1. dns server select コマンド
2. dns server コマンド
3. dns server pp コマンド
4. dns server dhcp コマンド
なお、これらのコマンドで問い合わせ先DNS サーバーが全く設定されていない場合でも、DHCP サーバーから取得したDNS サーバーが存在すれば、そちらが自動的に使用されます。

つまり

```
dns host lan1
dns server pp 1 //無効
dns server dhcp lan2 // 無効
dns server select 500001 pp 1 any . restrict pp 1 // 有効
dns private address spoof on
```
となって`dns server select 500001 pp 1 any . restrict pp 1`だけ有効になっていたということだ。

正直これが課題になるのだが、コマンドリファレンスの日本語の意味がわからない。
v6プラスの設定例では`dns server dhcp lan2`だけなのだから、
これだけでよくね？と思った。

実際にdnsのconfigを以下だけにしてPPPoE設定とv6プラス設定を流し込む

```
dns host lan1
dns server dhcp lan2
dns private address spoof on
```

http://ipv6-test.com/
に正常にアクセスでき、
`ip route default gateway pp 1`のときはIPv4 PPPoE + IPv6 IPoE
`ip route default gateway tunnel 1`のときはv6プラスで接続できていた。

結果的にうまくいってるからDNSのconfigはこのままでいく。
つまりGUI自動作成のDNS設定は捨てることになる。

# configを統合
上にも書いたがPPPoE設定例とGUI作成PPPoEではフィルタの番号が違ったり適用フィルタの数が違ったりしている。
また以下のconfigはGUI作成PPPoEでは記述がなく、コマンドリファレンスを見ると初期値がonなので不要だったりした。

```
ip filter source-route on // 初期値onなので不要だった
ip filter directed-broadcast on //初期値onなので不要だった
```

なのでPPPoE設定は、DNS以外についてはGUI作成PPPoE設定を使うことにした。

GUIのかんたん設定ではなく、コマンドとして流し込む。


# フィルタ型ルーティング

ゲーム機のIPアドレスだけPPPoE接続させるにあたり、フィルタ型ルーティングが使えると知った。

参考にさせていただきました
>NVR500でDS-LiteとIPv4（固定）の2回線を共存させる設定メモ
https://qiita.com/ikuwow/items/cea6ecfa4341be2778bf

今回ゲーム機(Switch)は192.168.100.20にするので
フィルタを作ってゲートウェイに適用する。

```
ip filter 600000 pass 192.168.100.20 * * * *
ip route default gateway pp 1 filter 600000 gateway tunnel 1
```

# DHCP固定割当

家庭LANの管理にあたり端末それぞれでIPアドレス固定するより、ルータでDHCP固定割当するほうがラクだからという理由。

今回はPC(.10)とゲーム機(.20)を固定割当する
dhcp scopeの範囲内であることを確認してコマンド実行

```
dhcp scope bind 1 192.168.100.10 ethernet (PCのMACアドレス)
dhcp scope bind 1 192.168.100.20 ethernet (ゲーム機のMACアドレス)
```
ちなみにSwitchの場合本体のMACアドレスじゃなくてUSB-LANアダプタのMACアドレスを指定する。

PCコマンドプロンプトで

```
> ipconfig /release
> ipconfig /renew
```

によりIPアドレスが192.168.100.10が振られていることを確認。

# ゲーム機本体のIPアドレス固定

上の状態でゲーム機（Switch）の接続テストを行ったが、JPNEのグローバルIPアドレスが降ってきていて、PPPoE接続できていないことがわかった。

上記参考サイトにも言及があったが、フィルタ型ルーティングの場合は端末側でIPアドレスを固定しないとダメなようだ。

Switch本体でIPアドレスを設定してみると、ISPのグローバルIPアドレスが降ってきていて、PPPoE接続できていることが確認できた。

config内の
`dhcp scope bind 1 192.168.100.20 ethernet (ゲーム機のMACアドレス)`は管理をラクにするためのDHCP固定割当としては意味のない記述になったが、DHCPで.20が重複しないように記述しておくことにした。

# 結果

<details><summary>最終的なconfig</summary><div>

```
ip route default gateway pp 1 filter 600000 gateway tunnel 1
ipv6 prefix 1 ra-prefix@lan2::/64
ip lan1 address 192.168.100.1/24
ipv6 lan1 address ra-prefix@lan2::1/64
ipv6 lan1 rtadv send 1 o_flag=on
ipv6 lan1 dhcp service server
ipv6 lan2 secure filter in 200030 200031 200038 200039
ipv6 lan2 secure filter out 200099 dynamic 200080 200081 200082 200083 200084 200098 200099
ipv6 lan2 dhcp service client ir=on
pp select 1
 description pp PPPoE
 pp keepalive interval 30 retry-interval=30 count=12
 pp always-on on
 pppoe use lan2
 pppoe auto disconnect off
 pp auth accept pap chap
 pp auth myname （ユーザ）（パスワード）
 ppp lcp mru on 1454
 ppp ipcp ipaddress on
 ppp ipcp msext on
 ppp ccp type none
 ip pp secure filter in 200003 200020 200021 200022 200023 200024 200025 200030 200032
 ip pp secure filter out 200013 200020 200021 200022 200023 200024 200025 200026 200027 200099 dynamic 200080 200081 200082 200083 200084 200085 200098 200099
 ip pp nat descriptor 1
 pp enable 1
tunnel select 1
 description tunnel MAP-E
 tunnel encapsulation map-e
 ip tunnel mtu 1460
 ip tunnel secure filter in 200030 200039
 ip tunnel secure filter out 200099 dynamic 200080 200082 200083 200084 200098 200099
 ip tunnel nat descriptor 1000
 tunnel enable 1
ip filter 200000 reject 10.0.0.0/8 * * * *
ip filter 200001 reject 172.16.0.0/12 * * * *
ip filter 200002 reject 192.168.0.0/16 * * * *
ip filter 200003 reject 192.168.100.0/24 * * * *
ip filter 200010 reject * 10.0.0.0/8 * * *
ip filter 200011 reject * 172.16.0.0/12 * * *
ip filter 200012 reject * 192.168.0.0/16 * * *
ip filter 200013 reject * 192.168.100.0/24 * * *
ip filter 200020 reject * * udp,tcp 135 *
ip filter 200021 reject * * udp,tcp * 135
ip filter 200022 reject * * udp,tcp netbios_ns-netbios_ssn *
ip filter 200023 reject * * udp,tcp * netbios_ns-netbios_ssn
ip filter 200024 reject * * udp,tcp 445 *
ip filter 200025 reject * * udp,tcp * 445
ip filter 200026 restrict * * tcpfin * www,21,nntp
ip filter 200027 restrict * * tcprst * www,21,nntp
ip filter 200030 pass * 192.168.100.0/24 icmp * *
ip filter 200031 pass * 192.168.100.0/24 established * *
ip filter 200032 pass * 192.168.100.0/24 tcp * ident
ip filter 200033 pass * 192.168.100.0/24 tcp ftpdata *
ip filter 200034 pass * 192.168.100.0/24 tcp,udp * domain
ip filter 200035 pass * 192.168.100.0/24 udp domain *
ip filter 200036 pass * 192.168.100.0/24 udp * ntp
ip filter 200037 pass * 192.168.100.0/24 udp ntp *
ip filter 200039 reject * *
ip filter 200099 pass * * * * *
ip filter 500000 restrict * * * * *
ip filter 600000 pass 192.168.100.20 *
ip filter dynamic 200080 * * ftp
ip filter dynamic 200081 * * domain
ip filter dynamic 200082 * * www
ip filter dynamic 200083 * * smtp
ip filter dynamic 200084 * * pop3
ip filter dynamic 200085 * * submission
ip filter dynamic 200098 * * tcp
ip filter dynamic 200099 * * udp
nat descriptor type 1 masquerade
nat descriptor type 1000 masquerade
nat descriptor address outer 1000 map-e
ipv6 filter 200030 pass * * icmp6 * *
ipv6 filter 200031 pass * * 4
ipv6 filter 200038 pass * * udp * 546
ipv6 filter 200039 reject * *
ipv6 filter 200099 pass * * * * *
ipv6 filter dynamic 200080 * * ftp
ipv6 filter dynamic 200081 * * domain
ipv6 filter dynamic 200082 * * www
ipv6 filter dynamic 200083 * * smtp
ipv6 filter dynamic 200084 * * pop3
ipv6 filter dynamic 200098 * * tcp
ipv6 filter dynamic 200099 * * udp
dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.100.2-192.168.100.191/24
dhcp scope bind 1 192.168.100.10 ethernet (PC MAC)
dhcp scope bind 1 192.168.100.20 ethernet (Switch MAC)
dns host lan1
dns server dhcp lan2
dns private address spoof on

```
</div></details>
フィルタ設定とかまずいですよ！という点があれば教えてください（GUI作成と公式サイトの設定なので大丈夫だとは思うが）。
実際はスマホの固定割当とか追記してます。

結果としてはゲーム機からはPPPoEで、それ以外からはv6プラスで接続することに成功しました。

速度はおよそ2.5倍になり、600Mbps超えを達成しました。
ルーターを変えるだけでこんなに早くなるとは。すごい！

# 感想
初めてヤマハルータ触った感想。
今までのルータは設定を変えたら再起動が必要だったけど、コマンド流してsaveするだけ（GUIからコマンド流す場合実行ボタンだけ）で適用できるのがラクだなあと思った。

というか最初は再起動しなくてもいいのかなと不安になった。

# 今後の課題
DNS周りの知識不足。

```
dns server select 500001 pp 1 any . restrict pp 1
```

この意味はいまだにわかっていません。
コマンドリファレンスの日本語がわからないのはネットワーク関係の知識不足としか言いようがない。
せっかくヤマハルータ買ったんだし使いこなせるように勉強します。