Как я могу переместить интерфейс из сетевого пространства имен?

10

Если я временно переместить интерфейс в сеть с

ip link set eth10 netns myns

тогда он больше не виден в корне, только в пространстве имен myns.

Как мне переместить его обратно, что-то вроде (этого, очевидно, не существует):

ip link unset eth10

или возможно

ip link set eth10 netns root

или похожие?

Дейч
источник

Ответы:

13

Я нашел ответ. Конечно, вы не можете сделать это изнутри. Но если вы выполняете ip netns exec ....изнутри пространство имен корневой сети, все это работает.

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

Тогда это работает! Он берет PID (в данном случае 1), которому мы назначаем его в контексте выполняемой команды (оболочки), прежде чем мы введем netns. Выполнено!

Дейч
источник
Будем надеяться, что «1» фактически ссылается на «корневое» сетевое пространство имен ...
TheDiveO
переместить eth10 обратно в сетевое пространство имен по умолчанию: ip netns exec myns ip link устанавливает eth10 netns по умолчанию
Тед Фенг
В моей системе Debian 10 «default», кажется, действительно 1. ip netns exec testns ip link set tun0 netns 1сработало, тогда как «default» привело к Error: argument "default" is wrong: Invalid "netns" value.
Пол
Дальнейшее возмущение показывает, что это идентификаторы. Если вы создали одно дополнительное пространство имен, которое будет иметь идентификатор 2.
Пол
5

Вы можете использовать ip netns deleteфункцию. Со страницы руководства:

ip [-all] netns delete [NAME] - удалить имя сетевого пространства имен

Если NAME присутствует в / var / run / netns, он монтируется и точка монтирования удаляется. Если это последний пользователь сетевого пространства имен, то сетевое пространство имен будет освобождено, и все физические устройства будут перемещены к стандартному , в противном случае сетевое пространство имен будет сохраняться до тех пор, пока у него не останется больше пользователей. ip netns delete может завершиться ошибкой, если точка монтирования используется в другом пространстве имен монтирования.

Его нельзя использовать для любых целей, но это определенно самый простой маршрут.

Дейв
источник
4

На основании ответа deitch у меня сработало выполнение команды из пользовательских сетей:

ip netns exec myns ip link set eth10 netns 1

Shedee
источник