泊坞窗:如何到另一个IP容器内重定向IP

问题描述 投票:3回答:1

我从来没有碰过的码头工人iptables的,但现在我想我不得不这样做。在一个特殊的容器,一个程序/脚本调用一个IP 57.55.10.210,我不能改变它(另一回事)。我想调用这个IP重定向到192.168.38.13。如何才能做到这一点,这是否将有一个影响到其他容器?提前致谢!坦率

docker iptables
1个回答
1
投票

一种方法是让你的容器图像内安装iptables和分配你的容器内核capability(7) NET_ADMIN

docker run --cap-add=NET_ADMIN ...

docker run reference和/或docker-compose file reference

然后,你可以添加无论是入口点脚本,一个命令或从中启动容器时加载的规则集的.rules文件。或者你直接嵌入规则到图像。在你的情况下,入口点脚本的内容将如下所示:

iptables -t nat -A PREROUTING -d 57.55.10.210 -j DNAT --to-destination 192.168.38.13
iptables -t nat -A POSTROUTING -s 192.168.38.13 -j SNAT --to-source 57.55.10.210

或与.rules文件,在您的入口点脚本来完成:

/sbin/iptables-restore /some-mounted-volume-or-file

为了得到一个规则文件,你可以调用你的容器的单次运行:

docker run --cap-add=NET_ADMIN --rm somethingwith/iptables /bin/bash -c "iptables -t nat -A PREROUTING -d 57.55.10.210 -j DNAT --to-destination 192.168.38.13; iptables -t nat -A POSTROUTING -s 192.168.38.13 -j SNAT --to-source 57.55.10.210; /sbin/iptables-save" > outside-of-container.rules

这将让你这样的:

# Generated by iptables-save v1.6.1 on Fri Feb  8 14:42:52 2019
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -d 57.55.10.210/32 -j DNAT --to-destination 192.168.38.13
-A POSTROUTING -s 192.168.38.13/32 -j SNAT --to-source 57.55.10.210
COMMIT
# Completed on Fri Feb  8 14:42:52 2019

据我所知,这种做法不应该与主机上的其他容器干扰。

© www.soinside.com 2019 - 2024. All rights reserved.