共有ネットワークshared-networks設定で同時に二つのIPv6アドレス(GUAとULA)を割り当てられないものかと思い、KEA DHCP6サーバを構成してみたところ、結論からいうと、isc-dhcp-serverと同じで、同時に二つのIPv6アドレスはクライアントには割り当てできませんでしたが、/68、/72, /80(/64ではありません)の付与と下位ルータへのプレフィックス委譲はできたので、取敢えず備忘録として挙げてみることにしました。
構成概要はこちらです。 環境はDebian 12でhyper-vゲストとして構築しています。
早速設定です。設定はR151です。まず初めにisc-dhcp-serverと併存させるため、isc-dhcp-serverはIPv4だけ起動するようにしたのですが、以下の様にしました。
R151の/etc/kea/kea-dhcp6.confは以下の通りです。
R151の/etc/dhcpcd.confの設定は以下の通りです。
以下、上位ルータR15が/68を委譲するisc-dhcp-serverの設定です。
R151の/etc/network/interfaces.d以下は以下の通りです。
続いて、/etc/radvd.confです。
R1511の上位ルータR151(/72を委譲)の/etc/kea/kea-dhcp6.confは以下の通りです。
クライアントはDebian 12とWindows11で動作確認しました。(いずれもアドレスは一つだけ割り当てできました。なお、Androidはそもそもdhcpでアドレスは取らないので、何とかしてほしいのは言うまでもありません。)
ところで、GUAが半固定だと、ある程度以上の規模の場合、基本はULAで構成しておくのが改めて正解だとおもいました。本来なら、DHCPv6で構成せずに、固定でアドレスを直接割り当てするのが筋なのはわかっているんですが、トンネルではなくネィティブで /48以上のIPv6の完全固定サービスが提供されればいいのですが、今のところ見当たりません。(he.netは/48を無料で使えるんですが6in4トンネルです。)ニーズは相当ありそうなので、どこか提供してくれれば流行るのではないかなと思います。
最後になりますが、取敢えずkea-dhcp6を動作させてみた感想は非常に軽いな、という感じでした。isc-dhcp-serverが終息に向かうのかどうかは分かりませんが、設定がややこしいなという印象はありますが、今後に注目したい所です。
今回は以上です。それでは。
構成概要はこちらです。 環境はDebian 12でhyper-vゲストとして構築しています。
早速設定です。設定はR151です。まず初めにisc-dhcp-serverと併存させるため、isc-dhcp-serverはIPv4だけ起動するようにしたのですが、以下の様にしました。
# /etc/defaujlt/isc-dhcp-server -- snip -- INTERFACESv4="eth1" INTERFACESv6=""これだけですが、変更したらisc-dhcp-serverを再起動してください。続いてkea-dhcp6-serverをインストールします。
sudo apt-get install kea-dhcp6-serverここもこれだけで、mariadb(データベース)もインストールされますが、今回は小規模なテスト環境なのでcsvファイルで対応することにしました。
R151の/etc/kea/kea-dhcp6.confは以下の通りです。
{
# DHCPv6 configuration starts on the next line
"Dhcp6": {
# First we set up global values
"valid-lifetime": 4000,
"renew-timer": 1000,
"rebind-timer": 2000,
"preferred-lifetime": 3000,
# Next we set up the interfaces to be used by the server.
"interfaces-config": {
"interfaces": [ "eth1" ],
"service-sockets-max-retries": 5,
"service-sockets-retry-wait-time": 10
},
# And we specify the type of lease database
"lease-database": {
"type": "memfile",
"persist": true,
"name": "/var/lib/kea/kea-leases6.csv"
},
# Finally, we list the subnets from which we will be leasing addresses.
"shared-networks": [
{
"name": "sn15-1000-pl68",
"option-data": [ {
"name": "dns-servers",
"data": "fd98:1:1::64, fd98:1:1::65"
}],
"subnet6": [
{
"id": 1,
"subnet": "fd98:1:1:15:1000::/68",
"pd-pools": [ {
"prefix": "fd98:1:1:15:1100::",
"prefix-len": 68,
"delegated-len": 72
} ],
"reservations": [
{
"duid": "00:03:00:01:00:15:5d:01:9c:50",
"ip-addresses": [ "fd98:1:1:15:1000::1511" ],
"prefixes": [ "fd98:1:1:15:1100::/72" ]
}
],
"interface": "eth1",
"pools": [
{
"pool": "fd98:1:1:15:1000::c001-fd98:1:1:15:1000:ffff:ffff:ffff"
}
]
},
{
"id": 2,
"subnet": "24ww:xxxx:yyyy:zz15:1000::/68",
"pd-pools": [ {
"prefix": "24ww:xxxx:yyyy:zz15:1100::",
"prefix-len": 68,
"delegated-len": 72
} ],
"reservations": [
{
"duid": "00:03:00:01:00:15:5d:01:9c:50",
"ip-addresses": [ "24ww:xxxx:yyyy:zz15:1000::1511" ],
"prefixes": [ "24ww:xxxx:yyyy:zz15:1100::/72" ]
}
],
"interface": "eth1",
"pools": [
{
"pool": "24ww:xxxx:yyyy:zz15:1000::c000-24ww:xxxx:yyyy:zz15:1000:ffff:ffff:ffff"
}
]
}
]
}
],
"loggers": [
{
"name": "kea-dhcp6.packets",
"output_options": [
{
"output": "stdout"
}
],
"severity": "DEBUG",
"debuglevel": 99
}
]
# DHCPv6 configuration ends with the next line
}
}
当方の環境では、上述の設定をして起動したところ、ログを見るとリンクローカルアドレスでsocketを作成できない旨のメッセージがでたので、起動時に5秒待たせるようにしました。
# /lib/systemd/system/kea-dhcp6-server.service --snip-- StateDirectory=kea ExecStartPre=/bin/sleep 5 ExecStart=/usr/sbin/kea-dhcp6 -c /etc/kea/kea-dhcp6.conf --snip--参考までに、ルーティングはfrrのRIP/RIPngを使いました。/etc/frr/frr.confの設定は以下の通りです。
frr version 8.4.4 frr defaults traditional hostname r151 log syslog informational service integrated-vtysh-config ! router rip network 10.1.151.0/24 network eth0 network eth1 version 2 exit ! router ripng redistribute connected network eth0 network eth1 exit !なお、上位ルータR15(Debian 12)から、R151ではradvdでGUAとULAをeth0(WAN側)、dhcpでPDを取得しています。
R151の/etc/dhcpcd.confの設定は以下の通りです。
duid ll
noipv6rs
denyinterfaces eth1
option domain_name_servers
interface eth0
static ip_address=10.1.15.151/24
ipv6rs
ia_pd 0/::/68 eth1/0/68
ia_pd 1/::/68 eth1/0/68
iaidを0と1でプレフィックスを二つ取得するようにしているところが肝です。上位ルータR15(isc-dhcp-server)で下位ルータR151には払い出しPDを固定で割り当てるようにしているので、下位ルータR151はPDを複数取得できています。以下、上位ルータR15が/68を委譲するisc-dhcp-serverの設定です。
# 上位ルータ R15 /etc/dhcp/dhcpd6.conf
--snip--
option dhcp6.name-servers fd98:1:1::64, fd98:1:1::64;
option dhcp6.domain-search "labas.example.local","example.local";
shared-network "Shared-ULA-GUA" {
subnet6 fd98:1:1:15::/64 {
pool6 {
range6 fd98:1:1:15::1000 fd98:1:1:15:0:ffff:ffff:ffff;
option dhcp6.name-servers fd98:1:1::64, fd98:1:1::65;
prefix6 fd98:1:1:15:3000:: fd98:1:1:15:f000:: /68;
}
}
subnet6 24ww:xxxx:yyyy:zz15::/64 {
pool6 {
range6 24ww:xxxx:yyyy:zz15::1000 24ww:xxxx:yyyy:zz15:0:ffff:ffff:ffff;
option dhcp6.name-servers 2606:4700:4700::1111, 2606:4700:4700::1001;
prefix6 24ww:xxxx:yyyy:zz15:3000:: 24ww:xxxx:yyyy:zz15:f000:: /68;
}
}
}
host r151 {
host-identifier option dhcp6.client-id 00:03:00:01:11:22:33:44:55:66;
fixed-prefix6 fd98:1:1:15:1000::/68;
fixed-prefix6 24ww:xxxx:yyyy:zz15:1000::/68;
}
--snip--
なお、R151以下のルータではkea-dhcp6で複数のアドレスを付与できました。R151の/etc/network/interfaces.d以下は以下の通りです。
# /etc/network/interfaces.d/eth0 allow-hotplug eth0 iface eth0 inet static address 10.1.15.151 netmask 255.255.255.0 iface eth0 inet6 dhcp accept_ra 2 request_prefix 1 # /etc/network/interfaces.d/eth1 allow-hotplug eth1 iface eth1 inet static address 10.1.151.1 netmask 255.255.255.0 iface eth1 inet6 manual上位ルータR15と下位ルータR151とはIPv6は/64でつながっているので、RAでアドレスを二つ取得していますが、kea-dhcp6なら下位ルータのLAN側にPDされた固定アドレスを複数わりあてられるので、R15も初めからkea-dhcp6で構成したほうがよさそうです。
続いて、/etc/radvd.confです。
# R15 /etc/radvd.conf
interface eth1
{
AdvSendAdvert on;
AdvManagedFlag on;
AdvOtherConfigFlag on;
prefix ::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
};
# R151 /etc/radvd.conf
interface eth1
{
AdvSendAdvert on;
AdvManagedFlag on;
AdvOtherConfigFlag on;
prefix ::/68
{
AdvOnLink on;
AdvAutonomous off;
AdvRouterAddr on;
};
};
# R1511 /etc/radvd.conf
interface eth1
{
AdvSendAdvert on;
AdvManagedFlag on;
AdvOtherConfigFlag on;
prefix ::/72
{
AdvOnLink on;
AdvAutonomous off;
AdvRouterAddr on;
};
};
# R15111 /etc/radvd.conf
interface eth1
{
AdvSendAdvert on;
AdvManagedFlag on;
AdvOtherConfigFlag on;
prefix ::/80
{
AdvOnLink on;
AdvAutonomous off;
AdvRouterAddr on;
};
};
下位ルータR151(kea-dhcp6)から、さらに下位のルータR1511へは固定PDを設定したところ、LAN側に二つ設定できました。(2024/06/16ルータはwan側にプレフィックスが不要な為、修正)R1511の上位ルータR151(/72を委譲)の/etc/kea/kea-dhcp6.confは以下の通りです。
# R151 /etc/kea/kea-dhcp6.conf
--snip--
"subnet6": [
{
"id": 1,
"subnet": "fd98:1:1:15:1000::/68",
"pd-pools": [ {
"prefix": "fd98:1:1:15:1100::",
"prefix-len": 68,
"delegated-len": 72
} ],
"reservations": [
{
"duid": "00:03:00:01:00:11:22:33:44:50",
"ip-addresses": [ "fd98:1:1:15:1000::1511" ],
"prefixes": [ "fd98:1:1:15:1100::/72" ]
}
],
"interface": "eth1",
"pools": [
{
"pool": "fd98:1:1:15:1000::c001-fd98:1:1:15:1000:ffff:ffff:ffff"
}
]
},
{
"id": 2,
"subnet": "24ww:xxxx:yyyy:zz15:1000::/68",
"pd-pools": [ {
"prefix": "24ww:xxxx:yyyy:zz15:1100::",
"prefix-len": 68,
"delegated-len": 72
} ],
"reservations": [
{
"duid": "00:03:00:01:00:11:22:33:44:50",
"ip-addresses": [ "24ww:xxxx:yyyy:zz15:1000::1511" ],
"prefixes": [ "24ww:xxxx:yyyy:zz15:1100::/72" ]
}
],
"interface": "eth1",
"pools": [
{
"pool": "24ww:xxxx:yyyy:zz15:1000::c000-24ww:xxxx:yyyy:zz15:1000:ffff:ffff:ffff"
}
]
}
]
--snip--
次は、R1511(/72の委譲を受ける側)の/etc/dhcpcd.confは以下の通りです。(2024/06/16 ルータはwan側にプレフィックスが不要な為、修正)
duid ll
noipv6rs
denyinterfaces eth1
option domain_name_servers
interface eth0
static ip_address=10.1.151.151/24
ipv6rs
ipv6ra_noautoconf
ia_pd 0/::/72 eth1/0/72
ia_pd 1/::/72 eth1/0/72
R1511では以下の様になります。(2024/06/16 ルータはwan側にプレフィックスが不要な為、修正)
user1000@r1511:~$ ip a 1: lo:追記:/etc/sysctl.confなどで共通で以下の設定をしています。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:50 brd ff:ff:ff:ff:ff:ff inet 10.1.151.151/24 brd 10.1.151.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::211:22ff:fe33:4450/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:51 brd ff:ff:ff:ff:ff:ff inet 172.16.15.11/24 brd 172.16.15.255 scope global eth1 valid_lft forever preferred_lft forever inet6 fd98:1:1:15:1100::1/72 scope global dynamic noprefixroute valid_lft 3899sec preferred_lft 2899sec inet6 24ww:xxxx:yyyy:zz15:1100::1/72 scope global dynamic noprefixroute valid_lft 3899sec preferred_lft 2899sec inet6 fe80::211:22ff:fe33:4451/64 scope link valid_lft forever preferred_lft forever
net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1なお、R1511からさらに下位のR15111への/80の委譲もkea-dhcp6で出来ており、また、配下のクライアントでIPv6/IPv4ともに通信できました。
クライアントはDebian 12とWindows11で動作確認しました。(いずれもアドレスは一つだけ割り当てできました。なお、Androidはそもそもdhcpでアドレスは取らないので、何とかしてほしいのは言うまでもありません。)
ところで、GUAが半固定だと、ある程度以上の規模の場合、基本はULAで構成しておくのが改めて正解だとおもいました。本来なら、DHCPv6で構成せずに、固定でアドレスを直接割り当てするのが筋なのはわかっているんですが、トンネルではなくネィティブで /48以上のIPv6の完全固定サービスが提供されればいいのですが、今のところ見当たりません。(he.netは/48を無料で使えるんですが6in4トンネルです。)ニーズは相当ありそうなので、どこか提供してくれれば流行るのではないかなと思います。
最後になりますが、取敢えずkea-dhcp6を動作させてみた感想は非常に軽いな、という感じでした。isc-dhcp-serverが終息に向かうのかどうかは分かりませんが、設定がややこしいなという印象はありますが、今後に注目したい所です。
今回は以上です。それでは。

コメント
コメントを投稿