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

iptables:无法从本地计算机访问docker容器,docker,webserver,iptables,Docker,Webserver,Iptables,我的iptables设置有问题。我的目标是从服务器本身到达docker容器中基于https的Web服务器 设置如下所示: 服务器通过eth0连接到internet,并通过端口443提供http服务 来自外部(internet)的任何用户都可以通过ip地址1.2.3.4访问服务器 它通过eth1连接到内部网络,并提供dhcp、dns和其他一些服务 来自内部(intranet)的任何用户都可以通过ip地址10.0.0.1访问服务器 docker容器通过服务器上的docker1连接。后者在dock

我的iptables设置有问题。我的目标是从服务器本身到达docker容器中基于https的Web服务器

设置如下所示:

  • 服务器通过eth0连接到internet,并通过端口443提供http服务
  • 来自外部(internet)的任何用户都可以通过ip地址1.2.3.4访问服务器
  • 它通过eth1连接到内部网络,并提供dhcp、dns和其他一些服务
  • 来自内部(intranet)的任何用户都可以通过ip地址10.0.0.1访问服务器
  • docker容器通过服务器上的docker1连接。后者在docker网络中具有ip地址10.8.0.2
  • docker容器为端口1443上的Web服务器提供服务,但iptables将端口443上的(NAT)请求转发到其地址10.8.0.1和目标端口1443
工作原理:

  • 从internet和intranet完全可以访问Web服务器
  • 可以使用地址10.8.0.1:1443从服务器本身访问Web服务器
什么不起作用:

  • 任何直接在服务器上工作的客户端都无法使用访问docker Web服务器。使用将起作用,但由于证书错误而失败。作为一种解决方法,跳过证书检查并不是目标
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链的理解就问题进行头脑风暴软件包的方式可能/应该如下所示:

  • Origin是一个本地应用程序(wget)
  • 这些包遍历输出表
  • 这些包通过后路由表
  • 奇迹发生了
  • 包裹再次到达预路由表中
  • 这些包可能会再次通过输入
  • 包可能会到达目标应用程序(Web服务器)