将流量转发到Docker容器

Modified on: Sat, 30 Jun 2018 08:42:00 +0800

我有以下系统方案,其中主机A(88.12.0.1)和主机B(193.11.8.1)仅通过SSH连接。在主机B(+ 172.17.0.2)上有一个运行IP 172.17.0.3的Docker容器。

现在我在主机A上有一个应用程序,它必须与主机B上的应用程序(端口22222)和容器上的应用程序(端口22223)进行通信。

主机A上的另一个应用程序(端口8081)作为服务器运行,必须由Docker容器应用程序联系。

到目前为止,我已设法通过在主机A上设置以下规则,仅将主机A的流量转发到B:

ssh -NL 22222:193.11.8.1:22222 username@193.11.8.1 -v
ssh -NL 22223:193.11.8.1:22223 username@193.11.8.1 -v

只有SSH可用作主机A和主机B之间的端口。

上述第一条规则按原样运行,因为它涵盖了主机A上主机A联系应用程序上应用程序的第一种情况。
第二个规则是将用于docker容器的流量从Host A转发到Host B(但需要从那里转发到docker容器)。

主机B上的映射应该是具有目标端口22223的传入流量应该转发到Docker容器(172.17.03:22223)。当将流量发送到8081时,Docker容器必须通过主机B将端口8081转发到主机A.
容器正在运行,SSH通道将主机A和B连接到在主机A和端口8081上运行的服务器应用程序。

作者:,wasp256

最佳答案

我并不完全明白你想要什么,但我只是将你的问题的编辑翻译成iptables规则。

但首先,你在运行容器时没有尝试映射端口:

 docker run -d -p 22223:22223 yourimage

这个好的转发每个数据包都来自端口22223上的主机ip到容器。

iptables上使用B host

iptables -t nat -A PREROUTING -p tcp -d 193.11.8.1 --dport 22223 -j DNAT --to 172.17.0.3:22223

上述命令会将来自193.11.8.1:22223的数据包的目的地更改为172.17.0.3:22223

iptables -t nat -A PREROUTING -p tcp -s 172.17.0.3 --dport 8081 -j DNAT --to 88.12.0.1

以上命令将更改来自172.17.0.3的数据包的目标,目标端口为808188.12.0.1:8081


相关问答

添加新评论