利用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都要利用起来,按照上面的方法,多次操作即可。
继续阅读
- 上一篇 >:利用python解密SecureCRT的密码文件
- 下一篇 >:记一次MySQL服务启动报错,无日志更新故障修复