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

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

在 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

这曾经可以工作,但由于某种原因无法在此服务器上工作。我也试过了firewall-cmd --reload,没什么。就好像完全忽略了firewalld命令一样。该 NetworkManager 消息似乎很可疑,firewalld 和 NetworkManager 是否可能存在某种冲突?

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

这里发生了什么?

答案1

据我所知,除非有一个使用由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

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

答案2

您应该将端口或服务添加到trusted区域并重新加载防火墙配置。

有一个例子:

要在内部区域中暂时允许 443/tcp 端口,请键入:

systemctl start firewalld
systemctl enable firewalld
firewall-cmd --zone=trusted --add-port=443/tcp
firewall-cmd --reload

核实:

firewall-cmd --get-active-zones

允许端口永久存在:

firewall-cmd --permanent --zone=trusted --add-port=443/tcp

另外以下命令应该返回:

firewall-cmd --get-zone-of-interface=docker0
trusted 

相关内容