OpenWrt(21.02)でIPv6インターネットを使う
OpenWrtでIPv6インターネット(+IPv4インターネットも)を使えるようにする覚書。
この設定で、WindowsやUbuntu、iOSでIPv6アドレスが自動割当され通信できている。
■ 前提
フレッツ光回線(コラボ回線:我が家はOCN光)でIPv6オプションがついてる。
デュアルスタック構成にする。
OpenWrtは21.02を使用。インターフェースはLAN、WAN、WAN6があるものとする。
WANはPPPoEでIPv4接続できている状態とする。
[LuCI]はブラウザからログインして設定、[SSH]はSSHでログインして設定する。
できるだけLuCIで設定してみる。
■ WAN6をIPv6で通信できるように設定
- [LuCI] LANインターフェースを設定する。
[DHCP Server][IPv6 Settings]
RA-Service:relay mode
DHCPv6-Service:server mode
NDP-Proxy:relay mode - [LuCI] WAN6インターフェースを設定する。
[General Settings]
Protocol:DHCPv6 client
[DHCP Server][IPv6 Settings]
Designated master:チェック
RA-Service:relay mode
DHCPv6-Service:relay mode
NDP-Proxy:relay mode - [LuCI] Save & Applyする。
OpenWrtを再起動して配下の端末にIPv6アドレスが配布されるのを確認。
下記のような接続確認サイトでIPv6で接続できていることを確認。
参考
IPv6 test – IPv6/4 connectivity and speed test
■ IPv4 over IPv6で通信できるように設定
- [LuCI] mapパッケージ、iptables-mod-ipoptパッケージをインストールする。
- OpenWrtを再起動する。
- [LuCI] 新しいインターフェースを作成する。
名前:wan6pd
プロトコル:Static address
OpenWrtのLANインターフェースのIPv6アドレスを「2222:aaaa:bbbb:cccc::1/64」とした場合、
下記のような設定をする。
[General Settings]
IPv6 address:2222:aaaa:bbbb:cccc::1001
IPv6 gateway:2222:aaaa:bbbb:cccc::1
IPv6 routed prefix:2222:aaaa:bbbb:cccc::/56
[Advanced Settings]
Use default gateway:チェックを外す - [LuCI] Save & Applyする。
- MAP-E設定値を取得する。
http://ipv4.web.fc2.com/map-e.html
現在のIPv6アドレスを入力して「計算」を押すと必要な設定値が算出される。超便利な謎サイト。ありがてえ。
- [LuCI] 新しいインターフェースを作成する。
名前:wanmap
プロトコル:MAP / LW4over6
[General Settings]
Type:MAP-E
下記設定値は上記で取得した値を使用する。
BR / DMR / AFTR
IPv4 prefix
IPv4 prefix length
IPv6 prefix
IPv6 prefix length
EA-bits length
PSID-bits length
PSID offset
[Advanced Settings]
Use legacy MAP:チェック(export LEGACY=1の場合) - [LuCI] Save & Applyする。
- [LuCI] ファイアウォールのゾーンWANに、WAN6PDインターフェースとWANMAPインターフェースを追加する。
- [Luci] ファイヤーウォールのカスタムルールを設定する。
カスタムルールスクリプト作ってくれた人に感謝!
IPとPSIDは、MAP-E設定値 で算出した値を使用する。
OCNとその他のV6プラスでは設定値が異なる模様。
units1=63 #V6plus:15 OCN:63 units2=1024 #V6plus 4096 OCN:1024 IP4='xxx.xxx.xxx.xxx' PSID='x' TUNDEV='map-wanmap' iptables -t nat -F PREROUTING iptables -t nat -F OUTPUT iptables -t nat -F POSTROUTING rule=1 while [ $rule -le $units1 ] ; do mark=`expr $rule + 16` pn=`expr $rule - 1` portl=`expr $rule \* $units2 + $PSID \* 16` portr=`expr $portl + 15` iptables -t nat -A PREROUTING -m statistic --mode nth --every $units1 --packet $pn -j MARK --set-mark $mark iptables -t nat -A OUTPUT -m statistic --mode nth --every $units1 --packet $pn -j MARK --set-mark $mark iptables -t nat -A POSTROUTING -p icmp -o $TUNDEV -m mark --mark $mark -j SNAT --to $IP4:$portl-$portr iptables -t nat -A POSTROUTING -p tcp -o $TUNDEV -m mark --mark $mark -j SNAT --to $IP4:$portl-$portr iptables -t nat -A POSTROUTING -p udp -o $TUNDEV -m mark --mark $mark -j SNAT --to $IP4:$portl-$portr rule=`expr $rule + 1` done
- OpenWrtを再起動する。
下記のような接続確認サイトでIPv4アドレスを確認。
無線ルータ配下の端末は、MAP-Eで取得したIPv4アドレスで通信していることを確認。
参考
IPv6 test – IPv6/4 connectivity and speed test
v6プラス利用判定
OCN | 接続環境確認
IPv4 over IPv6でつながっていると「〇 v6プラスつかっています」と表示される。※JPNE系
OCN系は確認すると「IPoE方式」と表示される。