我在一台服务器(CentOS6 上的硬件节点)上随时都有大约 3-4 个 VZ 容器。我在不同的容器上运行着 Web 服务器、ssh、邮件等。从网络中的另一台主机,它们以 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 条规则?
答案1
在硬件节点上,您需要为每个所需的转发服务创建一个 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
如果您计划部署更多容器和服务,则可以根据端口约定编写这些规则的创建脚本。