Gibt es eine Möglichkeit, meine Linux-Box zu zwingen, immer mit einer selbst zugewiesenen IP-Adresse zu starten?

7

Dies ist möglicherweise eine ungewöhnliche Anfrage: Ich versuche, eine Debian Linux-Box dazu zu bringen, sich beim Booten immer eine selbst zugewiesene IP-Adresse (dh 169.254.xy) zu geben. Insbesondere möchte ich, dass dies auch dann der Fall ist, wenn im LAN ein DHCP-Server vorhanden ist . Das heißt, es sollte keine IP-Adresse vom DHCP-Server angefordert werden.

Nach dem, was ich im Text "man interfaces" sehen kann, gibt es eine Option für "manual" und eine Option für "dhcp". Die manuelle Zuweisung reicht nicht aus, da ich mehrere Boxen benötige, um im selben LAN zu arbeiten, ohne dass eine manuelle Konfiguration erforderlich ist ... und "dhcp" macht, was ich will, aber nur, wenn sich kein DHCP-Server im LAN befindet. (Voraussetzung ist, dass die Funktionalität dieser Boxen nicht durch das Vorhandensein oder Fehlen eines DHCP-Servers beeinträchtigt wird.)

Gibt es einen Trick, mit dem ich dieses Verhalten feststellen kann?

BEARBEITEN: Mit "keine manuelle Konfiguration" meine ich, dass ich in der Lage sein sollte, diese Box (ohne Kopf) überall in ein beliebiges LAN zu bringen, das Ethernet-Kabel anzuschließen und sie ihre Sache machen zu lassen. Ich sollte nicht in die Box ssh und Dateien bearbeiten müssen, damit es jedes Mal funktioniert, wenn es in ein anderes LAN verschoben wird.

Jeremy Friesner
quelle
1
Im Ernst, es gibt Millionen von Websites auf der ganzen Welt, die sehr gut mit DHCP- oder statischen Zuweisungen arbeiten. Wählen Sie eine aus und verwenden Sie sie. Sie werden viel mehr Zeit damit verbringen, eine neue Idee zu entwickeln, als es jemals wert sein wird. Zusätzlich haben automatisch zugewiesene IPs keinen Router, keine DNS-Einstellung und werden nicht an andere Netzwerke weitergeleitet.
Chris S
Es ist nicht möglich, auszuwählen, welcher DHCP-Server Ihrem Computer eine IP zuweist (selbst wenn dies der Fall ist). Wenn Sie Ihren Computer einschalten, sendet der DHCP-Client ein Paket über die Broadcase-Schnittstelle (im Wesentlichen alle Einsen auf dem Host), und der erste DHCP-Server, der das Angebot empfängt, weist dem Computer die IP zu. Ihr Computer ist der letzte kontaktierte Server (da der Port zuerst durch das Netzwerk springen muss), weshalb er nur funktioniert, wenn kein anderer DHCP-Server vorhanden ist.
Theo
Am besten machen Sie manuelle Arbeit oder lassen Ihren DHCP-Server Reservierungen einrichten. Stellen Sie Ihre Frage in einen Kontext: Was ist für eine selbst zugewiesene IP erforderlich und woher weiß sie, welche IP verwendet werden soll?
Theo
3
Schauen Sie in die avahi-*Pakete. Zancheys Antwort avahi-autoipdist ein Ausgangspunkt. Es gibt auch eine Debian ZeroConf Wiki-Seite .
Steven Montag,
2
Jed: Ich brauche eine Box, die "kopflos" an jedes LAN angeschlossen werden kann und mit anderen Boxen in diesem LAN kommuniziert. Es muss niemals außerhalb des LAN kommunizieren. Das Verhalten muss gleich sein, unabhängig davon, ob ein DHCP-Server verfügbar ist oder nicht (dh er kann nicht aufhören zu arbeiten oder anders zu arbeiten, wenn der DHCP-Server später ausfällt oder ein neuer auftaucht)
Jeremy Friesner

Antworten:

8

Wenn Sie das avahi-autoipdPaket installieren und mit der --force-bindOption in einem benutzerdefinierten init- oder if-up.d-Skript ausführen, erhalten Sie immer eine linklokale Adresse.

Sie können sie dann iface eth0 inet manualin Ihrer Interfaces (5) -Datei verwenden, obwohl Sie sie bearbeiten müssen /etc/network/if-up.d/avahi-autoipd, um sie manualzu den Methodenzeilen hinzuzufügen .

Weitere Informationen zu avahi-autoipd finden Sie im Avahi-Wiki.

Persönlich würde ich /etc/network/if-up.d/avahi-autoipdmit so etwas wie bearbeiten :

--- avahi-autoipd       2010-08-04 04:26:49.000000000 +0800
+++ avahi-autoipd.1     2010-11-11 09:57:54.000000000 +0800
@@ -13,10 +13,13 @@
 esac

 case "$METHOD" in
-       static|dhcp|NetworkManager) ;;
+       static|dhcp|NetworkManager|linklocal) ;;
        *) exit 0
 esac

+if [ "$METHOD" == "linklocal" ]; then
+       /usr/sbin/avahi-autoipd --force-bind --daemonize --wait $IFACE 2> /dev/null
+fi

 if [ -x /bin/ip ]; then
        # route already present?

Sie können dann Schnittstellen als auflisten iface eth0 inet linklocal. Die Änderungen, die am if-down.dSkript vorgenommen werden müssen, bleiben dem Leser als Übung überlassen.

Zanchey
quelle
1
Frage Anforderung: "ohne manuelle Konfiguration erforderlich"
Chris S
1
Ich denke, Sie meinen "ohne manuelle Zuordnung", was nicht dasselbe ist.
Zanchey
1
Sie sollten die Frage wahrscheinlich zuerst richtig gelesen haben. "Die manuelle Zuweisung reicht nicht aus, da ich mehrere Boxen benötige, um im selben LAN zu arbeiten, ohne dass eine manuelle Konfiguration erforderlich ist"
Arenstar
1
Sag dir was, Champion, wie wäre es, wenn du dir die aktualisierte Frage ansiehst.
Zanchey
1
Nicht vollständig. Die Boxen können senden und sich gegenseitig erkennen, indem sie Sendungen empfangen.
Fahad Sadah
4

Möglicherweise haben Sie dies verpasst in man interfaces:

The ipv4ll Method
   This method uses avahi-autoipd to configure an interface with an IPv4 Link-Layer address
   (169.254.0.0/16  family). This method is also known as "APIPA" or "IPAC", and often col‐
   loquially referred to as "Zeroconf address".

   Options

          (No options)

Sie hätten also einen interfacesAbschnitt als solchen:

auto eth0
iface eth0 inet ipv4ll

Installieren avahi-autoipd, und das sollte es tun.

Sam Halicke
quelle
Diese Lösung klingt gut, aber ich kann sie nicht zum Laufen bringen. :( Wenn Sie die Schnittstellendatei so ändern, dass "iface eth0 inet ipv4ll" angegeben wird, wird während der Startsequenz nur ein Fehler im "unbekannten Modus" ausgedruckt, und die Schnittstelle ist nicht konfiguriert. Avahi-autoipd ist installiert, möglicherweise ist es auch ein Fehler. alte Version?
Jeremy Friesner
Vielleicht? Ich verwende Ubuntu 10.10 in meinem Fall. Ich nehme an, Sie verwenden Lenny. Wenn ja, möchten Sie vielleicht den deb-src aus dem Squeeze nehmen und ihm einen Wirbel geben.
Sam Halicke
2

Ich denke, was Sie suchen, ist Zeroconf .

NeilF
quelle
1
Frage Anforderung: "ohne manuelle Konfiguration erforderlich"
Chris S
Frage Anforderung: "ohne manuelle Konfiguration erforderlich"
Arenstar
Ja, Zeroconf ist das, wonach ich suche. Insbesondere möchte ich Zeroconf aktivieren, ohne auch DHCP zu aktivieren. Gibt es eine Möglichkeit, das zu tun?
Jeremy Friesner
Sie müssen ein benutzerdefiniertes Skript schreiben, um zeroconf auszuführen, und dann Ihre interfaces(5)Datei auf einstellen iface eth0 inet manualoder etwas wie das folgende Skript ausführen .
Zanchey
0

Niemand hat es bisher erwähnt, daher möchte ich nur darauf hinweisen, dass Sie, wenn Sie die Kontrolle darüber haben, wie die Maschine startet, den Standardeintrag in GRUBs menu.lst (oder wie auch immer es diese Woche heißt) bearbeiten können, um einen "nodhcp" -Cheatcode hinzuzufügen zu den Argumenten, die der Kernel beim Booten gegeben hat. Das sollte den Computer zumindest davon abhalten, eine erste IP-Anfrage zu senden, obwohl ich nicht sagen konnte, wie lange ich sie nur beim Testen von Live-CDs wirklich gebraucht habe (es sind alles statische RFC1918-IPs in meinem LAN).

crb3
quelle
"ohne manuelle Konfiguration" wird dies schwierig machen.
Chris S
0

Posting für andere Googeln dafür:

Wenn Sie NetworkManager verwenden, wird ab Juli 2008 avahi-autoipd unterstützt. Setzen Sie einfach BOOTPROTO = autoip in der Datei / etc / sysconfig / network-scripts / ifcfg- * der Schnittstelle. NetworkManager überspringt die DHCP-Konfiguration der Schnittstelle und wechselt direkt zur verbindungslokalen IPv4LL-Adressierung über autoipd.

mtbkrdave
quelle