Docker 将 IPtables FORWARD 策略更改为 DROP

Kee*_*ing 9 iptables amazon-web-services amazon-linux

我在 Amazon Linux 2 EC2 实例上有 OpenVPN,需要通过它转发数据包。它一直有效,直到我开始docker实例为止。然后 FORWARD 策略变为 DROP,VPN 停止工作。

[root@ip-... ~]# iptables -L FORWARD
Chain FORWARD (policy ACCEPT)                             <<< See it's ACCEPT
target     prot opt source               destination         
Run Code Online (Sandbox Code Playgroud)

然后我启动 docker 并再次检查:

[root@ip-... ~]# systemctl start docker

[root@ip-... ~]# iptables -L
Chain FORWARD (policy DROP)                               <<<< Turned to DROP
target     prot opt source               destination         
DOCKER-USER  all  --  anywhere             anywhere            
DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
Run Code Online (Sandbox Code Playgroud)

我尝试设置该策略,/etc/sysconfig/iptables但这没有帮助。

这似乎是 Amazon Linux 2 特有的,我在 Ubuntu 上似乎没有这个问题。

有任何想法吗?

MLu*_*MLu 11

这是一种已知的行为,记录如下:路由器上的 Docker

解决方案是在链中添加一条ACCEPT规则DOCKER-USER

~ # iptables -I DOCKER-USER -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

要使此更改永久生效,您可以将其放入/etc/sysconfig/iptables

*filter
:DOCKER-USER - [0:0]
-A DOCKER-USER -j ACCEPT
COMMIT
Run Code Online (Sandbox Code Playgroud)

这将预先创建ACCEPT规则,当 docker 启动并更改数据包转发FORWARD策略时DENY,数据包转发仍然有效。

希望有帮助:)

  • 我在这里发表评论是为了补充一点,在安装 Docker 后,我失去了与桥接虚拟机的连接。另外,Debian Buster 上没有 /etc/sysconfig/iptables。名为 *iptables-persistent* 的包可能会解决这个问题,但我通过将 `iptables -P FORWARD ACCEPT` 添加到 /etc/rc.local 来解决这个问题。 (3认同)