如何在 Linux 上查询和更改网络命名空间?

如何在 Linux 上查询和更改网络命名空间?

我想知道是否有办法

  1. 查询当前 shell 所在的网络命名空间
  2. 更改当前 shell 的当前网络命名空间

我知道我可以做这样的事情

sudo ip netns exec <namespace_name> <some command>

在特定的网络命名空间中执行特定的命令,但我当时想的是

:~$ sudo query_current_namespace
some_namespace
:~$ sudo change_current_namespace_to other_namespace
:~$ sudo query_current_namespace
other_namespac
:~$ dothings in newnamespace

就像将根目录更改为某个子目录一样,所以我不必在每个命令前加上这个sudo ip netns exec <namespace>东西。

在网上搜索后,我似乎必须编写自己的小型 C 程序,就像建议的那样在这篇博文中. 是否已有一个“标准”工具来实现这一点?

编辑:我发现我可以做到

sudo ip netns exec <namespace> bash

这将为我提供一个新命名空间中的 root shell。差不多完成了,但是我该如何查询当前命名空间呢?

答案1

参见手册页:

   ip netns identify PID - Report network namespaces names for process
       This command walks through /var/run/netns and finds all the network
       namespace names for network namespace of the specified process.

因此你可以这样做:

ip netns identify $$

相关内容