在 FreeBSD 4.9 中,只需一个命令即可轻松完成,例如
jail [-u username] path hostname ip-number command
如果路径是,/
您与平常一样运行相同的程序,但其所有网络通信都被限制为仅使用给定的 IP 地址作为源。有时它非常方便。
现在 Linux 中有 LXC,它看起来确实与 FreeBSD jail
(或 Solaris 的区域)非常相似——你能想到类似的方式来执行程序吗?
答案1
在 a 内启动进程网络命名空间只能看到所需的IP地址可以完成类似的事情。例如,假设我只希望 localhost 可用于特定程序。
首先,我创建网络命名空间:
ip netns add limitednet
命名空间默认有一个环回接口,所以接下来我只需要打开它:
sudo ip netns exec limitednet ip link set lo up
现在,我可以使用以下命令运行程序ip netns exec limitednet
,它只能看到环回接口:
sudo ip netns exec limitednet ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
如果我想将其限制为 localhost 以外的地址,我可以使用以下命令将其他接口添加到命名空间中:
ip link set DEVICE_NAME netns NAMESPACE
我必须进行更多实验才能弄清楚在接口可能具有多个 IP 地址的情况下如何将单个 IP 地址添加到命名空间中
这关于命名空间的 LWN 文章也很有帮助。