NotaBene

NURO光にてOpenWrt搭載ルーターを使う設定 | NotaBene

NURO光にてOpenWrt搭載ルーターを使う設定

April 01, 2024

経緯

自宅インターネット回線をNURO光にした

最近はどこのISPもそうだがONUにいらないルーター機能がついてくる

冗長な構成は回線速度を遅くしがちだが 折角自前のルーターを持っているので使いたい

速度はある程度犠牲になるかもしれないが 現状の構成を記しておく

お願い

これを読んでいてまだNURO光に加入していないが これから新規に回線を契約される奇特な方がいらっしゃいましたら 以下のコードをお使いください

STX9405

私に1万円 利用していただいた方に1万円キャッシュバックされます

よろしくおねがいいたします

構成

  • ONU: ZXHN F2886S
  • ルーター: GL-AX1800

最近のNURO光はMAP-Eを導入しはじめているらしいが 私の環境ではまだIPv4/IPv6のdual stack構成だった

ONUに関しては自分で選択できないので この方法がそのまま全てのユーザーに使えるかは不明

すくなくとも管理画面の設定は読みかえる必要がありそう

前準備

  1. ONUのみでインターネットには接続できるため一度IPアドレスを払いだしてもらう
  2. ONUの管理画面にブラウザでログインしてアドレスを確認する

F2886Sの場合 インターネット > ステータス > WAN から

  • IPアドレス
  • LLA
  • GUA

を確認しておく

設定

IPv4

2重NATがいやなので F2886SのDMZ機能を使う

ONUの設定

インターネット > セキュリティ > DMZ にて DMZホストのIPアドレス にルーターのMACアドレスを入力する

オプション

  1. LAN > LAN > IPv4 からDHCPを切る
  2. LAN > 無線LAN からWiFiを切る
  3. インターネット > セキュリティ > ファイアウォール からファイアウォールを切る

ルーターの設定

WAN側の設定として静的なアドレスを設定する

今回はONUのIPアドレスが192.168.1.1/24のため192.168.1.100/24として設定した

IPv6

IPv6の設定についてはF2886SにDMZ機能が提供されていない(そもそもDMZ機能についてよく理解していないため詳細は不明)

そのため代案を探していたのだが 2つのポイントがある

  1. 標準的なIPv6環境の構成ではNATはない
    • すくなくとも F2886S にはない
  2. 2重のLAN(ルーターだけが参加するLANと家庭内のLAN)ができるのは避けられなさそう

2重にルーターがあること自体は避けられないと思われるが 次善の策として NDP proxy というものを用いることにした

これを用いることで デフォルトgwに転送するだけの仕事(ルーティング)は残るが DHCP RA パケットフィルタリング などは F2886S にさせずにすむ

NDP proxy について

ざっくりいうとそもそもIPv6という技術はIPスタックのネットワーク層部分のみの置きかえとみなせるっぽい

そこでIPv4では微妙な設計だったMAC/IPアドレス変換がネットワーク層の仕事になったようで ICMPがARPの代わりになるようだ

NDP proxy というのはICMPv6の近隣探索メッセージをリレーしてくれる機能である 参考

これによりネットワーク層におけるトポロジを単純化することが可能になる(i.e. プレフィックスを共有できる)はず

OpenWrtのスイッチの構成だと以下のような図式になる

ONUROUTERUSERSWANLANWANLANDEVICESL2L2L2L2NDP PROXYNDP PROXYL3L3L3

プロトコルに従ってISPからグローバルプレフィックスを自動で取得できないのがきもいが妥協している

ONUの設定

LAN > LAN > IPv6 に移動する

  1. LANアドレス管理 にて F2886S のLLAを設定する

    かなりわけがわからないのだが F2886S では自分のLLAを設定してあげないとローカルで疎通できない

    しょうがないので確認しておいた LLA の値に1を足して設定した

    おそらくここではLANブリッジの設定をおこなっていて 確認しておいた LLA の値はWAN側のものなのだろうが説明があまりないのでわからない

  2. 静的プレフィックス にて global prefix を固定する

    NURO光のプレフィックス長は56らしいので 確認しておいた GUA の前半56bitを切りだして設定する

    そのまま56bitで使いたいものだが サブネットをきらないと使えなかった

    断腸の思いで1bit追加して <56bit prefix>80::/57 に設定

    80に意味はあまりないがWANのアドレスと衝突しないように一応している WANに割り当てられた GUA の値に応じて 00 か 80 を使用する

    例えば GUAdead:beaf:cafe:babe:xxxx:xxxx:xxxx:xxxx なら dead:beaf:cafe:ba00::/57 に設定

  3. DHCPv6 からDHCPを切る

    複雑になるのでOFF

  4. RAサービス からRAを切る

    同様にOFF

ルーターの設定

GL-AX1800 固有の設定

GL-AX1800 はOpenWrtの機能をwrapしているのでいくつかの手順で余分な副作用を消す

  1. sshでログインして /etc/init.d/gl_ipv6 を消す

    このスクリプトがネットワークの設定やカーネルパラメータを変更するのでOpenWrtで機能をいじったときによくわからないことになる

  2. sshでログインして以下を実行する これによりカーネルのIPv6スタックを有効にする

    kernel_ipv6_config="/etc/sysctl.d/99-disable-ipv6.conf"
    echo "net.ipv6.conf.all.disable_ipv6=0" > $kernel_ipv6_config
    echo "net.ipv6.conf.lo.disable_ipv6=0" >> $kernel_ipv6_config
    echo "net.ipv6.conf.default.disable_ipv6=0" >> $kernel_ipv6_config
    echo "net.ipv6.conf.default.forwarding=2" >> $kernel_ipv6_config
    echo "net.ipv6.conf.all.forwarding=2" >> $kernel_ipv6_config
    for i in `ls /proc/sys/net/ipv6/conf/`
    do
        echo "net.ipv6.conf.$i.accept_ra=2" >> $kernel_ipv6_config
    done

一般の設定

  1. /etc/config/network を以下のように編集する

    config globals 'globals'
    	option ula_prefix '<ULA prefix>::/48'
    
    config interface 'lan'
    	option device 'br-lan'
    	option proto 'static'
    	option ipaddr '192.168.8.1'
    	option netmask '255.255.255.0'
    	option ip6assign '64'
    	option ip6ifaceid '::1'
    	option ip6hint '1'
    
    config interface 'wan'
    	option device 'eth0'
    	option proto 'static'
    	option ipaddr '192.168.1.100'
    	option netmask '255.255.255.0'
    	option gateway '192.168.1.1'
    	list dns '8.8.8.8'
    	list dns '4.4.4.4'
    
    config interface 'wan6'
    	option device '@wan'
    	option proto 'static'
    	option ip6addr '<56bit prefix>80:<interface>/57'
    	option ip6prefix '<56bit prefix>c0::/60'
    	option ip6gw '<LLA of ONU>'
    	list dns '2001:4860:4860::8888'
    	list dns '2001:4860:4860::8844'

    設定のポイントは以下である

    1. wan6 において ip6addr のインターフェイス部は適切に設定する(ip addr で確認できるLLAのインターフェイス部をコピーするのが楽)
    2. ip6prefix を設定することにより <56bit prefix>c0::/60 が下位のノードに割りあてられる(ip6addrのプレフィックス末尾を00にした場合は40とかにするとよいかも?)
    3. ip6gw はローカルアドレスでないといけない(LAN側に設定したLLAを記入する)
    4. DNSはIPv4/IPv6ともにGoogle Public DNSを用いる

    具体的なオプション等はここを参照のこと

  2. /etc/config/dhcp を以下のように編集する

    config dhcp 'lan'
    	option interface 'lan'
    	option start '100'
    	option limit '150'
    	option leasetime '12h'
    	option dhcpv4 'server'
    	option ra 'server'
    	option ra_flags 'managed-config other-config'
    	option dhcpv6 'server'
    	list dns '2001:4860:4860::8888'
    	list dns '2001:4860:4860::8844'
    	option ndp 'relay'
    
    config dhcp 'wan'
    	option interface 'wan'
    	option ignore '1'
    	option leasetime '12h'
    	option limit '150'
    	option start '100'
    	list ra_flags 'none'
    	option ndp 'relay'

    設定のポイントは以下である

    1. 先述したようにNDP proxyをWANとLANに設定する
    2. LAN側でRAとDHCPv6 serverを用いる
  3. reboot 等で再起動する

上記の設定を行うと以下のようなアドレスが設定される

Network InterfaceIP Address
ONUWANdead:beaf:cafe:babe:xxxx:xxxx:xxxx:xxxx/56
LANdead:beaf:cafe:ba00:xxxx:xxxx:xxxx:xxxx/57
ROUTERWANdead:beaf:cafe:ba00:<interface id>/57
LANdead:beaf:cafe:ba41::1/64
<ULA prefix>:1::1/64
USERSDEVICESdead:beaf:cafe:ba41:<interface id>/64
<ULA prefix>:1:<interface id>/64
dead:beaf:cafe:ba41:<leased id>/64
<ULA prefix>:1:<leased id>/64

ただしここでONUのWANに割りあてられている GUAdead:beaf:cafe:babe:xxxx:xxxx:xxxx:xxxx であるとしている

気になる点

ひとまずPCのIPアドレスがグローバルプレフィックスを持つようにはできた

しかし いくつか気になる点があるのでメモしておく

  1. DHCPv6をDNSサーバー自動設定のために使っているが DNSサーバー広告のためだけに使えないか
  2. ネットワークインターフェイスの設定でDNSサーバーを設定していて DHCPv6でも設定しているがどちらが効いているのか確認できていない
  3. WireGuardを用いたVPNが気になるのでいれたい
  4. 2箇所にグローバルプレフィックスを入力しているのがDRYではないためいや

© 2017-2024 mtphl