使用iptables进行端口范围从硬件节点到VZ容器的一对一映射

在任何时候,我的服务器上都有大约3-4个VZ容器(CentOS6上的硬件节点)。 我有不同的容器上运行的Web服务器,SSH,邮件等。 从networking中的另一台主机,它们被作为ip.of.hardware.node:port访问,iptables在nat表中用规则转发它们。

解释我真正想要的:
假设我的容器ID是2,3,4。他们的IP分别是192.168.0.2,192.168.0.3,192.168.0.4。
我想要一个设置,如果有人访问ip.of.hardware.node:2080,连接应该被转发到192.168.0.2:80。
同理:
ip.of.hardware.node:2022 => 192.168.0.2:22(ContainerID:2)
ip.of.hardware.node:3022 => 192.168.0.3:22(ContainerID:3)
ip.of.hardware.node:4080 => 192.168.0.4:80(ContainerID:4)
ip.of.hardware.node:4443 => 192.168.0.4:443(ContainerID:4)
… 等等。

这样,每个容器获得一个1000端口的工作块。有没有一种方法来实现这个没有为每个容器指定1000规则?

在硬件节点上,您需要为每个所需的转发服务创build一个IPtables DNAT规则。

使用您的示例场景:

 iptables -t nat -A PREROUTING -p tcp --dport 2022 -i eth0 -j DNAT  - 到目的地192.168.0.2:22
 iptables -t nat -A PREROUTING -p tcp --dport 3022 -i eth0 -j DNAT  - 到目的地192.168.0.3:22
 iptables -t nat -A PREROUTING -p tcp --dport 4080 -i eth0 -j DNAT  - 到目的地192.168.0.4:80
 iptables -t nat -A PREROUTING -p tcp --dport 4443 -i eth0 -j DNAT  - 到目的地192.168.0.4:443

如果您计划部署更多容器和服务,则可以根据您的端口约定编写这些规则的脚本。