我想在 netns 中创建 Nordlynx 到 Nordvpn 的连接。我知道使用 OpenVPN 在 netns 中启动到 Nordvpn 的 OpenVPN 协议连接非常简单,但我想使用 Nordlynx 协议的性能提升。
据我所知,启动 Nordlynx 连接的唯一方法是使用 Nordvpn 可执行文件。
首次尝试:创建一个简单的 netns(名为mynetns
),并使用 loopback 和 macvlan link(名为mv-eth0
)将其填充到我的互联网连接接口(eth0
,在默认网络命名空间中),并使用默认路由允许通过 访问互联网mynetns
。mv-eth0
现在运行:
sudo ip netns exec mynetns nordvpn connect <somewhere>
nordlynx
这顺利地执行了,但是由创建的Nordvpn 接口(名为)nordvpn
位于默认网络命名空间,mynetns
不像预期的那样。此外,nordvpn
在默认网络命名空间。可以手动将nordlynx
接口和规则移动到另一个网络,但是,为了与该nordlynx
接口交互(重新连接等),必须将其返回到默认命名空间,然后在交互后再移回。非常笨重。
对于一个进程来说,能够选择退出这样的指定网络命名空间是“正常的”吗?
第二次尝试:使用上面描述的简单网络,“监禁”用户(myuser
)在mynetns
(见https://github.com/sebasth/pam_netns)然后使用myuser
连接:
sudo -u myuser nordvpn connect <somewhere>
或者以以下身份登录myuser
并运行:
nordvpn connect <somewhere>
这再次顺利执行,但结果与上面的相同 -nordlynx
接口是在默认网络命名空间中创建的。
我认为这是使用 Docker 或类似产品的典型案例,但我想知道在采用全面的容器路线之前是否还有其他我应该尝试的东西。
Nordvpn 的帮助台状态:
您在此处尝试进行的设置超出了我们的知识或协助范围
答案1
还没有调查,但我强烈怀疑它nordvpn connect
实际上不是创建接口的——它是由守护进程/服务完成的已经运行在初始命名空间内,工具会nordvpn
远程联系该命名空间。对于需要 root 权限才能完成工作的程序,这是一种常见的设计模式,但同时也需要以普通用户身份运行,尤其是对于 GUI 而言。
(这就像 systemctl 实际上并不启动任何东西,而是要求 systemd 启动服务。)
查看systemctl -t service
NordVPN 守护程序并查看是否可以将其配置为在现有命名空间中运行。