概要
ある日仕事のできない上司から「isc-dhcpを使ってdhcpv6アドレスを配布したいが動かない」と言われ相談を受けました。

上司が作成していたシステムは下記のようなものでした。
前提条件
- 操作を行えるのはDHCP server、クライアントです
- プレフィックス・GWに関しては配布できていなくても良いです
初期状態
クライアントにアドレスが割り振られず、 ping fc00:1:1:1::1
をしても応答がない。
終了状態
クライアントにアドレスが配布されてあり、「fc00:1:1:1::1」に対しpingコマンドにて応答があることを確認する。
解説
こんにちは。この問題を作問したHickyです。今回の問題は、IPv6、アドレス配布に関する基礎知識を問う問題でした。
まず初めにクライアントのDHCPの状態を確認します。
[email protected]:~$ ip a <---抜粋---> 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 9c:a3:ba:20:a0:fc brd ff:ff:ff:ff:ff:ff
これよりDHCP待ち受けインターフェースにアドレスが配布されていないことが確認できます。なのでクライアントのネットワーク設定を確認します。
[email protected]:~$ sudo cat /etc/netplan/01-netcfg.yaml network: ethernets: eth0: addresses: - 192.168.3.2/24 dhcp4: 'no' dhcp6: 'no' gateway4: 192.168.3.254 renderer: networkd version: 2
ここでeth1に関するDHCPの設定が不足していることが確認できます。そこで下記のようにファイルを書き換えます。
[email protected]:~$ sudo cat /etc/netplan/01-netcfg.yaml network: ethernets: eth0: addresses: - 192.168.3.2/24 dhcp4: 'no' dhcp6: 'no' gateway4: 192.168.3.254 eth1: dhcp6: 'yes' accept-ra: 'yes' renderer: networkd version: 2
そして上記の設定を適応させ、リンクローカルアドレズが配布されていることを確認できます。
[email protected]:~$ ip a <---抜粋---> 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 9c:a3:ba:20:a0:fc brd ff:ff:ff:ff:ff:ff inet6 fe80::9ea3:baff:fe20:a0fc/64 scope link valid_lft forever preferred_lft forever
次にDHCPサーバーが動作しているホストにてDHCPサービスの動作について確認します。
[email protected]:~$ sudo systemctl status isc-dhcp-server6 ● isc-dhcp-server6.service - ISC DHCP IPv6 server Loaded: loaded (/lib/systemd/system/isc-dhcp-server6.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2021-08-30 23:10:16 JST; 4min 1s ago Docs: man:dhcpd(8) Main PID: 414 (dhcpd) Tasks: 4 (limit: 1108) Memory: 5.1M CGroup: /system.slice/isc-dhcp-server6.service └─414 dhcpd -user dhcpd -group dhcpd -f -6 -pf /run/dhcp-server/dhcpd6.pid -cf /etc/dhcp/dhcpd6.conf Aug 30 23:10:16 dhserver sh[414]: ** Ignoring requests on eth0. If this is not what Aug 30 23:10:16 dhserver sh[414]: you want, please write a subnet6 declaration Aug 30 23:10:16 dhserver sh[414]: in your dhcpd.conf file for the network segment Aug 30 23:10:16 dhserver sh[414]: to which interface eth0 is attached. ** Aug 30 23:10:16 dhserver dhcpd[414]: ** Ignoring requests on eth0. If this is not what Aug 30 23:10:16 dhserver dhcpd[414]: you want, please write a subnet6 declaration Aug 30 23:10:16 dhserver dhcpd[414]: in your dhcpd.conf file for the network segment Aug 30 23:10:16 dhserver dhcpd[414]: to which interface eth0 is attached. ** Aug 30 23:10:16 dhserver dhcpd[414]: Aug 30 23:10:16 dhserver dhcpd[414]: Server starting service. [email protected]:~$
配布インターフェースに問題がありそうなので下記のようにインターフェースの設定を投入します。
[email protected]:~$ sudo cat /etc/default/isc-dhcp-server # Defaults for isc-dhcp-server (sourced by /etc/init.d/isc-dhcp-server) # Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf). #DHCPDv4_CONF=/etc/dhcp/dhcpd.conf #DHCPDv6_CONF=/etc/dhcp/dhcpd6.conf # Path to dhcpd's PID file (default: /var/run/dhcpd.pid). #DHCPDv4_PID=/var/run/dhcpd.pid #DHCPDv6_PID=/var/run/dhcpd6.pid # Additional options to start dhcpd with. # Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead #OPTIONS="" # On what interfaces should the DHCP server (dhcpd) serve DHCP requests? # Separate multiple interfaces with spaces, e.g. "eth0 eth1". INTERFACESv4="" INTERFACESv6="eth1"
その後再度DHCPサービスの状態を確認すると正常に動作していることを確認できます。
[email protected]:~$ sudo systemctl status isc-dhcp-server6 ● isc-dhcp-server6.service - ISC DHCP IPv6 server Loaded: loaded (/lib/systemd/system/isc-dhcp-server6.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2021-08-30 23:39:30 JST; 2s ago Docs: man:dhcpd(8) Main PID: 948 (dhcpd) Tasks: 4 (limit: 1108) Memory: 2.3M CGroup: /system.slice/isc-dhcp-server6.service └─948 dhcpd -user dhcpd -group dhcpd -f -6 -pf /run/dhcp-server/dhcpd6.pid -cf /etc/dhcp/dhcpd6.conf eth1 Aug 30 23:39:30 dhserver sh[948]: PID file: /run/dhcp-server/dhcpd6.pid Aug 30 23:39:30 dhserver dhcpd[948]: Wrote 2 NA, 0 TA, 0 PD leases to lease file. Aug 30 23:39:30 dhserver sh[948]: Wrote 2 NA, 0 TA, 0 PD leases to lease file. Aug 30 23:39:30 dhserver dhcpd[948]: Bound to *:547 Aug 30 23:39:30 dhserver sh[948]: Bound to *:547 Aug 30 23:39:30 dhserver sh[948]: Listening on Socket/7/eth1/fc00:1:1:1::/64 Aug 30 23:39:30 dhserver sh[948]: Sending on Socket/7/eth1/fc00:1:1:1::/64 Aug 30 23:39:30 dhserver dhcpd[948]: Listening on Socket/7/eth1/fc00:1:1:1::/64 Aug 30 23:39:30 dhserver dhcpd[948]: Sending on Socket/7/eth1/fc00:1:1:1::/64 Aug 30 23:39:30 dhserver dhcpd[948]: Server starting service.
クライアントにてIPアドレスを確認すると配布できていないことが確認できます。
[email protected]:~$ ip a <---抜粋---> 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 9c:a3:ba:20:a0:fc brd ff:ff:ff:ff:ff:ff inet6 fe80::9ea3:baff:fe20:a0fc/64 scope link valid_lft forever preferred_lft forever
DHCPv6でアドレスを配布するためにはRAのMフラグを立てなければいけないので、下記のようなファイルを作成しRadvdを起動させます。
[email protected]:~$ sudo cat /etc/radvd.conf interface eth1 { AdvSendAdvert on; AdvManagedFlag on; prefix fc00:1:1:0::/64 { AdvOnLink off; AdvAutonomous off; AdvRouterAddr off; }; };
Radvdの状態を確認すると、正常に動作していることを確認できます。
[email protected]:~$ sudo systemctl start radvd.service [email protected]:~$ sudo systemctl status radvd.service ● radvd.service - Router advertisement daemon for IPv6 Loaded: loaded (/lib/systemd/system/radvd.service; disabled; vendor preset: enabled) Active: active (running) since Mon 2021-08-30 23:49:57 JST; 4s ago Docs: man:radvd(8) Process: 1074 ExecStartPre=/usr/sbin/radvd --logmethod stderr_clean --configtest (code=exited, status=0/SUCCESS) Process: 1083 ExecStart=/usr/sbin/radvd --logmethod stderr_clean (code=exited, status=0/SUCCESS) Main PID: 1084 (radvd) Tasks: 2 (limit: 1108) Memory: 788.0K CGroup: /system.slice/radvd.service ├─1084 /usr/sbin/radvd --logmethod stderr_clean └─1085 /usr/sbin/radvd --logmethod stderr_clean Aug 30 23:49:57 dhserver systemd[1]: Starting Router advertisement daemon for IPv6... Aug 30 23:49:57 dhserver radvd[1074]: config file, /etc/radvd.conf, syntax ok Aug 30 23:49:57 dhserver radvd[1083]: version 2.17 started Aug 30 23:49:57 dhserver radvd[1083]: IPv6 forwarding setting is: 0, should be 1 or 2 Aug 30 23:49:57 dhserver radvd[1083]: IPv6 forwarding seems to be disabled, but continuing anyway Aug 30 23:49:57 dhserver systemd[1]: Started Router advertisement daemon for IPv6.
その後クライアント側でnetplanを再起動しアドレスが配布されていることを確認します。
[email protected]:~$ sudo netplan apply [email protected]:~$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> 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 valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 9c:a3:ba:25:67:77 brd ff:ff:ff:ff:ff:ff inet 192.168.3.2/24 brd 192.168.3.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::9ea3:baff:fe25:6777/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 9c:a3:ba:20:a0:fc brd ff:ff:ff:ff:ff:ff inet6 fc00:1:1:1::2:d32d/128 scope global tentative dynamic noprefixroute valid_lft 2591915sec preferred_lft 604715sec inet6 fe80::9ea3:baff:fe20:a0fc/64 scope link valid_lft forever preferred_lft forever
DHCPサーバーの状態を確認するとDHCPサーバーがアドレスを配布していることを確認できます。
[email protected]:~$ sudo systemctl status isc-dhcp-server6 ● isc-dhcp-server6.service - ISC DHCP IPv6 server Loaded: loaded (/lib/systemd/system/isc-dhcp-server6.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2021-08-30 23:39:30 JST; 16min ago Docs: man:dhcpd(8) Main PID: 948 (dhcpd) Tasks: 4 (limit: 1108) Memory: 2.4M CGroup: /system.slice/isc-dhcp-server6.service └─948 dhcpd -user dhcpd -group dhcpd -f -6 -pf /run/dhcp-server/dhcpd6.pid -cf /etc/dhcp/dhcpd6.conf eth1 Aug 30 23:49:58 dhserver dhcpd[948]: Request message from fe80::9ea3:baff:fe20:a0fc port 546, transaction ID 0x16F6D100 Aug 30 23:49:58 dhserver dhcpd[948]: Reply NA: address fc00:1:1:1::2:d32d to client with duid 00:02:00:00:ab:11:1c:ef:e0:6a:e7:bd:0c:ac iaid = 1079403426 valid for 2592000 seconds Aug 30 23:49:58 dhserver dhcpd[948]: Sending Reply to fe80::9ea3:baff:fe20:a0fc port 546 Aug 30 23:51:22 dhserver dhcpd[948]: Solicit message from fe80::9ea3:baff:fe20:a0fc port 546, transaction ID 0x55698900 Aug 30 23:51:22 dhserver dhcpd[948]: Advertise NA: address fc00:1:1:1::2:d32d to client with duid 00:02:00:00:ab:11:1c:ef:e0:6a:e7:bd:0c:ac iaid = 1079403426 valid for 2592000 seconds Aug 30 23:51:22 dhserver dhcpd[948]: Sending Advertise to fe80::9ea3:baff:fe20:a0fc port 546 Aug 30 23:51:23 dhserver dhcpd[948]: Request message from fe80::9ea3:baff:fe20:a0fc port 546, transaction ID 0x6577B800 Aug 30 23:51:23 dhserver dhcpd[948]: Reply NA: address fc00:1:1:1::2:d32d to client with duid 00:02:00:00:ab:11:1c:ef:e0:6a:e7:bd:0c:ac iaid = 1079403426 valid for 2592000 seconds Aug 30 23:51:23 dhserver dhcpd[948]: Reusing lease for: fc00:1:1:1::2:d32d, age 85 secs < 25%, sending shortened lifetimes - preferred: 604715, valid 2591915 Aug 30 23:51:23 dhserver dhcpd[948]: Sending Reply to fe80::9ea3:baff:fe20:a0fc port 546
pingコマンドを用いて「fc00:1:1:1::1」との疎通確認を行います。
[email protected]:~$ ping fc00:1:1:1::1 PING fc00:1:1:1::1(fc00:1:1:1::1) 56 data bytes 64 bytes from fc00:1:1:1::1: icmp_seq=1 ttl=64 time=0.816 ms 64 bytes from fc00:1:1:1::1: icmp_seq=2 ttl=64 time=0.295 ms 64 bytes from fc00:1:1:1::1: icmp_seq=3 ttl=64 time=0.314 ms ^C --- fc00:1:1:1::1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2026ms rtt min/avg/max/mdev = 0.295/0.475/0.816/0.241 ms