我租用的专用服务器被分配了一个 /29 ips 块。我希望能够保留其中一个 IP 用于管理服务器本身,并将其余 IP 转发到其自己的内部子网,以便多个 OpenVZ 容器能够共享公共 IP。
例如,我可能在 4 个容器中有两个 Web 服务器和两个文件服务器。这不是实际要运行的服务,但为了便于举例,我将使用它们。我希望我的一个公共 IP(XX.XX.XX.2)指向 192.168.2.0/24 子网上的两个容器,另一个公共 IP(XX.XX.XX.3)指向 192.158.3.0/24 子网中的容器。子网之间不需要通信,但每个容器必须能够访问 Web。
我曾尝试使用如上所述的基于源的路由这里和 OpenVZ wiki 上描述的 NAT这里没有成功。主机运行的是 Centos 6,每个虚拟机运行的是 Debian 7(如果这有区别的话)。
答案1
设置 openvz 容器以使用桥接网络(使用 veth 接口)。
为您想要连接容器的每个内部网络创建一个网桥(在您的情况下有 2 个网桥,一个用于 192.168.2.0/24,一个用于 192.168.3.0/24。我们将它们称为 br2 和 br3)。
为每个网桥提供正确网络上的 IP 地址(例如 br2 可以是 192.168.2.1,br3 可以是 192.168.3.1)
配置将它们连接到各自网桥的容器。
例如,将应驻留在网络 192.168.2.0/24 上的容器连接到 br2(假设它们是 CT1 和 CT2),将您想要驻留在 192.168.3.0/24 上的容器连接到 br3(假设它们是 CT3 和 CT4)。
为每个容器分配一个与其所连接网桥位于同一网络上的 IP 地址。设置网桥的 IP 地址和默认网关。
例如:CT1 和 CT2 的 IP 分别为 192.168.2.101 和 192.168.2.102。它们的网关为 192.168.2.1(br2 的 IP 地址)
在物理主机上启用 ip 转发
配置物理主机连接到 Internet 的接口上的所有公共 IP(假设为 eth0),并使用正确的子网掩码。
为您的 CT 配置 NAT,如下所示:
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j SNAT --to first.pulic.ip.address iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -o eth0 -j SNAT --to second.pulic.ip.address