Je rencontre un problème étrange avec dhcpd
sur Ubuntu (x64). J'utilise systemd
pour démarrer dhcpd
au démarrage et il se ferme.
Quand je demande le statut du service
$ systemctl status dhcpd
dhcpd.service - dhcpcd service
Loaded: loaded (/etc/systemd/system/dhcpd.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Tue 2016-08-16 20:37:11 UTC; 15min ago
Process: 1591 ExecStart=/sbin/dhcpd -cf /etc/dhcp/dhcpd.conf eth1 (code=exited, status=0/SUCCESS)
Main PID: 1591 (code=exited, status=0/SUCCESS)
Quand je regarde le journal, je ne vois aucune erreur non plus:
journalctl _PID=1591
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Internet Systems Consortium DHCP Server 4.3.3-P1
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Internet Systems Consortium DHCP Server 4.3.3-P1
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Copyright 2004-2016 Internet Systems Consortium.
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Copyright 2004-2016 Internet Systems Consortium.
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: All rights reserved.
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: For info, please visit https://www.isc.org/software/dhcp/
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: All rights reserved.
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: For info, please visit https://www.isc.org/software/dhcp/
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Config file: /etc/dhcp/dhcpd.conf
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Config file: /etc/dhcp/dhcpd.conf
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Database file: /var/lib/dhcp/dhcpd.leases
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Database file: /var/lib/dhcp/dhcpd.leases
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: PID file: /var/run/dhcpd.pid
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: PID file: /var/run/dhcpd.pid
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Wrote 0 leases to leases file.
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Wrote 0 leases to leases file.
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Listening on LPF/eth1/08:00:27:10:48:17/192.168.0.0/24
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Listening on LPF/eth1/08:00:27:10:48:17/192.168.0.0/24
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Sending on LPF/eth1/08:00:27:10:48:17/192.168.0.0/24
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Sending on LPF/eth1/08:00:27:10:48:17/192.168.0.0/24
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Sending on Socket/fallback/fallback-net
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Sending on Socket/fallback/fallback-net
Il semble que tout va bien, mais dhcpd
ne fonctionne pas.
Mon fichier de configuration (/etc/dhcp/dhcpd.conf
) est très simple:
# dhcp server configuration file
allow bootp; #allow bootp protocol
#define DHCP subnet
#specify /etc/spock/spock.ub as boot file
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.2 192.168.0.200;
filename "/etc/spock/spock.ub";
}
Dans mon script de service, je m'assure que dhcpd ne démarre pas tant que le réseau n'est pas en place:
# Start and stop dhcpcd service on eth1 interface
[Unit]
Description=dhcpcd service
# Come up after networking
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
#start dhcpd on eth1
ExecStart=/sbin/dhcpd -cf /etc/dhcp/dhcpd.conf eth1
[Install]
WantedBy=multi-user.target
Il se ferme également lorsque j'essaie de le démarrer via systemctl start dhcpd
Cependant, si j'exécute '/sbin/dhcpd -cf /etc/dhcp/dhcpd.conf eth1'
à partir de la ligne de commande, tout fonctionne correctement.
Une idée pourquoi ça sort?
dhcpd se forque alors je devais changer le type de service en conséquence:
[Service] Type = forking ExecStart =/sbin/dhcpd -cf /etc/dhcp/dhcpd.conf eth1
Maintenant ça marche
Si ce script doit être exécuté après que l'interface réseau soit pleinement fonctionnelle et capable de se connecter au monde extérieur, comme le suggère network-online.target
, vous souhaiterez peut-être d'abord tester la connexion en envoyant une requête ping à Google, par exemple.
Je vous suggère de créer un script distinct contenant le test ping avant votre commande /sbin/dhcpd -cf /etc/dhcp/dhcpd.conf eth1
, puis d'exécuter ce script à l'aide de ExecStart
dans votre service.