web-dev-qa-db-fra.com

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

Version courte

Je sais que cette question est très similaire aux autres et j'ai vraiment cherché des réponses sur Internet, mais il semble qu'aucune approche ne fonctionne ou que les solutions semblent "trop ​​compliquées pour être les meilleures pratiques" (j'essaierai de vous expliquer). Je cherche un moyen sûr de désactiver DHCP en ligne de commande (à utiliser dans les scripts).

Contexte

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

ifconfig eth0 192.168.0.1

En réalité, cela fonctionne également, mais l’IP ne persiste que jusqu’à la fin de la période de bail DHCP du bail précédemment obtenu. Une nouvelle adresse IP sera attribuée à eth0, ce qui (en bref) casse le système. Je pensais "pas grave, il y aura sûrement quelque chose comme:"

ifconfig eth0 dhcpdisabled

Mais j'ai fini par reconnaître que cela ne fonctionnait pas aussi facilement. Éditer le /etc/network/interfaces est un peu délicat, car il est généré par remastersys (en réalité le script de mise en réseau de casper).

Je pourrais le réécrire et redémarrer le réseau, mais qu'adviendra-t-il de dhclient.leases actif? DHClient fonctionnera-t-il toujours en arrière-plan (cela ne devrait pas, mais certains messages suggèrent que ce sera mes tests ont montré qu'il est redémarré "au hasard", si dhclient est tué), dois-je supprimer ou vider les fichiers dhclient.leases, qu'en est-il de resolv.conf?

Désespoir

Pour résumer - À mon avis, ce n'est pas vraiment "simple" et quelque part ne "se sent pas stable". Cette question (156183) a 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?

N'y a-t-il vraiment aucune commande pour cela? J'espère que j'ai juste oublié.

4
Mister Henson

Je vais essayer de vous donner un bref exemple de ce que vous pouvez faites, mais ce n'est pas un exemple complet, car la configuration exacte, les besoins, etc. peuvent être très différents.

Tout d’abord, faisons quelques hypothèses pour rendre ce cas plus simple:

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

Configurons notre variable d'assistance 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êtez Network-Manager):

stop network-manager

Pour l'hypothèse 2), supprimez resolvconf ou supprimez /etc/resolv.conf s'il s'agit d'un lien symbolique et remplacez-le par un fichier statique.

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

Et pour l'hypothèse 3): Cela devrait commenter les lignes hotplug .. et j'espère que ça suffit

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

Vous pouvez utiliser "systemctl" s'il est disponible pour votre distribution. 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 gérant la configuration du client DHCP sur mon système. Il existe également un service pour la configuration dhcp IPv6, vous ne pouvez pas le désactiver aussi.

systemctl disable wickedd-dhcp6.service
1
Sahil Singh

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

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

Cela supprime tous les liens de démarrage du système pour /etc/init.d/dhcp3-server.

Pour que le prochain redémarrage, DHCP ne se déclenche pas.

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

0
meda

Le moyen standard le plus simple de résoudre ce problème est simple: indiquez simplement à votre serveur DHCP quelles adresses IP doivent être attribuées à certaines adresses MAC. Tous les routeurs que j'ai rencontrés ont cette fonctionnalité et si vous utilisez dhcp3-server, c’est aussi simple .

0
Oli

Pourquoi ne pas simplement arrêter le client DHCP avec pkill dhclient?

0
Clausi