6 个版本
0.2.2 | 2020年9月30日 |
---|---|
0.2.1 | 2020年2月20日 |
0.1.2 | 2020年2月17日 |
#12 在 #命名空间
6KB
NetNS Exec
这是一个用于在 Linux 网络命名空间中执行进程的超级简单的命令。我个人用它来在我的整个桌面运行在一个只有 wireguard 接口的命名空间中,但你也可以用它来做其他事情。
wireguard 的开发者建议在特定的网络命名空间中创建所有未加密的网络接口(如 eth0
或 wlan0
),然后将与 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