iptables:无法从本地计算机访问docker容器

时间:2019-12-24 17:42:25

标签: docker webserver iptables

我的iptables设置有问题。我的目标是从服务器计算机本身访问docker容器中基于https的网络服务器。

设置如下: enter image description here

  • 服务器通过eth0连接到Internet,并通过端口443提供http。
  • 任何来自外部(互联网)的用户都通过IP地址1.2.3.4到达服务器。
  • 它通过eth1连接到内部网络,并提供dhcp,dns和其他一些服务。
  • 任何来自内部(内部网)的用户都通过IP地址10.0.0.1。到达服务器。
  • docker容器通过服务器上的docker1连接。后者在docker网络中的IP地址为10.8.0.2。
  • 泊坞窗容器在端口1443上为Web服务器提供服务,但是iptables将端口443上的(NAT)请求转发到其地址10.8.0.1和目标端口1443。

工作原理:

  • 可以从Internet和Intranet完美访问Web服务器。
  • 可以使用地址10.8.0.1:1443从服务器本身访问Web服务器。

什么不起作用:

  • 任何直接在服务器上工作的客户端都无法使用https://example.com:443访问docker Web服务器。使用https://10.8.0.1:8443可以使用,但是由于证书错误而失败。跳过证书检查不是解决方法,这不是目标。

iptable配置摘录:

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -i docker1 -o docker1 -j ACCEPT
iptables -A PREROUTING -t nat -p tcp -d 1.2.3.4 --dport 443 -j DNAT --to-destination 10.1.0.1:1443
iptables -A FORWARD -o docker1 -p tcp --dport 1443 -j ACCEPT
iptables -A INPUT -i docker1 -j DROP
iptables -A FORWARD -i docker1 -j DROP

由于这种“复杂”的设置,我不再能够理解需要使用哪些iptable规则和链条来完成这项工作,所以我正在寻求您的帮助来解决该问题。

使用简化的模型对问题进行头脑风暴,以及我对iptable链的理解,软件包的方式可能是/应该像这样:

  1. 来源是本地应用程序(wget)。
  2. 程序包通过OUTPUT表。
  3. 程序包通过POSTROUTING表。
  4. 魔术发生了...
  5. 这些包再次到达PREROUTING表中。
  6. 这些软件包可能再次通过INPUT。
  7. 这些软件包可能会到达目标应用程序(Web服务器)。

0 个答案:

没有答案