フレッツ光の場合、宅内のルータが何であれ、半固定のプレフィックスが降りてきます。一見なんの変哲もないように思えますが、よく考えてみるとDHCPv6クライアントとしてのルータのhw-addressやduidが異なっても同じプレフィックスが降りてくるのは不思議だなと思いました。
フレッツ光(クロス含む)で使われている光回線では、局側に10G-EPONという装置が導入されており、1PON(Passive Optical Network)あたり最大(おそらく4x8=)32分岐で各加入者宅ONUと通信します。つまり、1PONあたり32ユーザで回線を共有しているわけですが、10G-EPON <--> ONU ではONUに半固定のプレフィックスが降りてきます。回線共有しているのにセグメントの異なる半固定のプレフックスが降りてくるというのは、やはり不思議です(そう思うのは筆者だけかもしれませんが。)おそらくは、回線は共有していても、PON<-->ONU間は専用線のイメージに近いのだろうと思います。そこでしらべたところ、以下の資料が見つかりました。
EPONおよび10G-EPONの概要
(引用以下)
EPONダウンストリーム通信の原理
EPONはダウンストリーム方向にブロードキャストモードを採用しています。 すべてのONUは同じデータを受信できます。異なるONUデータはLLID(論理リンク識別子)によって区別され、ONUはブロードキャストメッセージをフィルタリングして独自のデータを受信します。
異なるONUデータはLLID(論理リンク識別子)によって区別され、ONUはブロードキャストメッセージをフィルタリングして独自のデータを受信します。
EPONアップストリーム通信の原理
ONUからOLTへのアップストリーム方向では、時分割多元接続技術(TDMA)を適用して、タイムスロットでアップストリームトラフィックを送信します。
(引用以上)
凡そですが、ビンゴです。イメージとしては1PONあたり最大32セグメントを下りではLLIDを使って"マルチプレクス”して、ONUで"デマルチプレクス"するという感じだと思います。つまり、回線は共有しているがPON仮想1ポート<-->1ONU間は専用線のイメージに近く、PON側では1ポートを1ネットワークインターフェースとしてみなしているはずだということは分かりました。
前置きが長くなりましたが、なぜこのような話を前振りしたのかというと、以下の様に親ルータから子ルータに子ルータのHW/DUIDを問わずにkea-dhcp6-serverで固定のプレフィックスを割り当てたかったからです。 テストはHyper-vで行っているのですが、(仮想)物理配線としては、親ルータR20から子ルータ群21-24へはハブを介して共有接続しています。このため、このままだと子ルータにそれぞれ固定のプレフィックスを割り当てたい場合はduidなりhw-addressなりで割り当て予約をする必要がありますが、表題の意図には沿いません。また、実機で構成する場合を考慮し、親ルータにNICを増設して専用線の状態にするのはコスト的に問題があります。そこで表題の通り、R20-R21, R20-R22, R20-R23, R20-R24 間でそれぞれtagged vlanを設定して、セグメントを分けることにしました。これでようやくわかっていただけたと思いますが、前振りとおなじく、親ルータ子ルータ間は共有ネットワークを使うがtagged vlanをつかっているので専用線のイメージに近いということです。(なお、後述しますが仮想物理ポートを増設し専用線として構成する方法でも行けました。)
仮想物理配線とセグメント分けはこれでOKなんですが、問題が残っています。それが表題の様に”dhcpv6 クライアントを特定せずに kea dhcpv6 でvlan毎に固定のdhcpv6 pd を行う”にはどうすればよいかです。
これは、説明するよりも実際の設定を見てもらう方が話が早いので、以下にkea-dhcp6.confの設定を抜粋しておきます。
R25:vlan 接続
今回は以上です。それでは。
追記1:子ルータにはIA_NAではアドレスをWAN側に取得させたくなかったのですが、Debian12/dhcpcdクライアントではIA_NAを行わないのに、OpenWRTではIA_NAでアドレスをWAN側に取得されてしまっていました。ですが、kea-dhcp6.confで "pools"をコメント化したところ、OpenWRTでもIA_NA取得が行われなくなり、IA_PDのみ取得する所望の動作となりましたので追記しておきます。
フレッツ光(クロス含む)で使われている光回線では、局側に10G-EPONという装置が導入されており、1PON(Passive Optical Network)あたり最大(おそらく4x8=)32分岐で各加入者宅ONUと通信します。つまり、1PONあたり32ユーザで回線を共有しているわけですが、10G-EPON <--> ONU ではONUに半固定のプレフィックスが降りてきます。回線共有しているのにセグメントの異なる半固定のプレフックスが降りてくるというのは、やはり不思議です(そう思うのは筆者だけかもしれませんが。)おそらくは、回線は共有していても、PON<-->ONU間は専用線のイメージに近いのだろうと思います。そこでしらべたところ、以下の資料が見つかりました。
EPONおよび10G-EPONの概要
(引用以下)
EPONダウンストリーム通信の原理
EPONはダウンストリーム方向にブロードキャストモードを採用しています。 すべてのONUは同じデータを受信できます。異なるONUデータはLLID(論理リンク識別子)によって区別され、ONUはブロードキャストメッセージをフィルタリングして独自のデータを受信します。
異なるONUデータはLLID(論理リンク識別子)によって区別され、ONUはブロードキャストメッセージをフィルタリングして独自のデータを受信します。
EPONアップストリーム通信の原理
ONUからOLTへのアップストリーム方向では、時分割多元接続技術(TDMA)を適用して、タイムスロットでアップストリームトラフィックを送信します。
(引用以上)
凡そですが、ビンゴです。イメージとしては1PONあたり最大32セグメントを下りではLLIDを使って"マルチプレクス”して、ONUで"デマルチプレクス"するという感じだと思います。つまり、回線は共有しているがPON仮想1ポート<-->1ONU間は専用線のイメージに近く、PON側では1ポートを1ネットワークインターフェースとしてみなしているはずだということは分かりました。
前置きが長くなりましたが、なぜこのような話を前振りしたのかというと、以下の様に親ルータから子ルータに子ルータのHW/DUIDを問わずにkea-dhcp6-serverで固定のプレフィックスを割り当てたかったからです。 テストはHyper-vで行っているのですが、(仮想)物理配線としては、親ルータR20から子ルータ群21-24へはハブを介して共有接続しています。このため、このままだと子ルータにそれぞれ固定のプレフィックスを割り当てたい場合はduidなりhw-addressなりで割り当て予約をする必要がありますが、表題の意図には沿いません。また、実機で構成する場合を考慮し、親ルータにNICを増設して専用線の状態にするのはコスト的に問題があります。そこで表題の通り、R20-R21, R20-R22, R20-R23, R20-R24 間でそれぞれtagged vlanを設定して、セグメントを分けることにしました。これでようやくわかっていただけたと思いますが、前振りとおなじく、親ルータ子ルータ間は共有ネットワークを使うがtagged vlanをつかっているので専用線のイメージに近いということです。(なお、後述しますが仮想物理ポートを増設し専用線として構成する方法でも行けました。)
仮想物理配線とセグメント分けはこれでOKなんですが、問題が残っています。それが表題の様に”dhcpv6 クライアントを特定せずに kea dhcpv6 でvlan毎に固定のdhcpv6 pd を行う”にはどうすればよいかです。
これは、説明するよりも実際の設定を見てもらう方が話が早いので、以下にkea-dhcp6.confの設定を抜粋しておきます。
// 前略
"interfaces-config": {
"interfaces": [ "eth1.21", "eth1.22", "eth1.23", "eth1.24" ],
"service-sockets-max-retries": 5,
"service-sockets-retry-wait-time": 10
},
// 中略
"subnet6": [
{
"id": 21,
"subnet": "2111:2222:3333::21/128",
"interface": "eth1.21",
"pools": [ { "pool": "2111:2222:3333::21/128" } ],
"pd-pools": [ { "prefix": "2111:2222:3333:1000::", "prefix-len": 52, "delegated-len": 52 } ],
"option-data": [
{ "name": "dns-servers", "data": "fd98:1:1::64, fd98:1:1::65" },
{ "name": "domain-search", "data": "labo.mydomain.local, mydomain.local" }
]
},
{
"id": 22,
"subnet": "2111:2222:3333::22/128",
"interface": "eth1.22",
"pools": [ { "pool": "2111:2222:3333::22/128" } ],
"pd-pools": [ { "prefix": "2111:2222:3333:2000::", "prefix-len": 52, "delegated-len": 52 } ],
"option-data": [
{ "name": "dns-servers", "data": "fd98:1:1::64, fd98:1:1::65" },
{ "name": "domain-search", "data": "labo.mydomain.local, mydomain.local" }
]
},
{
"id": 23,
"subnet": "2111:2222:3333::23/128",
"interface": "eth1.23",
"pools": [ { "pool": "2111:2222:3333::23/128" } ],
"pd-pools": [ { "prefix": "2111:2222:3333:3000::", "prefix-len": 52, "delegated-len": 52 } ],
"option-data": [
{ "name": "dns-servers", "data": "fd98:1:1::64, fd98:1:1::65" },
{ "name": "domain-search", "data": "labo.mydomain.local, mydomain.local" }
]
},
{
"id": 24,
"subnet": "2111:2222:3333::24/128",
"interface": "eth1.24",
"pools": [ { "pool": "2111:2222:3333::24/128" } ],
"pd-pools": [ { "prefix": "2111:2222:3333:4000::", "prefix-len": 52, "delegated-len": 52 } ],
"option-data": [
{ "name": "dns-servers", "data": "fd98:1:1::64, fd98:1:1::65" },
{ "name": "domain-search", "data": "labo.mydomain.local, mydomain.local" }
]
}
],
// 後略
つまり、subnetもpoolsも/128の"点"でリースし、pd-poolsもprefix-len52かつdelegated-len52の指定で"1PDのみ"リースしているという事です。かなり強引で美しくないのですが、所要の目的は達成できてはいます。なお、親ルータR20の/etc/radvd.confは以下の通りです。
interface eth1.21 {
AdvSendAdvert on;
AdvManagedFlag on;
AdvOtherConfigFlag on;
AdvReachableTime 300000;
AdvRetransTimer 10000;
AdvCurHopLimit 64;
AdvDefaultLifetime 1800;
AdvHomeAgentFlag off;
AdvDefaultPreference medium;
AdvSourceLLAddress on;
AdvLinkMTU 1500;
};
# 後略
子ルータR21の/etc/dhcpcd.confは以下の通りです。
duid ll noipv6rs noipv4ll denyinterfaces eth0 eth1 option domain_name_servers, domain_search interface eth0.21 static ip_address=10.1.21.2/24 ipv6rs ipv6ra_noautoconf ia_pd 0/::/52 eth1/0/52子ルータR21での $ ip a の結果は以下の通りです。(注:まだeth1以下のIPv4設定などは入れていません。)
1: lo:子ルータR21の/etc/network/interfaces.d以下はこのようにしました。mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:11:22:33:44:0d brd ff:ff:ff:ff:ff:ff inet6 fe80::211:22ff:fe33:440d/64 scope link valid_lft forever preferred_lft forever 3: eth1: mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:11:22:33:44:6d brd ff:ff:ff:ff:ff:ff inet6 2111:2222:3333:1000::1/52 scope global dynamic noprefixroute valid_lft 3340sec preferred_lft 2340sec inet6 fe80::211:22ff:fe33:446d/64 scope link valid_lft forever preferred_lft forever 4: eth0.21@eth0: mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 00:11:22:33:44:0d brd ff:ff:ff:ff:ff:ff inet 10.1.21.2/24 brd 10.1.21.255 scope global noprefixroute eth0.21 valid_lft forever preferred_lft forever inet6 fe80::211:22ff:fe33:440d/64 scope link valid_lft forever preferred_lft forever
user1000@r21:/root$ cat /etc/network/interfaces.d/eth0 auto eth0 iface eth0 inet manual user1000@r21:/root$ cat /etc/network/interfaces.d/eth1 auto eth1 iface eth1 inet manual user1000@r21:/root$ cat /etc/network/interfaces.d/eth0.21 auto eth0.21 iface eth0.21 inet manual子ルータのkea-dhcp4/6の設定や親・子ルータの/etc/frr/frr.confなどは割愛しますが、tagged vlanを使うと親ルータのNICは、共有ネットワークではあるがvlanを切っているので1ポートで済むという事です。なお、tagged vlanを設定する前に(仮想)物理NICでセグメントを分けた場合も所望の動作を確認はしていますので、お好きなほうでいいとは思います。その場合は、ほぼ同じですが/etc/kea/kea-dhcp6.confは以下の様になります。(抜粋、eth26とeth27が専用インターフェース)
// 前略
"interfaces": [ "eth1", "eth1.21", "eth1.22", "eth1.23", "eth1.24", "eth1.25", "eth26", "eth27" ],
// 中略
{
"id": 26,
"subnet": "2001:470:f104::26/128",
"interface": "eth26",
"pools": [ { "pool": "2001:470:f104::26/128" } ],
"pd-pools": [ { "prefix": "2001:470:f104:6000::", "prefix-len": 52, "delegated-len": 52 } ],
"option-data": [
{ "name": "dns-servers", "data": "fd98:1:1::64, fd98:1:1::65" },
{ "name": "domain-search", "data": "labo.mydomain.local, mydomain.local" }
]
},
{
"id": 27,
"subnet": "2001:470:f104::27/128",
"interface": "eth27",
"pools": [ { "pool": "2001:470:f104::27/128" } ],
"pd-pools": [ { "prefix": "2001:470:f104:6000::", "prefix-len": 52, "delegated-len": 52 } ],
"option-data": [
{ "name": "dns-servers", "data": "fd98:1:1::64, fd98:1:1::65" },
{ "name": "domain-search", "data": "labo.mydomain.local, mydomain.local" }
]
}
なお、子ルータはDebian12ベースのものとOpenWRTでテストし、共にPrefixの取得が出来ました。参考までにOpenWRT(R25vlan接続とR27専用接続)のip aを掲載しておきます。R25:vlan 接続
BusyBox v1.36.1 (2024-03-22 22:09:42 UTC) built-in shell (ash)
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
OpenWrt 23.05.3, r23809-234f1a2efa
-----------------------------------------------------
root@R25:~# ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc mq master br-lan state UP qlen 1000
link/ether 00:11:22:33:44:74 brd ff:ff:ff:ff:ff:ff
3: eth1: mtu 1500 qdisc mq state UP qlen 1000
link/ether 00:11:22:33:44:75 brd ff:ff:ff:ff:ff:ff
inet6 fe80::211:22ff:fe33:4475/64 scope link
valid_lft forever preferred_lft forever
4: br-lan: mtu 1500 qdisc noqueue state UP qlen 1000
link/ether 00:11:22:33:44:74 brd ff:ff:ff:ff:ff:ff
inet 10.1.251.1/24 brd 10.1.251.255 scope global br-lan
valid_lft forever preferred_lft forever
inet6 2111:2222:3333:5000::1/64 scope global dynamic noprefixroute
valid_lft 3721sec preferred_lft 2721sec
inet6 fe80::211:22ff:fe33:4474/64 scope link
valid_lft forever preferred_lft forever
5: eth1.25@eth1: mtu 1500 qdisc noqueue state UP qlen 1000
link/ether 00:11:22:33:44:75 brd ff:ff:ff:ff:ff:ff
inet 10.1.25.2/24 brd 10.1.25.255 scope global eth1.25
valid_lft forever preferred_lft forever
inet6 2111:2222:3333::25/128 scope global dynamic noprefixroute
valid_lft 3722sec preferred_lft 2722sec
inet6 fe80::211:22ff:fe33:4475/64 scope link
valid_lft forever preferred_lft forever
R27:専用接続
BusyBox v1.36.1 (2024-03-22 22:09:42 UTC) built-in shell (ash)
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
OpenWrt 23.05.3, r23809-234f1a2efa
-----------------------------------------------------
root@R27:~# ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc mq master br-lan state UP qlen 1000
link/ether 00:11:22:33:44:78 brd ff:ff:ff:ff:ff:ff
3: eth1: mtu 1500 qdisc mq state UP qlen 1000
link/ether 00:11:22:33:44:79 brd ff:ff:ff:ff:ff:ff
inet 10.1.27.2/24 brd 10.1.27.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 2111:2222:3333::27/128 scope global dynamic noprefixroute
valid_lft 3980sec preferred_lft 2980sec
inet6 fe80::211:22ff:fe33:4479/64 scope link
valid_lft forever preferred_lft forever
4: br-lan: mtu 1500 qdisc noqueue state UP qlen 1000
link/ether 00:11:22:33:44:78 brd ff:ff:ff:ff:ff:ff
inet 10.1.127.1/24 brd 10.1.127.255 scope global br-lan
valid_lft forever preferred_lft forever
inet6 2111:2222:3333:7000::1/64 scope global dynamic noprefixroute
valid_lft 3980sec preferred_lft 2980sec
inet6 fe80::211:22ff:fe33:4478/64 scope link
valid_lft forever preferred_lft forever
これで子ルータがHGWっぽく動作するようになったので良しとしています。今回は以上です。それでは。
追記1:子ルータにはIA_NAではアドレスをWAN側に取得させたくなかったのですが、Debian12/dhcpcdクライアントではIA_NAを行わないのに、OpenWRTではIA_NAでアドレスをWAN側に取得されてしまっていました。ですが、kea-dhcp6.confで "pools"をコメント化したところ、OpenWRTでもIA_NA取得が行われなくなり、IA_PDのみ取得する所望の動作となりましたので追記しておきます。
# R20 /etc/kea/kea-dhcp6.conf (抜粋)
{
"id": 27,
"subnet": "2001:470:f104::27/128",
"interface": "eth27",
//"pools": [ { "pool": "2001:470:f104::27/128" } ],
"pd-pools": [ { "prefix": "2001:470:f104:7000::", "prefix-len": 52, "delegated-len": 52 } ],
"option-data": [
{ "name": "dns-servers", "data": "fd98:1:1::64, fd98:1:1::65" },
{ "name": "domain-search", "data": "labo.mydomain.local, mydomain.local" }
]
}
# R27 OpenWrt専用接続子ルータ(ip a 抜粋, eth1はwan側デバイス)
3: eth1: mtu 1500 qdisc mq state UP qlen 1000
link/ether 00:11:22:33:44:79 brd ff:ff:ff:ff:ff:ff
inet 10.1.27.2/24 brd 10.1.27.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::211:22ff:fe33:4479/64 scope link
valid_lft forever preferred_lft forever

コメント
コメントを投稿