我在服务器上有一个 /64 IPv6 子网。我将 docker 配置为使用其中的默认 /80 部分,并且我有一个由 2 个依赖容器组成的应用程序。这两个容器位于 abcd:1::/80 网络中。可能有 100 个此应用程序实例正在运行。
问题是两个容器都需要有相同的 IP。至少我需要欺骗应用程序让它认为是这样的。它们由两个端口组成,app
现在monitor
公开app
两个端口。其中一个端口将被monitor
另一个端口通过外部源调用。monitor
与外部源通信,需要使用与app
目前其配置如下:app
使用abcd:1::2
和monitor
使用abcd:1::3
我需要做的是通过创建的网络桥docker network create
将所有流量路由到公共 IP。此 IP 可以是任何子网。我认为最简单的方法是路由abcd:1:3
到abcd:1:2
。最后调用
dig +short myip.opendns.com @resolver1.opendns.com
来自容器的必须返回相同的值。创建网桥后,可以通过 ip 表修改网桥来实现这一点吗?当前主机系统是 debian。
答案1
我怀疑这是否是最好的方法(也许“监控”应该通过“应用程序”代理请求),但最有可能的是你可以在主机上使用常规的 ip6tables SNAT,就像在 IPv4 中一样:
-A PREROUTING -s abcd:1::3 -j SNAT --to-source abcd:1::2
可以使用它NETMAP
来自动化所有地址的 SNAT:
-A PREROUTING -s abcd:1::/80 -j NETMAP --to ::2/::f