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


11

在FreeBSD 4.9中,仅需单个命令即可轻松完成

jail [-u username]  path hostname ip-number command

如果path是/您运行的程序,则与往常一样,但所有网络通信均被限制为仅使用给定的IP地址作为源。有时非常方便。

现在在Linux中有LXC,它看起来与FreeBSD的jail(或Solaris的)区域非常相似-您能想到类似的方法来执行程序吗?


您正在尝试使用什么程序进行此操作?许多程序都是可配置的,因此可以告诉它们要绑定到哪个IP。
沃伦·杨

@WarrenYoung,谢谢你,但“很多”!=“全部”
poige 2014年

“禁止”可执行文件使用特定IP的一个很好的用例是在LAN一方的一台计算机上运行多个游戏服务器。例如,Valve游戏仅在端口27015-27020上广播,因此,每个IP只能有6个服务器。因此,您在NIC上添加了虚拟IP,但随后需要在游戏服务器的命令行上指定“ + ip <地址>”,该命令行将停止向客户端广播其状态=>在LAN浏览器中看不到任何服务器。因此,“ + ip”将不起作用。因此,我们需要在只能找到1个IP地址的环境中监禁每台服务器。结果:#servers +客户端中没有限制,可以看到所有服务器。
Timmos

Answers:


12

在只能看到所需IP地址的网络名称空间内启动该过程可以完成类似的操作。例如,假设我只希望本地主机可用于特定程序。

首先,我创建网络名称空间:

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

如果我想将其限制为本地主机以外的地址,则可以使用以下命令将其他接口添加到名称空间中:

ip link set DEVICE_NAME netns NAMESPACE

如果接口可能具有多个IP地址,我将不得不做更多的实验来弄清楚如何将单个IP地址添加到命名空间中。

有关名称空间LWN文章也很有帮助。


但是值得一提的是,由于网络名称空间具有自己的路由表等,因此需要做更多的准备。如果有人采用更简单的模仿方式jail,我将使用它。;)
poige 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.