Linux:是否有方便的方法来执行将其绑定到所选 IP 地址的程序?

Linux:是否有方便的方法来执行将其绑定到所选 IP 地址的程序?

在 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 文章也很有帮助。

相关内容