Consolidated 16+ top-level categories into 8 clear functional groups (AI, Development, Home-Automation, Infrastructure, Lifestyle, PKM, Professional, Backup). Merged duplicate files (OpenRouter.md, Github.md) and archived originals. This simplifies navigation and improves long-term maintainability. (vault changes by Claude Code)
2.5 KiB
2.5 KiB
Docker + firewalld + iptables 关系总结
1. 三者分工
- iptables:内核防火墙引擎,真正执行包过滤和 NAT。
- firewalld:iptables 的“策略管理层”,按 zone / service / masquerade 等抽象生成规则。
- Docker(iptables=true):在 iptables 中写入 容器相关 的规则:
- 容器出网 SNAT(MASQUERADE)
- 宿主端口 → 容器端口的 DNAT
- 容器网络之间的隔离(DOCKER-ISOLATION)
三者是“共用 iptables,各管一摊”,不是互相替代。
2. Docker 关键配置项
/etc/docker/daemon.json:
{
"iptables": true,
"ip-masq": true
}
-
"iptables": true(默认)- Docker 创建/维护 DOCKER 链、端口映射、容器出网 NAT 等规则。
- 必须开启,否则大多数容器网络功能会坏(包括端口映射、bridge 容器出网)。
-
"iptables": false- Docker 不再改 iptables,不再创建 DOCKER/NAT 规则。
- 需要你手工写所有 NAT / 端口映射规则。
- 常见现象:宿主机 &
--network host容器有网,但所有 bridge 容器出不了网。
-
"ip-masq": true- 为 Docker 私网(如 172.17.0.0/16)自动加 MASQUERADE,容器可用宿主 IP 出网。
3. firewalld 与 Docker 的协作方式
典型做法(推荐):
- 保持 Docker 使用 iptables:
{ "iptables": true, "ip-masq": true } - 在 firewalld 里:
- 为
docker0、br-xxxx等网桥分配到dockerzone:firewall-cmd --zone=docker --add-interface=docker0 --permanent firewall-cmd --zone=docker --add-interface=br-xxxx --permanent - 打开 masquerade 与 forward:
firewall-cmd --zone=docker --add-masquerade --permanent firewall-cmd --zone=docker --add-forward --permanent firewall-cmd --reload
- 为
原则:
- Docker 负责:容器内部路由 + NAT + 端口映射的具体规则;
- firewalld 负责:哪些接口/zone 允许转发、伪装、对外开放哪些端口。
4. 典型坑点(本次踩到的)
-
设置:
{ "iptables": false } -
结果:
- 宿主机有网;
--network host容器有网;- 所有 bridge 网络容器无外网、访问 LE 超时。
-
根因:
- Docker 停止管理 iptables,不再生成容器 NAT 规则;
- firewalld 只负责 zone 和 masquerade,但不知道容器网络细节,无法替 Docker 完成 SNAT/端口映射。