Wie kann ich beim Booten auf eine statische IP-Adresse umschalten, die auf einer Gateway-IP-Adresse basiert, die von DHCP bereitgestellt wird?

311
bernz

Ich habe einen "kopflosen" * NIX-Host - nennen wir ihn "foo" -, der über SSH und VNC-Tunneled-over-SSH in einem beliebigen 192.168.xy / 24-privaten LAN zugänglich sein soll. Manchmal möchte ich 'foo' physisch von einem LAN in ein anderes verschieben, also hängt 'x' vom LAN ab und ich möchte, dass 'y' konstant ist, mit einer geordneten Liste von Alternativen, um den Zuordnungskonflikt zu behandeln.

Ich möchte zwar eine statische Adresse (Ziel mit SSH), aber auch dynamisch sein (um das Subnetz des LANs zu erreichen, an das es angeschlossen ist).

Ja, einige Router erlauben "spezielle Saucen" wie DHCP-Reservierung oder zusätzliche Routing-Konfiguration. Ich nehme an, ich habe keinen Zugriff auf den Router, aber ich kann davon ausgehen, dass DHCP bereitgestellt wird.

Wenn ich dies manuell tun würde, würde ich "foo" so einrichten, dass beim Booten DHCP verwendet wird. Sobald ich eine Shell bekomme, kann ich mir die Adresse des Gateways ansehen, um herauszufinden, wo mein Subnetz 192.168.x.0 liegt 'x' ist von LAN zu LAN unterschiedlich. dann würde ich '/ etc / network / schnittstellen' (oder gleichwertig) bearbeiten, um von DHCP auf statisch umzuschalten und die Adresse aus 'x' und der Konstante 'y' zu synthetisieren (erstens 192.168.xy prüfen, ob es belegt ist und ob dies der Fall ist) Ich wähle das nächste "y" aus einer Liste vordefinierter Auswahlmöglichkeiten aus, so dass ich in weniger optimalen Situationen möglicherweise mehrere Adressen versuchen muss, wenn ich SSH), und dann den Netzwerkdienst neu starte.

Eine schwierigere Variante wäre ein LAN, dem DHCP fehlt. In diesem Fall könnte das Subnetz wahrscheinlich durch Abtasten des LAN-Verkehrs erraten werden.

Wenn ein solches Setup automatisiert werden könnte, kann "foo" einfach an ein beliebiges LAN angeschlossen und gebootet werden, und es besteht eine gute Chance, seine IP-Adresse beim ersten Versuch zu finden.

Gibt es clevere Wege, das zu tun, was ich suche?

Denken Sie daran, dass die gesamte Konfiguration auf dem Host 'foo' erfolgen muss. Die einzige Annahme, die für das Ziel-LAN, an das es angeschlossen ist, gemacht werden kann, ist, dass es ein privates Subnetz 192.168.xy / 24 verwendet.

2
Sie müssen es als DHCP belassen. Führen Sie ein Skript aus, um das bereitgestellte Gateway zu analysieren, und ändern Sie dann die Adresse. Der knifflige Teil wird sicherstellen, dass er für den nächsten Start auf DHCP zurückgesetzt wird. Andernfalls würde das Ganze auseinander gehen. Das Skript selbst wäre vom Betriebssystem abhängig. Es ist ziemlich einfach, die Datei / etc / network / interfaces zu ändern und den Netzwerkdienst unter Linux mit einem Skript neu zu starten. Windows verfügt über Netsh und WMI, die dies tun könnten. Frank Thomas vor 9 Jahren 0
Frank, richtig, das ist * NIX-only, ich habe die Frage bearbeitet, um das zu reflektieren. Aber ja, es klingt, als müsste ich meine eigene Lösung kochen. Ich dachte, es gäbe vielleicht schon ein Werkzeug, um so etwas zu tun. Gibt es eine Möglichkeit, '/ etc / network / interfaces' zu zwingen, von einer "Vorlage" aus zu starten (also bootet es immer mit DHCP) ...? bernz vor 9 Jahren 0
Vergessen Sie nicht, wenn Sie diese Verbindung herstellen ... ähm, sollen wir sagen, "lauern" -Gerät ... in das ... ah, "fremde" Netzwerk, Ihre Annahme eines IP-Bereichs von 192.168 ist unzureichend. es könnte 10, 10.1, 10.0.1 sein, ... Sie bekommen den Drift. Es ist jedoch nicht schwieriger als Ihr Beispiel. Daniel vor 9 Jahren 0
@bernz ... PM ich, wenn Sie möchten, dass ich dieses Skript für Sie schreibe. Daniel vor 9 Jahren 0
Danke Daniel, stimmte zu. In meinem Anwendungsfall ist es ein RasPi, das ich zwischen Zuhause und Arbeit ziehen möchte - nicht für etwas Schändliches ;-) - und beide Netzwerke verwenden private 192.168.xy-Subnetze. @Daniel, Entschuldigung, ich bin hier im Anfänger-Modus ... Es scheint keine PM-Funktion für StackExchange zu geben ... wenn Sie nichts dagegen haben, das Skript hier zu veröffentlichen, wäre das natürlich dankbar. :-) bernz vor 9 Jahren 0
Ich schreibe es, wenn ich heute Nacht nach Hause komme. Daniel vor 9 Jahren 0

1 Antwort auf die Frage

1
Daniel

Einige Fehler wahrscheinlich, sollten aber ausreichen, um das zu tun, was benötigt wird.

als root ausführen.


#!/bin/bash  ARPCOUNT=10 LOCALNET=`route | grep default | awk '' | cut -f1-3 -d'.'` NETMASK=`route | grep default | awk ''` DEVICE=`route | grep default | awk ''`  for ((xval=100; xval<254; xval++ )) ; do  CURIP=$LOCALNET.$xval  arping -c $ARPCOUNT $CURIP > /dev/null ARPRESULT=$?  if ! [ $ARPRESULT ] ; then echo "No IP found at $CURIP."  else route ifconfig $DEVICE down ifconfig $DEVICE $LOCALNET.$xval netmask $NETMASK ifconfig $DEVICE up route echo "Changed to IP $CURIP." exit fi  done 
Danke, das sieht nach einem guten Start aus. Ich werde davon lernen und hacken, bis es für mein Gerät funktioniert. bernz vor 9 Jahren 0