スキップしてメイン コンテンツに移動

フレッツ光クロス コラボ enひかりクロス V6プラス 固定IPで OpenWRT をネストしプレフィックス委譲を多段に構成

プレフィックス委譲については、OpenWRTの記事は国内では少なく、海外のスレなどでもちらほら散見するだけでした。そこで、今回はOpenWRTでのプレフィック委譲が親ルータから子・孫ルータに対しどのように動くのか検証してみました。また、経路情報はIPv4についてはスタティックではなくRIPv2で配布するようにしました。(2024/06/01追記: IPv6についてはRIPngで配布するようにしました。)こちらもOpenWRTでfrrのripd/ripngdを使う情報はほとんど見当たらなかったのですが、なんとか構成できたので基本的な部分だけですが掲載しています。
なお、インターネット接続環境は、フレッツ光クロス コラボ enひかりクロス V6プラス 固定IPです。
構成は以下の通りです。
子ルーター以下を拡大したものはこちらです。
ほぼ同じコンフィグの子ルータを二つ並べたところ、プレフィックス委譲は正常におこなわれ、子ルータR10にfd98:1:1:10::/60が委譲され、子ルータR20にはfd98:1:1:20::/60が委譲されました。また、子ルータから孫ルータへの/64の委譲もできたので、理論的には(16-1)^2=225のサブネットが構成できることになります。(ただし、実際の運用では出口ROでのIPv4マスカレードが問題になりやすいので注意してください。)
今回はhypver-vを使って子ルータ2台、孫ルータが子ルータに対し各4台接続し計11台(親1+子2+孫2x4)のルータで構成してみたところ、端末間(例えば、vm111-1とvm211-1間)での通信もできました。もちろん、外部への接続も確認できました。
まず、frroutingのインストールです。設定は異なりますが、インストールは親ルータ、子ルータ、孫ルータ共通です。
追記: 2024/06/01 ripngを追加
opkg update
opkg install frr frr-zebra frr-ripd frr-ripngd frr-ldpd frr-watchfrr frr-staticd frr-vtysh
続いて、親ルータの設定です。基本的には、前回の設定とほぼ同じなのですが、frroutingを導入しホスト名を変更したので、変更部分だけ掲載します。
# /etc/config/system
--snip--
config system
        option hostname 'R0'
--snip--
次にfrroutingの設定です。前述のインストールを行うと設定は初期状態になるので、以下のところだけ変更します。(2024/06/01 ripngd追加)
# /etc/frr/daemons
--snip--
ripd=yes
ripngd=yes
--snip--
frrの設定は以下の通りです。
# /etc/frr/frr.conf

frr version 8.5.1
frr defaults traditional
hostname R0
log syslog
!
password XXXXXXXXXXXXXXXXXXXXX
!
router rip
 default-information originate
 network 10.1.1.0/24
 network br-lan
 network 0.0.0.0/24
 redistribute static
 version 2
exit
!
router ripng
 default-information originate
 network fd98:1:1::/56
 network br-lan
 network ::/0
 redistribute static
exit
!
access-list vty seq 5 permit 127.0.0.0/8
access-list vty seq 10 deny any
!
line vty
 access-class vty
exit
!
frrは再起動時に自動で起動する必要があるので、以下のコマンドを流しておいてください。(子ルータ、孫ルータも同じ。)
/etc/init.d/frr enable
親ルータの設定は以上です。
続いて、子ルータR10の設定は以下の通りです。(追記:2024/06/01 ripng追加)
# /etc/config/system
--snip--
config system
        option hostname 'R10'
--snip--

# /etc/config/network

config interface 'loopback'
	option device 'lo'
	option proto 'static'
	option ipaddr '127.0.0.1'
	option netmask '255.0.0.0'

config globals 'globals'
	option ula_prefix 'fd98:1:1:10::/60'

config device
	option name 'br-lan'
	option type 'bridge'
	list ports 'eth0'

config interface 'lan'
	option device 'br-lan'
	option proto 'static'
	option ipaddr '10.1.10.1'
	option netmask '255.255.255.0'
	option ip6assign '60'
    option ip6hint '10'
    list ip6class 'wan6'
    
config interface 'wan'
    option device 'eth1'
    option proto 'static'
    option ipaddr '10.1.1.10'
    option netmask '255.255.255.0'

config interface 'wan6'
    option device 'eth1'
    option proto 'dhcpv6'
    option reqprefix '60'
    option reqaddress 'try'

# /etc/config/dhcp

--snip--
config dhcp 'lan'
	option interface 'lan'
	option start '100'
	option limit '150'
	option leasetime '12h'
	option dhcpv4 'server'
	option dhcpv6 'server'
	option ra 'server'
	list ra_flags 'managed-config'
	list ra_flags 'other-config'
	list dns 'fd98:1:1::64'
	list dns 'fd98:1:1::65'
--snip--

# /etc/config/firewall

--snip--
config zone
        option name             wan
        list   network          'wan'
        list   network          'wan6'
        option input            REJECT
        option output           ACCEPT
        option forward          REJECT
        option masq             0
        option mtu_fix          1
--snip--
--snip--
config rule
        option name 'Allow-Ping-Forward'
        option src 'wan'
        option dest '*'
        option proto 'icmp'
        list icmp_type 'echo-request'
        option family 'ipv4'
        option target 'ACCEPT'
--snip--
--snip--
config rule
        option name 'Allow-Admin'
        list proto 'tcp'
        option src 'wan'
        option dest_port '22 80 443'
        option target 'ACCEPT'

config rule
        option name 'Allow-Admin-Forward'
        list proto 'tcp'
        option src 'wan'
		option dest '*'
        option dest_port '22 80 443'
        option target 'ACCEPT'

config rule
        option name 'Allow-RIP'
        list proto 'udp'
        option src 'wan'
        option dest_port '520'
        option target 'ACCEPT'

config rule
        option name 'Allow-RIPNG'
        list proto 'udp'
        option src 'wan'
        option dest_port '521'
        option target 'ACCEPT'
--snip--
注意点は、config interface 'wan6'の option reqprefix 'プレフィックス長' です。この指定がないと、期待したプレフィックス長が上位ルータから得られませんでした。
また、子ルータの設定概要ですが、firewallの設定でマスカレードを無効にし、wan側からのPINGと管理用でsshおよびhttp/httpsを許可し、孫ルータ側にも管理用接続をフォワード許可しています。またRIPもWAN側から受け取るので許可しています。ssh接続については親ルータと同じく/etc/dropbearにauthorized_keysを置いておくとよいと思います。
続いて子ルータR10のfrrの設定です。
# /etc/frr/daemons
--snip--
ripd=yes
ripngd=yes
--snip--
# /etc/frr/frr.conf

frr version 8.5.1
frr defaults traditional
hostname R11
log syslog
!
password XXXXXXXXXXXXXXXXXXXXX
!
interface eth1
exit
!
router rip
 network 10.1.10.0/24
 network eth1
 network br-lan
 version 2
exit
!
router ripng
 redistribute connected
 network eth1
 network br-lan
exit
!
access-list vty seq 5 permit 127.0.0.0/8
access-list vty seq 10 deny any
!
line vty
 access-class vty
exit
!
なお、子ルータR20は以下の部分だけ、変更するだけでOKでした。該当部分のみ以下の通りになります。
# /etc/config/system
--snip--
config system
        option hostname 'R20'
--snip--

# /etc/config/network(該当部分のみ)

config globals 'globals'
	option ula_prefix 'fd98:1:1:20::/60'

config interface 'lan'
	option ipaddr '10.1.20.1'
    option ip6hint '20'
    
config interface 'wan'
    option ipaddr '10.1.1.20'

# /etc/frr/frr.conf(該当部分のみ)

hostname R20

 network 10.1.20.0/24

子ルータの設定は以上です。

続いて孫ルータR11の設定は以下の通りです。
# /etc/config/system
--snip--
        option hostname 'R11'
--snip--

# /etc/config/network

config interface 'loopback'
        option device 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fd98:1:1:11::/64'

config device
        option name 'br-lan'
        option type 'bridge'
        list ports 'eth0'

config interface 'lan'
        option device 'br-lan'
        option proto 'static'
        option ipaddr '10.1.11.1'
        option netmask '255.255.255.0'
        option ip6assign '64'
		list ip6class 'wan6'
        
config interface 'wan'
        option device 'eth1'
        option proto 'static'
        option ipaddr '10.1.10.11'
        option netmask '255.255.255.0'

config interface 'wan6'
        option device 'eth1'
        option proto 'dhcpv6'
        option reqprefix '64'
		option reqaddress 'try'

# /etc/network/dhcp (注:子ルータと同じ)

--snip--
config dhcp 'lan'
        option interface 'lan'
        option start '100'
        option limit '150'
        option leasetime '12h'
        option dhcpv4 'server'
        option dhcpv6 'server'
        option ra 'server'
        list dns 'fd98:1:1::64'
        list dns 'fd98:1:1::65'
        list ra_flags 'other-config'
--snip--

# /etc/config/firewall (注:子ルータと同じ)

--snip--
config zone
        option name             wan
        list   network          'wan'
        list   network          'wan6'
        option input            REJECT
        option output           ACCEPT
        option forward          REJECT
        option masq             0
        option mtu_fix          1
--snip--
--snip--
config rule
        option name 'Allow-Ping-Forward'
        option src 'wan'
        option dest '*'
        option proto 'icmp'
        list icmp_type 'echo-request'
        option family 'ipv4'
        option target 'ACCEPT'
--snip--
--snip--
config rule
        option name 'Allow-Admin'
        list proto 'tcp'
        option src 'wan'
        option dest_port '22 80 443'
        option target 'ACCEPT'

config rule
        option name 'Allow-Admin-Forward'
        list proto 'tcp'
        option src 'wan'
		option dest '*'
        option dest_port '22 80 443'
        option target 'ACCEPT'

config rule
        option name 'Allow-RIP'
        list proto 'udp'
        option src 'wan'
        option dest_port '520'
        option target 'ACCEPT'

config rule
        option name 'Allow-RIPNG'
        list proto 'udp'
        option src 'wan'
        option dest_port '521'
        option target 'ACCEPT'
--snip--
孫ルータも子ルータと/etc/config/firewallは同じにしていますので、例えばR0配下の管理用端末から、R11配下の端末にもsshおよびhttp/httpsで接続できるようにしています。 つづいて、孫ルータR11のfrrの設定です。
# /etc/frr/daemons
--snip--
ripd=yes
ripngd=yes
--snip--

# /etc/frr/frr.conf

frr version 8.5.1
frr defaults traditional
hostname R11
log syslog
!
password XXXXXXXXXXXXXXXXXXXXX
!
interface eth1
exit
!
router rip
 network 10.1.11.0/24
 network eth1
 network br-lan
 version 2
exit
!
router ripng
 redistribute connected
 network eth1
 network br-lan
!
access-list vty seq 5 permit 127.0.0.0/8
access-list vty seq 10 deny any
!
line vty
 access-class vty
exit
!
孫ルータR11の設定は以上です。次に例としてR21のR11との差分は以下の通りです。
# /etc/config/system
--snip--
        option hostname 'R21'
--snip--

# /etc/config/network(該当部分のみ)

config globals 'globals'
	option ula_prefix 'fd98:1:1:21::/64'

config interface 'lan'
	option ipaddr '10.1.21.1'

config interface 'wan'
    option ipaddr '10.1.20.21'
    
# /etc/frr/frr.conf(該当部分のみ)

hostname R21

 network 10.1.21.0/24
 
構成は以上です。
所でhyper-vでの構成についてですが、OpenWRTはeth0がLAN側で、eth1がWAN側になります。ですので、たとえば、R10の設定の場合、先にvsw11への接続を構成して次にvsw01への接続を構成する必要がありました。また、各ネットワークはVLANを切るなりしてセグメントを分けておく必要があります。実際に構成する場合でも、eth0がLAN側でeth1がWAN側なので注意してください。
今回は以上です。それでは。

コメント

このブログの人気の投稿

wsdd を使ってSamba サーバをネットワークに表示

Windows 10のアップデートで、セキュリティー対応のため、smbv1がデフォルトではインストールされなくなり、Samba serverがエクスプローラーのネットワークに表示されなくなってしまいました。そこで、いくつか方法を調べたのですが、linuxでwsdの実装がないか探したところ、 https://github.com/christgau/wsdd が、見つかりましたので、さっそくインストールしてみました。まだパッケージにはないようですが、インストール自身は簡単です。wsdd自体は以下のように取得し、linkを張っておきます。 cd /usr/local/bin/ sudo wget https://raw.githubusercontent.com/christgau/wsdd/master/src/wsdd.py sudo chmod 755 wsdd.py sudo ln -sf wsdd.py wsdd こちらのsambaサーバはDebianなので、/etc/systemd/system/wsdd.serviceは以下のようにしました。 [Unit] Description=Web Services Dynamic Discovery host daemon Requires=network-online.target After=network.target network-online.target multi-user.target [Service] Type=simple ExecStart=/usr/local/bin/wsdd -d MYDOMAIN [Install] WantedBy=multi-user.target wsdd -d MYDOMAINのところを、環境にあわせて書き換えてください。 次に、systemdに登録・起動テストを行います。 systemctl enable wsdd systemctl start wsdd 起動に成功すると、エクスプローラーのネットワークに表示されます。  なおこのwsddはpython3が必要です。一度試してみてください。SMBv1/CIFSを停止していても、大丈夫です。 cで書かれたほかのwsddの実装もあるようなので、いずれパッケージになるかも...

Windows デバイス暗号化 のサポートで "許可されていない dma 対応バス/デバイスが検出されました"の対処

Windows でセキュリティー関係を見ているのですが、とあるPCでmsinfo32で確認すると"デバイス暗号化のサポート"で"許可されていない dma 対応バス/デバイスが検出されました"と出ていました。このPCの場合、それ以外はOK(なにも表示されない)だったのですが、ネットでしらべるとMSのドキュメントではハードウェアベンダーに問い合わせるなどと敷居が高く具体的にどこが引っかかっているかわかりません。そこでほかに方法はないかとしらべやってみたところ、"前提条件をみたしています"まで持って行けたので、本稿を挙げた次第です。 具体的には、以下のようにします。 1-a. 許可するDMA対応バス・デバイスを指定するレジストリの所有権と書き込み設定をおこなう。 以下のレジストリキーの所有者を自分自身(管理ユーザ)のものにし、フルコントロール権を付与する。 HKLM\SYSTEM\CurrentControlSet\Control\DmaSecurity\AllowedBuses もしくは 1-b. MicrosoftよりPsExecをダウンロードし、System権限でRegeditを立ち上げ編集する。 Microsoftより、https://docs.microsoft.com/en-us/sysinternals/downloads/psexec にある こちら をダウンロードし、解凍する。解凍すると、x64の場合、PsExec64.exeがあるので、管理者権限で以下を実行し、システム権限でregeditを立ち上げることが出来るようになる。 cd Downloads\PSTools .\PsExec64.exe -sid C:\Windows\regedit.exe 2-a. パワーシェルスクリプトを実行し、PnPデバイスのうちインスタンスがPCIで始まるものを"AllowedBuses"に追加する。 以下のパワーシェルスクリプトを作成する。たとえばDocuments\allow-dma-bus-device.ps1として作成する。( こちらの記事のものを使用させていただきました: Thank you! ) $tmpfile = "$($env:T...

フレッツ光クロス:MAP-E ROUTER by Debian Box (iptables)

フレッツ光クロスがようやく開通したので、Debianにてrouterを構成し接続してみました。なお、プロバイダーを選ぶにあたっては、IPoE方式がそれぞれ異なるため検討したところ、IPoEでは、MAP-Eでもv6plusとocnバーチャルコネクトがあり、前者がポート数240なのに対し、後者は約4倍のポート数が使えるようなネットの情報をみて、OCNバーチャルコネクトを選択しました。(プロバイダーとしてはぷららです。なおDS-LiteはCE側でのNATではないので今回は見送りました。)そこで、OCN バーチャルコネクトをDebian(iptables)で実現するとどうなるかと思い、ネットの情報を頼りにしつつ、設定した次第です。 実際に試した結果、とりあえず通信できていますが、MAP-Eは本来マッピングルールをマップサーバから取得するはずなので、今回のやり方が正解とはいえませんし、仕様変更されると通信できなくなる可能性があります。あくまでも参考程度ですが、本稿をUPしてみました。 2023/03/16追記: こちら にゲームコンソールNAT越え(Nintendo Switch ナットタイプ A判定)対応版を投稿しました。 2023/03/28追記:※1の記述および3行無効化によりNAT越え(Nintendo Switch ナットタイプ B判定)できるようになりました。 構成は以下の通りです。 ルーターがDebianで回線がOCNバーチャルコネクトであること以外はなにも特別なところはない構成です。 さて、いきなり設定ですが、まず、割り当てられたプレフィックスを確認します。 確認は、 dhclient -6 -d -P enp2s0 とします。出力の中に 前略 RCV: | | X-- IAPREFIX 2400:4050:5c71:af00::/56 後略 このようにプレフィックスが表示されるので、その確認したプレフィックスを書き留めておきます。これを こちらで 入力します。すると、 CE: 2400:4050:5c71:af00:99:f171:c600:2f00 IPv4 アドレス: 153.241.113.198 ポート番号:(1776-1791 2800-2815 3824-3839) 4848-4863 5872-5887 6896-...