IPTables / Netfilter SNAT流量可用于其他主机,但是当目标是SNAT到源IP时

时间:2019-02-25 03:53:51

标签: docker iptables netfilter

对于简单的SNAT,我可能只是一个新手问题。场景的简短概述:

  1. 有一台服务器,具有专用IP和公用IP,并且 Docker已安装。
  2. Docker中的容器需要通过SSH连接到其他主机 专用IP接口。
  3. 默认情况下,Docker仅在公共IP上发送流量。
  4. netfilter SNAT规则可用于路由来自 专用IP的容器。 (目前,这似乎是普通Docker的推荐解决方案,请参见下面的[1])
  5. 当连接到专用接口(例如10.0.0.7到10.0.0.3)上的其他主机时,这非常有用,但是,当向该专用IP上的SSH端口发出请求时,来自SIP的SNAT流量, 才不是 工作(例如10.0.0.7至10.0.0.7不起作用)。

SNAT规则看起来非常简单,所以我想我只是在这里遗漏了一些明显的东西。这是SNAT规则:

系统IP:

208.10.10.123 (The public interface IP)
10.0.0.7 (The private interface IP)

SNAT规则:

*nat
:DOCKER - [0:0]
:EXTERNAL_IP - [0:0]
-A POSTROUTING -j EXTERNAL_IP
-A EXTERNAL_IP -s 172.17.0.4/32 -j SNAT --to-source 10.0.0.7
-A EXTERNAL_IP -j RETURN

使用nc命令演示该问题:

# Works: Request to another host on the private interface:
bash-4.4# nc -zv 10.0.0.3 22
10.0.0.3 (10.0.0.3:22) open

# Not Working: Request to local private IP interface of server:
bash-4.4# nc -zv 10.0.0.7 22
nc: 10.0.0.7 (10.0.0.7:22): Operation timed out

在研究此问题时,我似乎找不到有关SNAT连接的任何讨论或文档,其中目标是从SNAT连接的同一IP上的端口。任何指针将不胜感激!

(此外,我很高兴提供任何其他有用的信息。在我看来,以上内容是迄今为止我能想到的最简单的可重现案例,但我可能错过了一些显而易见的事情。)< / p>

[1]无法为容器选择出站(外部)IP·问题#30053·Moby / Moby:https://github.com/moby/moby/issues/30053#issuecomment-364344488

0 个答案:

没有答案