Raspberry Pi3 の dhcpcd
Raspberry Pi3(以降、RPi3)のネットワークアドレスをstaticに設定したはずなのに、どういうわけか、そのアドレスに加えてDHCPで取ってきたであろうアドレスもNICに割り当てられているという気持ち悪い現象が前々からあった。
具体的にはこんな感じ。
/etc/network/interfaces に以下のような設定をしたにも関わらず、
allow-hotplug eth0 iface eth0 inet static address 192.168.20.51 netmask 255.255.255.0 gateway 192.168.20.1 dns-nameservers 192.168.20.1
起動ログには、
My IP address is 192.168.20.51 192.168.20.14
と表示されている。
ipコマンドで確認してみても、eth0のセカンダリアドレスとして登録されている。
$ sudo ip addr list ... 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 inet 192.168.20.51/24 brd 192.168.12.255 scope global eth0 valid_lft forever preferred_lft forever inet 192.168.20.14/24 brd 192.168.12.255 scope global secondary eth0 valid_lft forever preferred_lft forever
別のPCから 192.168.20.14 にpingを送ってみると疎通するし、ルーターのDHCP管理表にもIPアドレスとMACアドレスが登録されている。新たな機器を追加したときにアドレスが競合するのも嫌だし、自分の意に反した設定なので何とかしたいと思って調べてみると、dhcpcdなるものが悪さをしているっぽい。
sysv-rc-conf や insserv から dhcpcd の自動起動を無効にしても効き目がなかったので、systemctl から dhcpcd.service の自動起動を無効化した。
$ sudo insserv -r dhcpcd $ sudo insserv dhcpcd,stop=2,3,4,5 $ sudo reboot ... $ sudo service dhcpcd status ● dhcpcd.service - dhcpcd on all interfaces Loaded: loaded (/lib/systemd/system/dhcpcd.service; enabled) Drop-In: /etc/systemd/system/dhcpcd.service.d └─wait.conf Active: active (running) since Thu 2017-02-02 19:16:36 JST; 52s ago Process: 503 ExecStart=/sbin/dhcpcd -q -w (code=exited, status=0/SUCCESS) Main PID: 822 (dhcpcd) CGroup: /system.slice/dhcpcd.service └─822 /sbin/dhcpcd -q -w
insservでサービスを停止させてみたけど動いているやん(涙
このログをネタに調べてみると、どうやらdhcpcdデーモンの自動起動はrcスクリプトではなく、systemdによって管理されているっぽい。
$ sudo systemctl disable dhcpcd.service $ sudo reboot ... $ sudo service dhcpcd status ● dhcpcd.service - dhcpcd on all interfaces Loaded: loaded (/lib/systemd/system/dhcpcd.service; enabled) Drop-In: /etc/systemd/system/dhcpcd.service.d └─wait.conf Active: inactive (dead)
systemctlでサービスを停止させてみたら止まったじょ!
これにより起動ログも、staticで指定したアドレスのみになりスッキリした。
My IP address is 192.168.20.51