4 votes

Existe-t-il un moyen sûr de désactiver le DHCP en ligne de commande ?

Version courte

Je sais que cette question est très similaire à d'autres et j'ai vraiment cherché des réponses sur Internet, mais il semble qu'aucune approche ne fonctionne ou que les solutions semblent être "trop compliquées pour être la meilleure pratique" (je vais essayer d'expliquer). Je cherche un moyen sûr de comment désactiver le DHCP à partir de la ligne de commande (à utiliser dans scripts).

Contexte

J'essaie de créer un "Live-Cd" avec Ubuntu Server 12.04 et remastersys (qui fonctionne bien). Le système est, par défaut, configuré pour obtenir l'IP avec DHCP lors du démarrage. Ce n'est pas grave - l'important est qu'un script (qui s'exécute après le démarrage) est capable (dans certains cas spécifiques) de définir une IP statique à l'aide de ifconfig ( pas /etc/network/interfaces ) :

ifconfig eth0 192.168.0.1

En fait, cela fonctionne également, mais l'IP ne persiste que jusqu'à ce que la durée du bail DHCP du bail précédemment obtenu soit terminée. Une nouvelle IP sera attribuée à eth0, ce qui (en bref) casse le système. Je me suis dit "pas de problème, il y aura sûrement quelque chose comme " : "

ifconfig eth0 dhcpdisabled

Mais j'ai fini par reconnaître que ça ne marche pas si facilement. En éditant le /etc/network/interfaces est un peu délicat, car il est généré par remastersys (en fait le 23networking script de casper).

Je pourrais le réécrire et redémarrer le réseau, mais qu'adviendra-t-il des dhclient.leases actifs ? Est-ce que DHClient continuera à fonctionner en arrière-plan (il ne devrait pas, mais certains messages suggèrent que ce sera le cas mes tests ont montré qu'il est redémarré "aléatoirement", si dhclient est tué), dois-je supprimer ou vider les fichiers dhclient.leases, qu'en est-il de resolv.conf ?

Despair

Pour résumer, je pense qu'il n'est pas vraiment "simple" et qu'il ne donne pas l'impression d'être "stable". Cette question (156183) suggéré de supprimer le paquet dhclient, mais : Cela résoudra-t-il le problème ? Est-ce que cela va casser d'autres choses ?

Il n'y a pas vraiment de commande pour cela ? J'espère que je l'ai simplement oubliée.

3voto

Manwe Points 735

Je vais essayer de vous donner un bref exemple de ce que vous kann C'est le cas, mais ce n'est pas un exemple complet car la configuration exacte, les besoins, etc. peuvent varier considérablement.

Tout d'abord, posons quelques hypothèses pour rendre ce cas plus simple :

  1. Vous n'utilisez pas le gestionnaire de réseau
  2. Vous n'utilisez pas resolvconf mais fichier statique /etc/resolv.conf
  3. Votre fichier d'interfaces ne contient pas allow-hotplug lignes à reconfigurer si le câble est débranché/rebranché.

Configurons notre variable d'aide DEV

## your device is eth0
# stop /etc/interface control of the eth0 device, should also stop/kill dhcp for that device
ifdown eth0
## stop dhclient to be sure, don't worry about leases files etc
pkill dhclient
## ubuntu precise calls dhclient with dhclient3
pkill dhclient3
# set ip manually: (NETMASK is quite often 24 == 255.255.255.0) 
ifconfig eth0 up 192.168.0.1/NETMASK
# do you need default gw? (for this example it's 192.168.0.254)
route add default gw  192.168.0.254

## if your /etc/resolv.conf is incorrect add correct nameserver like this:
### 8.8.8.8 = goole open dns
echo 'nameserver 8.8.8.8' > /etc/resolv.conf

Maintenant, si l'hypothèse 1) est fausse, faites (arrêter le gestionnaire de réseau) :

stop network-manager

Pour l'hypothèse 2), il faut soit retirer resolvconf ou retirer /etc/resolv.conf si c'est un lien symbolique et le remplacer par un fichier statique

[ -h /etc/resolv.conf ] && rm /etc/resolv.conf

Et pour l'hypothèse 3) : Ceci devrait commenter les lignes hotplug et j'espère que c'est suffisant.

perl -i -pe 's/^(\s*allow-hotplug)/# $1/g' /etc/network/interfaces

1voto

jwillis84 Points 1

Vous pouvez utiliser "systemctl" s'il est disponible pour votre distro. Il est disponible pour ma distribution openSUSE, et je l'utilise pour désactiver les services de la manière suivante.

systemctl disable wickedd-dhcp4.service

où wickedd-dhcp4 est le nom du service qui gère la configuration du client DHCP sur mon système. Il y a aussi un service pour la configuration dhcp IPv6, vous pouvez vouloir le désactiver aussi.

systemctl disable wickedd-dhcp6.service

0voto

Mufaka Points 54

La méthode standard la plus simple pour résoudre ce problème est la suivante : il suffit d'indiquer à votre serveur DHCP quelles IP doivent être attribuées à certaines adresses MAC. Tous les routeurs que j'ai touchés avaient cette fonctionnalité et si vous utilisez dhcp3-server c'est tout aussi simple .

0voto

Clausi Points 4797

Que diriez-vous d'arrêter simplement le dhcp-client avec pkill dhclient ?

0voto

meda Points 151

J'utilise la commande suivante pour désactiver le DHCP sur mon serveur.

sudo update-rc.d -f dhcp3-server remove

Ce qu'il fait est de supprimer tous les liens de démarrage du système pour /etc/init.d/dhcp3-server .

Pour qu'au prochain redémarrage, le DHCP ne se déclenche pas.

C'est tout, simple, propre, facile et sûr.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X