GIC目前的产品结构里还不支持浮动IP,这对于想尝试docker等新东西的小伙伴是不方便的。这篇文章尝试在GIC虚拟数据中心里用一台虚机做NAT,为虚拟数据中心中的其他机器提供浮动IP支持。
第一步,我在GIC里创建了一个“Docker试验台”虚拟数据中心,购买了一个8个IP的公网IP段,并且购买了三台虚机:
NetworkController001 - 用作NAT服务的网络控制节点。
ComputeNode001,002 - 用作计算节点。
第二步,创建一个C段的私网,10.10.1.0/24,把三台机器都挂载到这个私网上。
第三步,三台机器只有NetworkController001挂载到公网上(101.251.244.194)。
如下图所示:
实验的目的是,把101.251.244.195,和101.251.244.196这两个公网IP作为浮动IP挂载到两台计算节点上。
先画一下原理图,然后我将在回复里把实验中的步骤补充进来。
见下图:
1. 创建br-ex网桥,作为连接外网的网桥。并设置网桥IP地址。
brctl addbr br-ex
ip link set br-ex up
ip addr add 101.251.244.194/29 dev br-ex; \
ip addr del 101.251.244.194/29 dev ens192; \
brctl addif br-ex ens192; \
ip route del default; \
ip route add default via 101.251.244.193 dev br-ex
2. 创建一对veth,veth-b连接到br-ex上,veth-a设置为ip地址:101.251244.195和196
ip link add veth-a type veth peer name veth-b //创建一对veth
brctl addif br-ex veth-b //把veth-b连接到网桥上,成为一个interface
ip link set veth-b up
ip addr add 101.251.244.195/24 dev veth-a
ip addr add 101.251.244.196/24 dev veth-a
ip link set veth-a up
3. 安装iptables-service,然后编辑/etc/sysconfig/iptables文件,增加:
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -d 101.251.244.195/32 -j DNAT --to-destination 10.10.1.3
-A OUTPUT -d 101.251.244.195/32 -j DNAT --to-destination 10.10.1.3
-A POSTROUTING -s 10.10.1.3/32 -j SNAT --to 101.251.244.195
-A PREROUTING -d 101.251.244.196/32 -j DNAT --to-destination 10.10.1.4
-A OUTPUT -d 101.251.244.196/32 -j DNAT --to-destination 10.10.1.4
-A POSTROUTING -s 10.10.1.4/32 -j SNAT --to 101.251.244.196
COMMIT
service iptables restart
4. 在10.10.1.3,4上把网关设到10.10.1.2上:
ip route add default via 10.10.1.2