Linux-Befehlszeile: Schneller Weg zum Deaktivieren des Internets (LAN behalten)?

10

Geteilte Frage: Diese andere hier ist für Windows.

Linux: Der schnellste Weg, um das Internet (LAN behalten) von der Kommandozeile aus zu deaktivieren?

Ich denke, der einfachste Weg, das Internet (nicht LAN) unter Linux zu deaktivieren, besteht darin, das Standard-Gateway zu entfernen. Angenommen, LAN ist 10.0.2.0/24 und Gateway 10.0.2.1:

sudo /sbin/route del default gw 10.0.2.1

So reaktivieren Sie das Internet:

sudo /sbin/route add default gw 10.0.2.1

Aber selbst wenn dies eine einfache Zeile ist, muss zuerst die Standard-Gateway-IP ermittelt werden:

sudo /sbin/route

Ich werde einige allgemeine Shell-Skripte erstellen, die das Internet aktivieren / deaktivieren müssen (aber das LAN weiter funktionieren lassen). Es scheint also, dass ich einige (¿ grep, vielleicht?) Operationen benötigen werde, um die genaue Gateway-IP-Nummer zu filtern und zu erkennen ( Es könnte 10.0.2.1, 127.0.0.1, 127.0.50.1, 192.168.0.1 ... usw. sein, es sei denn, ich finde eine einfachere Befehlszeile.
Irgendwelche Ideen bitte?

Sopalajo de Arrierez
quelle
2
Müssen Sie die Verbindung zum Internet trennen (kein Internetzugang, aber LAN-Verbindung aufrechterhalten) oder vollständig vom Netzwerk getrennt sein?
Darius
Lesen Sie die erste Zeile: «Internet deaktivieren (nicht LAN)». Wie auch immer, ich habe den Beitrag bearbeitet, um klarer zu sein.
Sopalajo de Arrierez

Antworten:

8

Auf * nix, um das Gateway zu finden:

GW="$(sudo /sbin/route -n | awk '$1=="0.0.0.0" {print $2; exit}')"
sudo /sbin/route del default gw "$GW"
echo "$GW" >~/my_tmp_file

In der letzten Zeile wird der Wert in einer Datei zur späteren Verwendung gespeichert, wenn Sie das Netzwerk neu starten möchten:

sudo /sbin/route add default gw "$(cat ~/my_tmp_file)"

Hinweis : Wenn es mehr als ein Standard-Gateway gibt, muss dieser Code für jedes erneut ausgeführt oder neu geschrieben werden, um dies zu unterstützen.

So funktioniert es: Der obige awkBefehl kann das Gateway erfassen, da die route -nAusgabe wie folgt aussieht:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.2.1        0.0.0.0         UG    0      0        0 eth0
10.0.2.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0

Das Internet-Gateway ermöglicht das Ziel überall ( 0.0.0.0). Daher awkdurchläuft das Skript diese Ausgabe zeilenweise und betrachtet die erste Spalte ( $1in awkNotation aufgerufen ). Wenn sich die erste Spalte an einem beliebigen Ort befindet, wird die zweite Spalte gedruckt, die das Gateway ist. Die Ausgabe des awkBefehls wird dann in der Shell-Variablen erfasst GW. Die Shell kann dann aufgefordert werden, einen $GWbeliebigen Befehl zu ersetzen , der sie benötigt.

John1024
quelle
Der Autor hat den sed-Befehl von q auf awk verwirrt. Wahrscheinlich wollte er stattdessen den Befehl exit verwenden. Andernfalls wird garantiert, dass die GW-Variable nur eine Zeile enthält, und dann route delfunktioniert der Befehl . Dieser Weg funktioniert jedoch nicht, wenn mehr als ein Gateway vorhanden ist, um zu unterstützen, dass das route delfür jede Zeile aufgerufen werden muss. Mit anderen Worten, der Code muss neu geschrieben werden.
Tiago Pimenta