网络命名空间(非)隔离?

jee*_*ebs 1 linux raspberry-pi network-namespaces

我一直在对 Linux 和网络进行一些研究,并且遇到了命名空间。阅读文章并学习如何设置后,我很困惑。

我在我的系统上安装了一个应用程序,当我在全局命名空间(无命名空间)中运行它时,我可以使用主机的 IP 地址从 LAN 连接到 web gui。现在,当我创建命名空间时,在创建任何虚拟适配器或执行任何其他操作之前,如果我在命名空间中打开应用程序,我仍然可以使用相同的 IP 从 LAN 连接到它。

我用来启动服务的命令是:

sudo ip netns exec blue service *application* start
Run Code Online (Sandbox Code Playgroud)

我的理解是“网络”命名空间应该隔离进程。那么我错过了什么?

顺便说一句,我通常对命名空间使用这些说明:

介绍 Linux 网络命名空间

Dep*_*iel 5

那么我错过了什么?

您缺少的是与service通信init,本质上是逃避网络命名空间。应用程序最终在与 init 系统相同的网络命名空间中运行(默认情况下)。

在其核心的问题是,service不只是forkexec守护进程二进制应用程序(这将保留命名空间)。相反,它只不过是init通过(我相信)一个 Unix 域套接字传递它的参数。安全容器还隔离文件系统以防止此类事情发生。

我会尝试直接调用应用程序守护程序二进制文件(ip netns exec [namespace]当然在 下)。或者使用真正的容器软件,其他人已经整理了所有棘手的细节......