Wie kann ich eine Schnittstelle aus einem Netzwerk-Namespace verschieben?

9

Wenn ich eine Schnittstelle vorübergehend in ein Netz mit verschiebe

ip link set eth10 netns myns

dann ist es nicht mehr im root sichtbar, sondern nur noch im namespace myns.

Wie bewege ich es zurück, so etwas wie (diese existieren offensichtlich nicht):

ip link unset eth10

oder vielleicht

ip link set eth10 netns root

o.ä?

Gottheit
quelle

Antworten:

12

Ich habe eine Antwort gefunden. Sicher, Sie können es nicht aus dem Netz heraus tun. Wenn Sie jedoch ip netns exec ....aus dem Namespace des Stammnetzwerks ausführen , funktioniert alles.

ip netns exec <PID> ip link set eth10 netns 1

Dann funktioniert es! Es dauert die PID (in diesem Fall 1), der wir sie zuweisen, im Kontext des ausführenden Befehls (Wrapper), bevor wir die Netze eingeben. Erledigt!

Gottheit
quelle
Hoffen wir, dass "1" tatsächlich auf den "Root" -Netzwerk-Namespace
verweist
Verschieben Sie eth10, um zum Standard-Netzwerk-Namespace zurückzukehren: IP-Netze Exec Myns IP-Link Set Eth10 Netns Standard
Ted Feng
Auf meinem Debian 10-System scheint "Standard" tatsächlich 1. ip netns exec testns ip link set tun0 netns 1funktioniert zu haben, während "Standard" dazu führte Error: argument "default" is wrong: Invalid "netns" value.
Paul
Weiteres Durcheinander zeigt, dass dies IDs sind. Wenn Sie einen zusätzlichen Namespace mit der ID 2 erstellt haben.
Paul
5

Sie können die ip netns deleteFunktion verwenden. Von der Manpage:

ip [-all] netns delete [NAME] - löscht den Namen eines Netzwerk-Namespace (s)

Wenn NAME in / var / run / netns vorhanden ist, wird es umgehängt und der Mount-Punkt wird entfernt. Wenn dies der letzte Benutzer des Netzwerk-Namespace ist, wird der Netzwerk-Namespace freigegeben und alle physischen Geräte werden auf den Standard- Namespace verschoben. Andernfalls bleibt der Netzwerk-Namespace bestehen, bis keine Benutzer mehr vorhanden sind. Das Löschen von IP-Netzen kann fehlschlagen, wenn der Mount-Punkt in einem anderen Mount-Namespace verwendet wird.

Es kann nicht für alle Zwecke verwendet werden, aber es ist definitiv die einfachste Route.

Dave
quelle
4

Was für mich basierend auf der Antwort von deitch funktioniert hat, ist, den Befehl aus den benutzerdefinierten Netzen auszuführen:

ip netns exec myns ip link set eth10 netns 1

Shedee
quelle