OpenWrt(19.07)でIPv6インターネットを使う
OpenWrtでIPv6インターネット(+IPv4インターネットも)を使えるようにする覚書。
この設定で、WindowsやUbuntu、iOSでIPv6アドレスが自動割当され通信できている。
■ 前提
フレッツ光回線(コラボ回線:我が家はビッグローブ光→OCN光)でIPv6オプションがついてる。
OCN光にしたけど、設定方法は特に変わらなかった。
デュアルスタック構成にする。
公開サーバのIPv4通信はPPPoEとし、無線ルータからのIPv4通信はIPv4 over IPv6(MAP-E)で通信する構成する。
OpenWrtは19.07を使用。インターフェースはLAN、WAN、WAN6があるものとする。
WANはPPPoEでIPv4接続できている状態とする。
■ WAN6をIPv6で通信できるように設定
SSHでOpenWrtに接続し、/etc/config/dhcpを修正する。
vi /etc/config/dhcp
... config dhcp 'lan' ... option dhcpv6 'server' option ra_management '1' option ra 'relay' option ndp 'relay' ... config dhcp 'wan6' option dhcpv6 'server' option ra 'relay' option ndp 'relay' option master '1'
OpenWrtを再起動して配下の端末にIPv6アドレスが配布されるのを確認。
下記のような接続確認サイトでIPv6で接続できていることを確認。
参考
IPv6 test – IPv6/4 connectivity and speed test
■ IPv4 over IPv6で通信できるように設定
参考
OpenWrtでv6プラス(MAP-E)接続する手順 – いぇいいぇい
[LuCI]はブラウザからログインして設定、[SSH]はSSHでログインして設定する。
- [LuCI] mapパッケージ、iptables-mod-ipoptパッケージをインストールする。
- OpenWrtを再起動する。
- [LuCI] WAN6のCustom delegated IPv6-prefixを設定する。
IPv6アドレスが「2222:aaaa:bbbb:cccc:dddd:eeee:ffff:gggg/64」だったら
「2222:aaaa:bbbb:cccc::/56」を設定する。 - [LuCI] 新しいインターフェースを作成する。
名前:wanmap
プロトコル:MAP / LW4over6
※インターフェースを作成した後、詳細設定画面が出てくるが設定が反映されないので(不具合だと思う)、Dismissを押す。(後程SSHで設定する) - [LuCI] Save & Applyする。
- [SSH] /etc/firewall.userを修正する。
vi /etc/firewall.user
iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet 0 -j MARK --set-mark 10 iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet 1 -j MARK --set-mark 11 iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet 2 -j MARK --set-mark 12 iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet 3 -j MARK --set-mark 13 iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet 4 -j MARK --set-mark 14 iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet 5 -j MARK --set-mark 15 iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet 6 -j MARK --set-mark 16 iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet 7 -j MARK --set-mark 17 iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet 8 -j MARK --set-mark 18 iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet 9 -j MARK --set-mark 19 iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet 10 -j MARK --set-mark 20 iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet 11 -j MARK --set-mark 21 iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet 12 -j MARK --set-mark 22 iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet 13 -j MARK --set-mark 23 iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet 14 -j MARK --set-mark 24 iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet 0 -j MARK --set-mark 10 iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet 1 -j MARK --set-mark 11 iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet 2 -j MARK --set-mark 12 iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet 3 -j MARK --set-mark 13 iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet 4 -j MARK --set-mark 14 iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet 5 -j MARK --set-mark 15 iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet 6 -j MARK --set-mark 16 iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet 7 -j MARK --set-mark 17 iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet 8 -j MARK --set-mark 18 iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet 9 -j MARK --set-mark 19 iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet 10 -j MARK --set-mark 20 iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet 11 -j MARK --set-mark 21 iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet 12 -j MARK --set-mark 22 iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet 13 -j MARK --set-mark 23 iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet 14 -j MARK --set-mark 24
- /lib/netifd/proto/map.shを修正し、マークの設定を追加する。
vi /lib/netifd/proto/map.sh
... json_add_array firewall ... else + local mark=10 for portset in $(eval "echo \$RULE_${k}_PORTSETS"); do for proto in icmp tcp udp; do json_add_object "" json_add_string type nat json_add_string target SNAT json_add_string family inet json_add_string proto "$proto" + json_add_string mark "$mark" ... json_close_object done + mark=`expr $mark + 1` done fi ...
- MAP-E設定値を取得する。
http://ipv4.web.fc2.com/map-e.html
現在のIPv6アドレスを入力して「計算」を押すと必要な設定値が算出される。超便利な謎サイト。ありがてえ。
#export LEGACY=1ではなく、export LEGACY=1となっている場合は/lib/netifd/proto/map.shを修正する。
vi /lib/netifd/proto/map.sh
... #export LEGACY=1 export LEGACY=1 ...
- [SSH] /etc/config/networkを修正する。
インターフェースの設定値は前項で算出した値を使う。
vi /etc/config/network
... config interface 'wanmap' option proto 'map' option type 'map-e' option peeraddr '2222:aaa:bbb:1::1:ccc' option ipaddr '111.222.0.0' option ip4prefixlen '15' option ip6prefix '2222:aaaa::' option ip6prefixlen '31' option ealen '25' option psidlen '8' option offset '4' option encaplimit 'ignore'
- [LuCI] ファイアウォールのゾーンWANに、WANMAPインターフェースを追加する。
- [LuCI] WAMMAPインターフェースをスタートする。
PPPoEのIPv4アドレスとは別のIPがもらえればOK。 - OpenWrtを再起動する。
下記のような接続確認サイトでIPv4アドレスを確認。
参考
IPv6 test – IPv6/4 connectivity and speed test
v6プラス利用判定
OCN | 接続環境確認
IPv4 over IPv6でつながっていると「〇 v6プラスつかっています」と表示される。※JPNE系
OCN系は確認すると「IPoE方式」と表示される。