我有两个 OpenVZ 主机,上面有容器。这是当前布局:
主机 A:(eth0(连接到互联网),eth1(连接到主机 B))
主机 B:(eth0(连接到互联网),eth1(连接到主机 A))
主机 A 和主机 B 上有 OpenVZ 容器。主机 A 和主机 B 各有一个公共 IPv4 地址,容器没有公共 IP,它们需要位于内部专用网络上。
如何配置网络以便两个主机上的容器可以相互通信并访问互联网。
答案1
在收到大量关于 SF... 不是!?的回复后,我做了自己的研究并找到了答案。这就是我的方法。
配置
-SSH 到主机 A 并更新 /etc/network/interfaces 如下:
auto lo
iface lo inet loopback
iface eth1 inet manual
auto vmbr1
iface vmbr1 inet static
address 10.0.2.99
netmask 255.255.255.0
bridge_ports eth1
bridge_stp off
bridge_fd 0
auto eth0
iface eth0 inet static
address public_ip_here
netmask 255.255.255.0
gateway public_ip_gateway_here
auto vmbr0
iface vmbr0 inet static
address 10.0.1.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.0.1.0/24' -o eth0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.0.1.0/24' -o eth0 -j MASQUERADE
-SSH 到主机 B 并更新 /etc/network/interfaces 如下:
auto lo
iface lo inet loopback
iface eth1 inet manual
auto vmbr1
iface vmbr1 inet static
address 10.0.2.199
netmask 255.255.255.0
bridge_ports eth1
bridge_stp off
bridge_fd 0
auto eth0
iface eth0 inet static
address public_ip_here
netmask 255.255.255.0
gateway public_ip_gateway_here
auto vmbr0
iface vmbr0 inet static
address 10.0.1.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.0.1.0/24' -o eth0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.0.1.0/24' -o eth0 -j MASQUERADE
-在所有新容器上,创建 eth0 (->vmbr0) 和 eth1 (->vmbr1),并从适当的块中为每个 eth 接口分配一个静态 IP。
-在所有新容器上,确保默认路由指向 10.0.1.1,如果不是,则相应地更新容器中的网络配置文件。
服务器网络拓扑:
主机 A(eth0:公网 IP,vmbr0:10.0.1.0/24)(eth1/vmbr1:10.0.2.99/24)
主机 B(eth0:公网 IP,vmbr0:10.0.1.0/24)(eth1/vmbr1:10.0.2.199/24)
容器(eth0-mapped-to->vmbr0:10.0.1.[CT#]/24)(eth1-mapped-to->vmbr1:10.0.2.[如果在 host-a 上则为 CT#,否则为 CT#+100]/24)
两个主机上的容器可以在 10.0.1.x IP 块中拥有相同的 IP,但不能在 10.0.2.x IP 块中拥有相同的 IP
示例容器配置:
主机 A 上的容器 # 100(eth0->vmbr0:10.0.1.100/24,网关:10.0.1.1)(eth1->vmbr1:10.0.2.100/24,网关:10.0.2.99)
主机 B 上的容器 # 100(eth0->vmbr0:10.0.1.100/24,网关:10.0.1.1)(eth1->vmbr1:10.0.2.200/24,网关:10.0.2.199)
主机 A 上的容器 # 101(eth0->vmbr0:10.0.1.101/24,网关:10.0.1.1)(eth1->vmbr1:10.0.2.101/24,网关:10.0.2.99)
主机 B 上的容器 # 101(eth0->vmbr0:10.0.1.101/24,网关:10.0.1.1)(eth1->vmbr1:10.0.2.201/24,网关:10.0.2.199)