VPNのためにPPPoEを追加契約した

次のエントリに書いた通り、自宅のネットが遅くて仕事にならなかったのでIPv4 PPPoEからIPv6 IPoE + DS-Liteに乗り換えて問題は解消した。PPPoEが詰まって速度が出ない人は試す価値がある。

fushiroyama.hatenablog.com

ところで上記エントリの最後でちょっと触れたが、この方法ではこれまで利用できていたネットボランチDNSが使えなくなる1。ネットボランチDNS唐突にYAMAHAルータ愛を吐露するにも書いたが、無料かつメンテナンスフリーなDDNSのようなものだ。自宅サーバを公開したり拠点間VPNを固定IPなしに実現するのに非常に便利だ。 近々引っ越しの予定があり、拠点間VPNを構築する必要があるため、悩んだのだが安直にPPPoEを追加で再契約してIPoEと両立させることにした。

ということでいきなりRTX1200での設定例を載せる。IPoE + DS-Liteを使いつつ特定の用途のためにPPPoEを追加するという人は余り多いとはとても思えないが、インターネットに情報を載せておくことで誰かが助かるかもしれないのでとりあえず掲載する。

(2021-01-18追記:フィルタの設定が間違っていてRTX1200からネットボランチDNSまでパケットが届かない設定でした。既に設定を修正済みです。)

administrator password *
login user papa *
security class 2 off off off
console character ascii
console prompt "[RTX1200] "
login timer 3600
ip route default gateway tunnel 1 filter 1 3 gateway pp 1 filter 2
ipv6 prefix 1 ra-prefix@lan2::/64
ip lan1 address 192.168.11.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 1010 1011 1012 2000
ipv6 lan2 secure filter out 3000 dynamic 100 101 102 103 104 105 106
ipv6 lan2 dhcp service client ir=on
ip lan3 address 192.168.22.1/24
pp select 1
 pp name PPPoE
 pp always-on on
 pppoe use lan2
 pppoe auto connect on
 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 mtu 1454
 ip pp nat descriptor 1
 netvolante-dns hostname host pp server=1 *
 pp enable 1
tunnel select 1
 tunnel name DS-Lite
 tunnel encapsulation ipip
 tunnel endpoint address 2404:8e00::feed:100
 tunnel enable 1
ip filter 1 pass 192.168.11.0/24 *
ip filter 2 pass 192.168.22.0/24 *
ip filter 3 pass 0.0.0.0 * * * *
nat descriptor type 1 masquerade
nat descriptor address outer 1 ipcp
nat descriptor address inner 1 192.168.22.1-192.168.22.254
nat descriptor masquerade incoming 1 discard
nat descriptor masquerade static 1 1 192.168.22.1 udp 500
nat descriptor masquerade static 1 2 192.168.22.1 esp
nat descriptor masquerade static 1 3 192.168.22.200 tcp 22
nat descriptor masquerade static 1 4 192.168.22.200 tcp www
nat descriptor masquerade static 1 5 192.168.22.200 tcp https
nat descriptor masquerade static 1 6 192.168.22.200 tcp 8080
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
telnetd service off
dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.11.100-192.168.11.199/24 expire 12:00 maxexpire 12:00
dhcp scope 2 192.168.22.100-192.168.22.199/24 expire 12:00 maxexpire 12:00
dns server dhcp lan2
sshd service on
sshd host lan1
sshd host key generate *

簡単に解説する。 lan2はインターネットに出ていく経路でIPoEとPPPoEで共有する。 lan1は192.168.11.0/24のLANでここにぶら下がったクライアントはtunnel (IPoE + DS-Lite)でインターネットに出ていく。 lan3は192.168.22.0/24のLANでここにぶら下がったクライアントはpp1 (PPPoE)でインターネットに出ていく。pp1はネットボランチDNSでホスト名をもらっている。VPNの対向ではこれを目掛けて接続する。 また、lan3はstatic natでホームゲートウェイを公開している。これはちょっとしたプログラムを動かしたり自宅ネットワークへの踏み台として利用しており、我が家では伝統的にRaspberry Piが担当している。

設定の肝は

ip route default gateway tunnel 1 filter 1 3 gateway pp 1 filter 2
...
ip filter 1 pass 192.168.11.0/24 *
ip filter 2 pass 192.168.22.0/24 *
ip filter 3 pass 0.0.0.0 * * * *

の部分だけで、ここでIPに応じてgatewayを切り替えている。filter 3はルータ自身がWANで出るときのIPで、これを設定しないとインターネットへの経路がないことからネットボランチDNS等に到達できない。

余談だがフィルタの部分はたとえば次のようにkeepaliveを設定することで片方の経路からインターネットに出られなくなったらもう片方の経路から出ると言った設定も容易く行える。ISPを複数契約してマルチホーミングしたり、光ファイバの系統すら冗長化することも可能だろう。

ip route default gateway pp 1 keepalive 1 gateway pp 2 weight 0
ip keepalive 1 icmp-echo 5 3 8.8.8.8

個人的にこのフィルターの柔軟さなどがYAMAHAルータの魅力である。YAMAHAルータの魅力はいくらでもしゃべれるがこんなことをしている場合ではないのでこのへんで。

ちなみに今回はVPNのためだけに安直にPPPoEを追加契約したので、もっとよいアイディアがあったら是非コメントください。


  1. これは僕が利用しているルータがRTX1200であるため。RTX1210ではIPv6対応のネットボランチDNSが使えるらしい。欲しい…