利用docker实现服务器多IP通讯

标题比较晦涩难懂,简单解释下:假如一个服务器有五个ip,我们部署了某一个服务,我们可以在配置文件里面修改IP为五个IP,但是服务器始终只有一个出口,最后落地出口还是一个IP,所以我们可以借助docker,为一个服务绑定一个IP,这样服务器不管有多少IP,都可以直接利用起来。

流程图:

普通模式:

优化后:

注意一个最大的问题:程序需要用docker跑。

废话不多,开整:

先假如机器有五个IP:

192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6

通过服务器上curl cip.cc可以看到出口IP(举例):

[root@pds1195 ~]# curl cip.cc
IP : 192.168.1.2

我们将docker绑定ip和指定端口跑起来:

docker run -d --name=speedtest --restart=always -p 192.168.1.2:6688:80/tcp -p -p 192.168.1.2:6688:80/udp ilemonrain/html5-speedtest:alpine

为什么要指定docker绑定的IP?

这个是为了对入口数据进行指定,若只是对出口IP进行限制,可以跳过这一步,直接使用-p绑定端口,然后操作下面的步骤。

然后查看docker的内网ip(docker会在启动后,指定一个内网ip):

docker inspect speedtest #(speedtest是启动时候指定的名字,如果未指定,请使用启动后的显示的id)

执行后,我们可以在末尾部分找到类似于下面的信息:

"EndpointID": "d5582119d31f9dd929c05a16dea25fa5a7894ac01ccd9f701f741ec47d977551",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "0e509efa6ad95f89a885838a336fd2d829136fa88a37a17813218e7c8059f8b9",
"EndpointID": "d5582119d31f9dd929c05a16dea25fa5a7894ac01ccd9f701f741ec47d977551",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]

里面的"IPAddress": "172.17.0.2"就是内网地址。

接下来,我们将此地址通过iptables的nat方式,映射到指定的ip:192.168.1.2上。

iptables -t nat -I POSTROUTING -p all -s 172.17.0.2 -j SNAT --to-source 192.168.1.2
iptables-save

这样,程序出口就通过192.168.1.2的ip进行发送。如果五个IP都要利用起来,按照上面的方法,多次操作即可。

» 本文链接:利用docker实现服务器多IP通讯
» 转载请注明来源:刺客博客
» 如果文章失效或者安装失败,请留言进行反馈。