#命名空间 #网络 #终端 #CLI #进程 #Linux #执行

应用 netns-exec

在 Linux 网络命名空间中执行进程

6 个版本

0.2.2 2020年9月30日
0.2.1 2020年2月20日
0.1.2 2020年2月17日

#12#命名空间

MIT 许可证

6KB

NetNS Exec

这是一个用于在 Linux 网络命名空间中执行进程的超级简单的命令。我个人用它来在我的整个桌面运行在一个只有 wireguard 接口的命名空间中,但你也可以用它来做其他事情。

wireguard 的开发者建议在特定的网络命名空间中创建所有未加密的网络接口(如 eth0wlan0),然后将与 wireguard 接口一起将其移动到 init(例如,主)网络命名空间中,同时保留其套接字在原始命名空间中(与未加密的接口一起)。这样,你的 init 网络命名空间中就只有 wireguard 接口,所有数据都会通过该接口传输(无需配置路由等)。这显然非常酷,如果你能这样做的话...不幸的是,使所有这些工作可能有点困难,因为需要在不同的网络命名空间中启动 dhcpd、wpa_supplicant 或 iwd。所以,这让我能够在只移动 wireguard 接口到命名空间中的情况下运行我的桌面,将 wlan0 等保留在 init 命名空间中。

如果你想进入一个命名的网络命名空间,你必须首先创建该网络命名空间,然后才能运行此命令。创建后,你可以这样运行

netns-exec <namespace> cmdline here

一个更具体的例子是

netns-exec private sway

你也可以通过进程的 PID 进入任何进程的网络命名空间 - 例如,进入 PID 1 的网络命名空间可以这样操作

netns-exec 1 bash

这会给你一个在 PID 1 的网络命名空间中的 bash shell(基本上意味着“主”或“全局”网络命名空间)。

要作为普通用户运行而不需要 sudo,你需要设置 setuid 位(并且可执行文件应由 root 所有)。一旦我们切换了网络命名空间(一个特权操作),我们就降级权限。

依赖项

~1.5MB
~36K SLoC