pre-post()
为了方便部署流量转发服务,采用了Docker来干这个事,一般情况下一台节点只有一个IP,使用端口映射或者用参数 --network host
直接使用主机的网络来监听和转发是没有问题的,但是有一些节点会存在多个或一个段的外部IP,这时候虽然 IN
方向没有问题,但是 OUT
方向只会采用主机设置的默认路由来访问,就导致了转发的流量都使用同一个IP转发出去了,这是不对的,所以接下来就研究如何才能自定义出口流量,这篇文章则采用给容器配置外部IP的方式实现。
此方法适合非NAT主机
subject(‘实现目标’)
给每个 Docker 容器都配置不同的公网IP出口
solution(‘附加网络到容器’)
1 | # 从 eth1 接口删除IP |
其中
192.168.33.0/24
是子网段,192.168.33.10
是IP地址
1 | # 通过 curl 容器来验证IP结果 |
这样这个容器本身的IP就变成了外部IP
弊端
采用这种方法会把主机的IP剥离,如果你没有其他接入网卡的话会导致断网无法外部进入,只能通过 Console
来调整
参考来源
- https://forums.docker.com/t/public-accessible-ip-in-container-like-bridge-network-in-virtualbox/3668/6
- https://qiita.com/kjtanaka/items/f16757c1f0cc86ff225b
solution(‘桥接网络IP’)
1 | # 创建名为 "pnet01" 的 macvlan 网络 |
其中
23.89.4.0/24
是子网段,23.89.4.1
是网关地址,ens3
是网卡接口名称,23.89.4.205
是外部IP
1 | # 通过 curl 容器来验证IP结果 |
其中
23.89.4.207
是要分配给容器的同网段的IP
其他信息
主机
1 | # ifconfig |
容器内
1 | # ifconfig |
弊端
仅适用于拥有一个段的IP的服务器,采用这种方式的主机会保留一个IP用于通讯和桥接,然后分配同网段的其他IP给容器,如果有不同网段和网关的IP,就需要同样创建第二个网络
参考来源
- https://docs.docker.com/network/network-tutorial-macvlan/#bridge-example
- https://www.aquasec.com/wiki/display/containers/Docker+Networking+101
subject(‘End’)
这篇文章内容是 2018
年写的,一直咕咕到 2021
年才补上,对现在的我来说对容器以及网络方面有了新的理解,所以这篇文章内容其实也算是有点 过时
了,还有一个方法是采用 iptables
NAT进行实现,但是人工维护显然有些繁琐,虽然我没有再这个方向继续研究了,但是希望能给有需要的人一个参考。