OpenWrt で IPv6 ULA(ユニークローカルアドレス) NAT

公開日時:2024-07-27 Sat. 06:19:05 JST
更新日時:-
OpenWrt 23.05.3
by kiyozzy

■ 前提

OpenWrt で IPv6のULA(ユニークローカルアドレス)でNATを利用することができたので、 その方法を残しておきます。

我が宅のネットワークについて書いておくと、eo 1ギガコース に加入しており、
IPv6を使えるようにeoの無料ルータレンタルを利用している。
IPv6を使えるようにするのにルータのレンタルが必須だったかは覚えていないので確認してほしい。

事前の予想通りレンタルされたルータは一般家庭向けであり、自前でDHCPv6を制御するなどできない。
そこで YAMAHA RTX810 を中古で購入して eoルータのルータ機能をOFFにしてRTX810にPPPoE接続させ、
宅内ネットワーク内のラズパイにDHCPv4, DHCPv6, DNSを機能させていた。

RTX810にはIPv6NAT機能などないはずなので、ラズパイのDHCPv6ではグローバルアドレスを配っていた。
IPv6のプレフィックス部分が変わらないことを前提としている。
また近頃、PC画面でIPアドレスを確認などしたとき、IPv4はプライベートアドレスしか見えないのに、
IPv6はグローバルアドレスが丸見えになっていることに疑念を抱くようになっていた。
PCのIPアドレスの確認画面が他人に見られることがあるのかはさておき。

調べてみるとOpenWrtにはIPv6NAT機能があることが分かり、
試した結果、宅内のIPv6をユニークローカルアドレス(ULA。IPv4のプライベートアドレスに当たる)
で構成することができたのでここに公開する。

OpenWrtの設定は WebUI から行った。

■ OpenWrt IPv6 ULA NAT behind eo-router

OpenWrt 23.05.3

eo-IPv6ルータの配下にOpenWrtをぶら下げ、ULAの IPv6 NAT を構成する。
ひとまず、eoルータにOpenWrtをぶら下げ、2重ルータ構成として機能させる設定方法を記載する。
後述する方法でeoルータ機能をOFFにしてOpenWrtにPPPoEを喋らせて接続することはできたのだが、
速度計測するとこちらの方が速かったので現状こちらの構成を使っている。
「前提」で書いたとおり、DHCPv4, DHCPv6, DNSはラズパイが担っている。
DHCPv6ではDUIDでサーバーだけアドレス(ULA)を振っていて、その他はルータのRAからIPv6 ULAアドレスを振っている。

eo-IPv6ルータ設定:

  1. 他のルータでPPPoE接続していてもデフォルトでは 192.168.0.1 でアクセスできる。
  2. "トップーページへ戻る"のトップページでルータモード を ON にする。
  3. "LAN側設定"でデフォルトの 192.168.0.1 にする。 DHCPは ON のままでもよい。
  4. "その他の設定"でDMZホスト機能 ON, DMZホスト 192.168.0.2, にしてIPv4を OpenWrt に飛ばす。
  5. "IPv6パケットフィルタ設定"で、全ての in の IPv6 パケットを通過するようにする。
    -> 追加ボタン押下、優先度だけ 5 とかにして 設定ボタン押下。
OpenWrt設定:
  1. Network - Interfaces の Global network options タブの
    IPv6 ULA-Prefix を ここでは仮に fd00:1234:56:78::/64 に設定する。
    メモ:オリジナルは fd72:XXXX:XXXX::/48 だった。
  2. Network - Interfaces の Interfaces タブの "lan(br-lan)" の Edit で。
    Static address で IPv4 に ここでは仮に 192.168.77.1 を設定し宅内のIPv4のルータにする。
    Advanced Settings タブで IPv6 prefix filter を "local(Local ULA)" に選択し、
    LANのIPv6アドレスにULAを選ばせる。
    DHCP Sever タブの、
    General Setup タブで Ignore interface をONにし、IPv4のDHCPを無効にする。
    IPv6 Settings タブで、
     RA-Service を "server mode"に、
     DHCPv6-Serviceを "disabled" に、
     Local IPv6 DNS server を OFF に、する。
    IPv6 RA Settings タブで、
     Default router を "forced" に設定し default gateway をアナウンスさせる。
     RA Flags は "maganed config(M)", "other config(O)" を両方有効にする。
  3. Network - Interfaces の Interfaces タブの "wan(wan)" の Edit で。
    Static address で IPv4 に 192.168.0.2, gateway 192.168.0.1 を設定しeoルータに繋げる。
    Advanced Settings で Use custom DNS servers に 192.168.0.1 を設定する。
  4. Network - Interfaces の Interfaces タブの "wan6(wan)" の Edit で。
    A. グローバルIPv6アドレスを手動で振る方法:
     eo-IPv6ルータにアクセスし"情報"-"現在の状態"の最後の"拡張表示"をし、
      "IPv6アドレス/プレフィックス長(グローバル)"からグローバルのprefix部分をメモる。
      "IPv6アドレス/プレフィックス長(リンクローカル)"がIPv6のgatewayに相当する。
     General Settings タブの Protocol は "Static address" にする。
     IPv4 関連は空欄のままにする。
     IPv6 address にグローバルのprefixに任意のsuffixを加え自身のGUAとする。
     IPv6 gateway に先程のIPv6のgatewayを設定する。
     Advanced Settings で Use custom DNS servers に先程のIPv6のgatewayを設定する。
    B. グローバルIPv6アドレスを自動で振る方法:
     General Settings タブの Protocol は "DHCPv6 client" にする。
     Advanced Settings タブの IPv6 source routing は OFF にする。
  5. Network - Firewall の Zones の "wan => REJECT" の Edit で
    General Settings タブの Masquerading を ON 、
    Advanced Settings タブの IPv6 Masquerading を ON 、にする。
  6. Network - Interfaces の Devices タブの "br-lan"と"wan" の IPv6 MTU を 9200 (最大)にする。
  7. 外から宅内のマシンへアクセス出来るようにするにはポートフォワード設定をする。
    Network - Firewall の Port Forwards タブで必要なポートフォワード設定をする。
    IPv4, IPv6は分けて記載することになる。
    Source zone:"wan", Destination zone:"lan",
    例:Name:"http IPv4", "IPv4 only","TCP UDP","port 80",to"192.168.77.5"
    例:Name:"http IPv6", "IPv6 only","TCP UDP","port 80",to"fd00:1234:56:78::5"
  8. Network - Interfaces の Interfaces タブで、
    "lan(br-lan)"に IPv4:192.168.77.1/24 IPv6:fd00:1234:56:78::1/64 が表示される。
    "wan(wan)"に IPv4: 192.168.0.2/24 が表示される。
    "wan6(wan)"に IPv6: 200...グローバルアドレス...b0/64 が表示される。
eoの1ギガコース向けスピードテスト結果:
・ダウンロード速度: 700 Mbps弱
・アップロード速度: 730 Mbps程度
RTX810の頃とほぼ変わらない。

■ OpenWrt IPv6 ULA NAT で複数のGUAを活用する

OpenWrt 23.05.3

上記、ULAの IPv6 ULA NAT を構成しただけでは、IPv6のGUAは1つだけである。
IPv6はいくつでもGUAが使えるので、例えば22ポートをGUA毎に異なるULAにマップすることができる。
ただし、今の調査段階では外に出ていくときのNATに使われるGUAについてやや確証は持ててない。

  1. Network - Interfaces の Interfaces タブの "wan6(wan)" の Edit で。
    A. グローバルIPv6アドレスを手動で振る方法:とする。
     IPv6 address にグローバルのprefixに任意のsuffixを加え、自身のGUAとする。
     必要な数だけ追加する。
     追加した最後のGUAが外に出ていく時のGUAとして使用されるようだ。
  2. 外から宅内のマシンへアクセス出来るようにするにはポートフォワード設定をする。
    Network - Firewall の Port Forwards タブで必要なポートフォワード修正・設定をする。
    この時、GUAを指定すれば、GUA毎に異なるULAにマップることができる。
    Firewall - Port Forwards の Advanced Settings タブで、
    External IP address に入口となるGUAを指定する。
    既存のものも指定するよう修正する。(あるいは、順番が変えられるのでそれが優先度のはず)




■ OpenWrt IPv6 ULA NAT on PPPoE

OpenWrt 23.05.3

eoルータのルータ機能を無効にしてOpenWrtからPPPoE接続で IPv6 ULA NAT する。
一旦、上記「OpenWrt IPv6 ULA NAT behind eo-router」と
「OpenWrt IPv6 ULA NAT で複数のGUAを活用する」設定した後で設定・確認した。
事前にeoルータの192.168.0.1にアクセスし、eoルータのルータ機能を無効にしておく。

  1. Network - Interfaces の Interfaces タブの "wan(wan)" の Edit で。
    PPPoE に設定し username と password を入力する。
    Advanced Settings の Use custom DNS servers は無くなる。
    ここで一旦 Save and Applyし接続する。
    アイコン表示のデバイスが"wan(wan)"から"wan(pppoe-wan)"に変わりIPv6のリンクローカルも振られる。
    ここで一旦 Status - Overview を表示し DHCPv6 client ができているか確認し Network - Interfaces に戻る。
    アイコン表示"wan_6(pppoe-wan)"のInterfaceが新しくできIPv6-PD:にグローバルのprefixが振られる。
  2. Status - Overview で DHCPv6 client の内容から
    グローバルPrefix,Gateway,DNS1,DNS2 の情報を控える。
    Gatewayは半固定のようであるが Interfaces の構成を大きく変えるなどすると変わることがある。
  3. Network - Interfaces の Interfaces タブの "wan6(wan)" の Edit で。
    Device を "pppoe-wan" に変える。
    A. グローバルIPv6アドレスを手動で振る方法:とする。
     IPv6 gateway に先程のIPv6のGatewayを設定する。
     Advanced Settings で Use custom DNS servers に先程のIPv6のDNS1,DNS2を設定する。
eoの1ギガコース向けスピードテスト結果:
・ダウンロード速度: 600 Mbps程度
・アップロード速度: 700 Mbps弱
遅くなった。eoルータが速いのか、OpenWrtのPPPoEが負荷となるのか。。。