読者です 読者をやめる 読者になる 読者になる

Raspberry Pi3 の dhcpcd

RPi3 ネットワーク技術 Linux

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 

 

 

 参考Webページ