在任何时候,我的服务器上都有大约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
如果您计划部署更多容器和服务,则可以根据您的端口约定编写这些规则的脚本。