Frage Gibt es eine sichere Möglichkeit, DHCP über die Befehlszeile zu deaktivieren?


Kurze Version

Ich weiß, dass diese Frage anderen sehr ähnlich ist, und ich habe wirklich im Internet nach Antworten gesucht, aber es scheint, dass kein Ansatz funktioniert oder die Lösungen "zu kompliziert zu sein scheinen, um die beste Praxis zu sein" (ich werde versuchen zu erklären). Ich suche nach einem sicheren Weg weiter wie man DHCP von der Befehlszeile aus deaktiviert (zur Verwendung in Skripten).

Hintergrund

Ich versuche mit Ubuntu Server 12.04 und remastersys eine "Live-Cd" zu erstellen (funktioniert gut). Das System ist standardmäßig so konfiguriert, dass beim Booten die IP mit DHCP abgerufen wird. Das ist in Ordnung - wichtig ist, dass ein Skript (das nach dem Booten ausgeführt wird) (in bestimmten Fällen) in der Lage ist, eine statische IP-Adresse zu verwenden ifconfig (nicht / etc / Netzwerk / Schnittstellen ):

ifconfig eth0 192.168.0.1

Eigentlich funktioniert das auch, aber die IP bleibt nur bestehen, bis die DHCP-Lease-Zeit der zuvor erhaltenen Lease abgelaufen ist. Eine neue IP wird eth0 zugewiesen, die (kurz gesagt) das System durchbricht. Ich dachte "keine große Sache, es wird sicherlich so etwas wie:"

ifconfig eth0 dhcpdisabled

Aber ich habe erkannt, dass es nicht so einfach funktioniert. Bearbeiten der /etc/network/interfaces ist ein bisschen schwierig, weil es von remastersys (eigentlich das 23networking-Skript von Casper) generiert wird.

Ich könnte es umschreiben und das Netzwerk neu starten, aber was passiert mit aktiven dhclient.leases? Wird DHClient immer noch im Hintergrund laufen (sollte es aber nicht Einige Beiträge deuten darauf hin, dass es sein wird Meine Tests zeigten, dass es "zufällig" neu gestartet wird, wenn dhclient getötet wird. Muss ich dhclient.leases-Dateien entfernen oder leeren? Was ist mit resolv.conf?

Verzweiflung

Um es zusammenzufassen - Meiner Meinung nach ist es nicht wirklich "einfach" und irgendwie "nicht stabil". Diese Frage (156183)  vorgeschlagen, das dhclient-Paket zu entfernen, aber: Wird dadurch das Problem gelöst? Wird das andere Sachen brechen?

Gibt es dafür wirklich keinen Befehl? Ich hoffe, ich habe es einfach übersehen.


4
2017-08-01 13:22


Ursprung


Für Besucher müssen Sie nichts pkill oder entfernen. Eine bessere Antwort kann gefunden werden Hier. - John
John, ich brauchte das damals für ein Drehbuch. Wie würde das hier funktionieren? Pipe die Datei und eine Zeichenfolge ersetzen? Klingt für mich nicht reif. - Mister Henson


Antworten:


Ich werde versuchen, Ihnen ein kurzes Beispiel zu geben kann tun, aber es ist kein vollständiges Beispiel, weil das genaue Setup, Bedürfnisse usw. ziemlich viel unterscheiden können.

Lassen Sie uns zuerst einige Annahmen machen, um diesen Fall zu vereinfachen:

  1. Du verwendest keinen Netzwerk-Manager
  2. Du verwendest es nicht resolvconf, aber statische /etc/resolv.conf Datei
  3. Ihre Interface-Datei enthält nicht allow-hotplug Leitungen, die neu konfiguriert werden müssen, wenn das Kabel nicht angeschlossen ist.

Lassen Sie uns unsere Hilfsvariable DEV einrichten

## 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

Wenn nun die Annahme 1) falsch ist (Stop Network-Manager):

stop network-manager

Für Annahme 2) entweder entfernen resolvconf oder entfernen /etc/resolv.conf Wenn es sich um einen Symlink handelt, ersetzen Sie ihn durch eine statische Datei

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

Und für Annahme 3): Dies sollte hotplug Linien auskommen .. und ich hoffe, es ist genug

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

3
2017-08-08 12:51



Ich nehme an, dass du pkill nicht zweimal benutzen musst - pkill dhclient sollte sowohl dhclient als auch dhclient3 töten - es benutzt regex. Vielleicht benutze stattdessen killall? - scdmb


Sie können "systemctl" verwenden, wenn es für Ihre Distribution verfügbar ist. Es ist für meine openSUSE-Distribution verfügbar und ich verwende es, um die Dienste auf die folgende Weise zu deaktivieren.

systemctl disable wickedd-dhcp4.service

where sinedd-dhcp4 ist der Name des Dienstes, der die DHCP-Client-Konfiguration auf meinem System behandelt. Es gibt auch einen Dienst für die IPv6-DHCP-Konfiguration, den Sie auch deaktivieren können.

systemctl disable wickedd-dhcp6.service

1
2017-09-11 03:46



Thx aber Ubuntu wurde benutzt ... - Mister Henson
Um hinzuzufügen, wenn Sie die Adresse, die von dhcp erhalten wurde, freigeben möchten, nachdem dhcp ausgeführt wurde, können Sie "dhclient -r eth0" tun. Keine Antwort auf die Hauptfrage, aber es kann helfen. - Sahil Singh


Der einfachste Weg, um dies zu beheben, ist einfach: Sagen Sie Ihrem DHCP-Server, welche IPs an bestimmte MAC-Adressen vergeben werden sollen. Jeder Router, den ich jemals berührt habe, hat diese Funktion und wenn Sie verwenden dhcp3-server, es ist genauso einfach.


0
2017-08-01 13:42



Aber eigentlich fehlt deine Antwort den Punkt. Ich nehme an, dass meine Frage nicht klar geschrieben wurde, aber ich habe sie geändert. - Mister Henson


Was ist mit dem Stoppen des DHCP-Clients? pkill dhclient?


0
2017-08-06 07:12



Danke, ich habe es versucht und die Lease-Dateien gelöscht, aber irgendwie funktioniert es nicht (dhclient scheint neu gestartet zu werden) ... - Mister Henson
Wir suchen also nach dem Prozess, der den dhclient neu startet, oder? Möchten Sie überprüfen, ob der Netzwerk-Manager installiert ist? Und posten Sie bitte den Inhalt von / etc / network / interfaces. Danke! - Clausi


Ich verwende den folgenden Befehl, um DHCP auf meinem Server zu deaktivieren.

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

Was es tut, ist, Systemstartlinks für zu entfernen /etc/init.d/dhcp3-server.

Damit tritt DHCP beim nächsten Neustart nicht ein.

Das ist es, einfach sauber, einfach und sicher.


0
2017-10-07 21:17