无法使用 firewalld 将 docker0 接口添加到受信任区域

cen*_*cen 4 networkmanager docker firewalld

在 Centos 7 上,我希望 Docker 容器能够访问主机,因此我尝试将 docker0 添加到受信任区域:

# firewall-cmd --permanent --zone=trusted --add-interface=docker0
The interface is under control of NetworkManager and already bound to 'trusted'
The interface is under control of NetworkManager, setting zone to 'trusted'.
success
# firewall-cmd --get-zone-of-interface=docker0
no zone
Run Code Online (Sandbox Code Playgroud)

这曾经可以工作,但无论出于何种原因都不能在此服务器上使用。我也试过firewall-cmd --reload,没有。好像 firewalld 命令被完全忽略了。NetworkManager 消息似乎很可疑,firewalld 和 NetworkManager 是否可能存在某种冲突?

出于绝望,我也尝试过: 在接口配置中nmcli connection modify docker0 connection.zone trusted正确设置了ZONE=trusted,但 firewalld 仍然显示接口不在受信任区域中。

这里发生了什么?

小智 5

据我所知,除非有一个使用由 firewalld(即 eth0)直接识别的受信任区域的接口,否则受信任区域不会被标记为活动的。为了解决这个问题,您可以使用以下内容显式设置 iptables 规则:

firewall-cmd --permanent --zone=trusted --add-interface=docker0
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 3 -i docker0 -j ACCEPT
firewall-cmd --reload
systemctl restart docker
Run Code Online (Sandbox Code Playgroud)

此处的“3”是将规则插入到 INPUT 链中的位置,您的里程可能会有所不同。运行这些命令后,我能够从容器访问主机端口。