最近はISPが提供するNTTフレッツを使用したIPv4 PPPoEなサービスでは、特定の時間での速度の低下がよく聞かれますが、それを回避する手段として、IPv6な回線にオフロードする手段が取り上げられるようになりました。
IIJなどが提供するDS-liteや、JPNEが提供するMAP-E(v6プラス)などがあります。
DS-liteなどはIPv4 over IPv6トンネルが設定できるルータであれば使用できるようで、結構YAMAHA RTXやNEC IXなどの設定が散見されます。
一方でMAP-E(v6プラス)ですが、サービス提供方法が特殊なせいで、設定できるルータが限定されています。ひかり電話を使用していればHGWがあるのでどれでも使用できますが、余計なランニングコストがかかってしまいます。
ですが、なんやら特定の条件?でv6プラスについては、固定IPサービスが使用できるようです。そして、この場合であれば、IPv4 over IPv6トンネルが設定できるルータであれば使用できるのです。
一番下に追記アリ(2017-11-12):
全体的に設定見直し(2021/01/30)
最初に
まぁ、すでにRouterboardを使用してIPv4 over IPv6トンネルを設定した方法での手順については、公開されている方々がいらっしゃいます。
https://hr-sano.net/blog/2017/10/17/how-to-configure-ipv6-ipoe-ds-lite-in-routerboard/
こちらの方々はIIJのDS-liteの場合です。筆者の場合はv6プラスを使用した環境で設定できたので、備忘録として残しておこうと思います。
といっても、IPv4 over IPv6を使用していることには代わりはないので、とくに目新しいことはありません。
上で上げている方々は基本的にGUI(wegfig)での設定のようなので、今回はCLIで設定をした場合にしようかと思います。
ちなみに筆者の環境は、【ひかり電話を契約している場合:DHCPv6-PD】なので、HGWを使用していない場合は若干違う可能性があります。
設定方法
1. IPIPv6トンネルを設定するインターフェースの設定
/ipv6 dhcp-client
add add-default-route=yes interface=<ONUと接続しているインターフェース> pool-name=<適当に> request=prefix
2. IPIPv6トンネルインターフェースの受け側の設定
/ipv6 address
add address=<プロバイダから払い出されるネットワークのマスクアドレス> comment="default gateway ipv6" from-pool=<1. で設定したpool名> \
interface=<ONUに接続しているインターフェース>
3. BRとのIPIPv6トンネルの接続のためのIPv6アドレス設定
/interface ipipv6
add clamp-tcp-mss=yes comment=v6_plus local-address=<2. で割り振られたIPアドレス> mtu=\
1460 name=ipipv6-v6plus remote-address=<プロバイダから通知されたBRのアドレス>
4. IPIPv6トンネルへ透過させるIPv4アドレス設定
/ip address
add address=<プロバイダから通知された固定IPアドレス> interface=ipipv6-v6plus
5. LAN側インターフェース設定
/ipv6 address
add address=::1 comment="default gateway ipv6" from-pool=<1. で設定したpool名> interface=bridge1
6. NAT設定
/ip firewall nat
add action=masquerade chain=srcnat comment="NAT ipipv6" out-interface=ipipv6-tunnel1
/ip firewall mangle
add action=change-mss chain=forward comment="Clamp MSS to PMTU" new-mss=clamp-to-pmtu passthrough=yes \
protocol=tcp tcp-flags=syn
/ipv6 firewall mangle
add action=change-mss chain=forward comment="Clamp MSS to PMTU" new-mss=clamp-to-pmtu passthrough=yes \
protocol=tcp tcp-flags=syn
7. DHCP設定
/ip dhcp-server
add address-pool=dhcp_pool1 disabled=no interface=bridge1 name=dhcp1
/ip dhcp-server network
add address=192.168.88.0/24 gateway=192.168.88.1
8. 経路設定
/ip route
add check-gateway=ping distance=1 gateway=ipipv6-tunnel1
/ipv6 route
add dst-address=::/0 gateway=ether1 distance=1
check-gateway
を有効にすると、IPIPv6トンネルがLinkupしないので注意。
9. DNS設定
/ip dns
set allow-remote-requests=yes cache-size=50000KiB max-concurrent-queries=200 \
max-concurrent-tcp-sessions=40 servers=208.67.222.222,208.67.220.220,2620:0:ccc::2,2620:0:ccd::2
上記に記載した設定については、あくまで最低限のものになります。
見てわかりますように、/ip firewall filter
、/ipv6 firewall filter
の設定がありません。基本的にはIPv4についてはPPPoEで接続していたときの設定が使用できると思います。ただし、in-interfaceなどを使用している場合は、all pppなどを使用していないことを確認してください。今回の場合はPPPoEなどでの設定ではないので、all pppなどを使用していると、そのルールは使用されません。
IPv6については、特にベーシックなものから変更や特別に追記するようなルールは無いはずです。(筆者のほうで記憶違いがありましたらご指摘ください。)
筆者の場合は、通常のIPv4 PPPoE → IPv4 PPPoE + IPoE → v6プラス →v6プラス固定IPサービス と、どんどんとネットワーク環境を切り替えてきたため設定を昔から引き継いでおり、秘伝のタレと化していたことがちょっとハマりどころでした。というのも、/ip firewall natやmangleに設定していたパラメータが悪さをしており、パケットがLANからWANへ飛ぶものの、replyが返ってこないという状況でした。(これで3週間ほど悩んでおりました。)
これでPingやtracerouteなどを使用していただくと、外への通信が可能になるかと思います。
確認
以下のWebサイトなどを使用していただくと、IPv6のISPがJPNEになっていることを確認できるかと思います。
ということで、RouterboardもDS-liteおよびv6プラス固定IPサービスに(非公式ながら)対応していますよ、という内容になります。(まぁRFCに規定されているの設定はできるはずです)
ここの内容間違っているよ、や、ここがよく分からない、などありましたら、コメントやTwitterなどでご連絡いただければ、なるべくご回答するようにいたします。
参考スループット
- CCR1009-8G-1S-1S+
- RouterOS v6.48beta40
- v4 filter 84個
- v6 filter 27個
CCR1009初期型であること、計測した時間が混雑する時間であることから低いかなと思います。CCR1009から見るとCPU使用率については100%で張り付くようなことになっているものはありませんでした。また、計測する時間帯については、今度朝一番などに計測してみようと思います。
その他
公式で対応しているよ、というメーカ様の設定Webサイトは以下になります。