アドレスが配布できない・・・
概要
ある日仕事のできない上司から「isc-dhcpを使ってdhcpv6アドレスを配布したいが動かない」と言われ相談を受けました。
上司が作成していたシステムは下記のようなものでした。
前提条件
- 操作を行えるのはDHCP server、クライアントです
- プレフィックス・GWに関しては配布できていなくても良いです
初期状態
クライアントにアドレスが割り振られず、 ping fc00:1:1:1::1
をしても応答がない。
終了状態
クライアントにアドレスが配布されてあり、「fc00:1:1:1::1」に対しpingコマンドにて応答があることを確認する。
解説
こんにちは。この問題を作問したHickyです。今回の問題は、IPv6、アドレス配布に関する基礎知識を問う問題でした。
まず初めにクライアントのDHCPの状態を確認します。
ictsc@dhclient:~$ 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待ち受けインターフェースにアドレスが配布されていないことが確認できます。なのでクライアントのネットワーク設定を確認します。
ictsc@dhclient:~$ 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の設定が不足していることが確認できます。そこで下記のようにファイルを書き換えます。
ictsc@dhclient:~$ 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
そして上記の設定を適応させ、リンクローカルアドレズが配布されていることを確認できます。
ictsc@dhclient:~$ 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サービスの動作について確認します。
ictsc@dhserver:~$ 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.
ictsc@dhserver:~$
配布インターフェースに問題がありそうなので下記のようにインターフェースの設定を投入します。
ictsc@dhserver:~$ 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サービスの状態を確認すると正常に動作していることを確認できます。
ictsc@dhserver:~$ 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アドレスを確認すると配布できていないことが確認できます。
ictsc@dhclient:~$ 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を起動させます。
ictsc@dhserver:~$ sudo cat /etc/radvd.conf
interface eth1
{
AdvSendAdvert on;
AdvManagedFlag on;
prefix fc00:1:1:0::/64
{
AdvOnLink off;
AdvAutonomous off;
AdvRouterAddr off;
};
};
Radvdの状態を確認すると、正常に動作していることを確認できます。
ictsc@dhserver:~$ sudo systemctl start radvd.service
ictsc@dhserver:~$ 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を再起動しアドレスが配布されていることを確認します。
ictsc@dhclient:~$ sudo netplan apply
ictsc@dhclient:~$ 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サーバーがアドレスを配布していることを確認できます。
ictsc@dhserver:~$ 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」との疎通確認を行います。
ictsc@dhclient:~$ 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