我可能使用了错误的工具,但网络命名空间似乎是近乎理想的选择。
我有 3 个程序无法指定侦听接口或地址(仅侦听“0.0.0.0”)。我想将这些服务放在 netns 中,它们只能看到内部地址(即 192.168.3.0/24),从而防止它们监听外部流量。
我创建了一个名为“Local”的 netns,并创建了一个 veth 来跨越主 ns 和本地 ns,例如:
ip link add veth1 type veth peer name vpe1
我将 veth1 与其他 2 个物理接口一起绑定到本地网桥 (br0)。 “brctl show br0”现在显示 3 个接口:eth0、eth5 和 veth1。
接下来,我将本地网络上的 vpe1 的 IP 设置为“129”。测试表明我能够从其他主机和 Local-ns 中的 bash-shell 对其进行 ping 操作,我是仅有的能够 ping 通本地网络上的主机。
然而,progs(其中之一是 xinetd)旨在为服务器本地网络地址(桥地址 192.168.3.1)的调用提供服务。在“仅限本地”命名空间中拥有不同的 IP 并不能让它们响应“服务器”上的服务。
尝试其他一些选项——我首先尝试为命名空间内的“vpe1”IP 提供相同的主机名,然后尝试提供相同的 IP...没有任何效果或效果。
从概念上讲,我认为有一个子网络复制主名称空间,然后从中删除外部接口 - 让这些进程只看到本地接口和服务请求,就像他们以前看到所有接口时一样(并且不在命名空间中)。
虽然这似乎作为一个单独的命名空间的理想位置,可以为一组进程提供服务器接口的不同逻辑视图,我不知道如何让 netns 简单地提供不同的“视图”(使用“bind/named-speak”) ')给那些“客户”。
Linux 的网络命名空间可以实现这一点吗?或者他们缺少什么可以实现这一点?如果命名空间没有提供这种类型的“分段”,是否可以在没有大量 iptable 路由的情况下提供它来模拟主命名空间中的客户端程序?
谢谢! A☆a
答案1
简而言之,Linux 网络命名空间是隔离的 IP 堆栈。忘记网络命名空间之类的虚拟事物,只需问自己:如何使用路由器、主机、桥接盒和以太网电缆来解决我的任务?如果您拥有物理设置,那么它几乎可以自然地转换为虚拟双胞胎。但不要忘记数据包过滤规则,它们可能是关键。
我不完全明白你的任务到底是什么。但有一件事引起了我的注意,因为它可能根本不是您想要的:连接物理网络接口的桥,以及连接到另一个网络命名空间(IP 堆栈)的 veth 电缆。这意味着通过网桥,任何人都可以进行完整的第 2 层访问。 IP 地址在此级别并不重要。您可以授予对单独网络命名空间的完全直接网络访问权限。这本身并没有错(事实上,我个人知道一些非常有用的情况),但这就是您想要的情况吗?