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で通信できるように設定

  1. [LuCI] LANインターフェースを設定する。
    [DHCP Server][IPv6 Settings]
    RA-Service:relay mode
    DHCPv6-Service:server mode
    NDP-Proxy:relay mode
  2. [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
  3. [LuCI] Save & Applyする。

OpenWrtを再起動して配下の端末にIPv6アドレスが配布されるのを確認。
下記のような接続確認サイトでIPv6で接続できていることを確認。

参考
IPv6 test – IPv6/4 connectivity and speed test

■ IPv4 over IPv6で通信できるように設定

  1. [LuCI] mapパッケージ、iptables-mod-ipoptパッケージをインストールする。
  2. OpenWrtを再起動する。
  3. [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:チェックを外す
  4. [LuCI] Save & Applyする。
  1. MAP-E設定値を取得する。

http://ipv4.web.fc2.com/map-e.html

現在のIPv6アドレスを入力して「計算」を押すと必要な設定値が算出される。超便利な謎サイト。ありがてえ。

  1. [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の場合)
  2. [LuCI] Save & Applyする。
  3. [LuCI] ファイアウォールのゾーンWANに、WAN6PDインターフェースとWANMAPインターフェースを追加する。
  1. [Luci] ファイヤーウォールのカスタムルールを設定する。

参考
map-e | Pastebin | Teknik

カスタムルールスクリプト作ってくれた人に感謝!
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
  1. OpenWrtを再起動する。

下記のような接続確認サイトでIPv4アドレスを確認。
無線ルータ配下の端末は、MAP-Eで取得したIPv4アドレスで通信していることを確認。

参考
IPv6 test – IPv6/4 connectivity and speed test

v6プラス利用判定
OCN | 接続環境確認
IPv4 over IPv6でつながっていると「〇 v6プラスつかっています」と表示される。※JPNE系
OCN系は確認すると「IPoE方式」と表示される。