一、问题介绍
有一服务想多应用部署在一台主机上,但服务端口是冲突的,由于另外的接入系统端口是写死的,导致应用端口不能修改;
同时这台主台有多张网卡,想借助多网卡完成端口的分配,服务采用docker部署,要求同时支持ipv6 v4
二、技术尝试
首先,在docker 中重新创建一网桥
docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" docker1
上述命令可以指定子网段,和网桥名称,网桥名称 --opt,可以ifconfig中查看可以理解的名称,否则显示br开头的名称
当然也可以不指定,使用docker network create ens1
子网是递增的
其次,绑定ip 端口,解决流量入口,同时也可指定ipv6地址
docker run --name test --net test -p ip:port:port
docker run --name test2 --net ens1 -p ip:port:port
最后,解决出口流量, 这个是让docker 某个网桥全部走指定的ip
iptables -t nat -I POSTROUTING -p all -s 172.18.0.0/16 -j SNAT --to-source 10.2.0.15
iptables规则:
规则表的先后顺序:raw→mangle→nat→filter
规则链的先后顺序:
入站顺序:PREROUTING→INPUT
出站顺序:OUTPUT→POSTROUTING
转发顺序:PREROUTING→FORWARD→POSTROUTING
参考资料: