如何将接口移出网络命名空间?

如何将接口移出网络命名空间?

如果我将一个接口暂时移到 netns 中

ip link set eth10 netns myns

那么它不再在根目录中可见,仅在命名空间 myns 内可见。

我如何将其移回,类似于(这些显然不存在):

ip link unset eth10

也许

ip link set eth10 netns root

或者类似的东西?

答案1

我找到了答案。当然,你不能在 netns 中执行此操作。但是,如果你ip netns exec ....在根网络命名空间中执行此操作,那么一切都会正常。

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

然后它就成功了!在我们进入 netns 之前,它会将我们为其分配的 PID(在本例中为 1)置于执行命令(包装器)的上下文中。完成!

答案2

你可以使用这个ip netns delete函数。从手册页中可以看到:

ip [-all] netns delete [ NAME ] – 删除网络命名空间的名称

如果 NAME 存在于 /var/run/netns 中,则将其卸载并删除挂载点。如果这是网络命名空间的最后一个用户,则网络命名空间将被释放,并且所有物理设备将移至默认设备,否则网络命名空间将一直存在,直到没有更多用户。如果挂载点正在另一个挂载命名空间中使用,ip netns delete 可能会失败。

它不能用于所有目的,但绝对是最简单的途径。

答案3

根据 deitch 的回答,对我有用的是从自定义 netns 执行命令:

ip netns exec myns ip link set eth10 netns 1

相关内容