Files
my-vault/01_Projects/Infrastructure/Services/docker network.md
T
windyboy b182762e14 refactor(vault): Phase 3 — metadata convergence
- Backfill `created` frontmatter on 266 active notes (git date or mtime)
- Normalize `status` to 4 values: draft/active/done/archived (11 notes)
  - Active/进行中/needs-review → active
  - archive → archived
  - 待执行/conditional → draft
  - 完成/accepted → done
- Declare clipper boundary: 04_Archive/Inbox-Clippings/** exempt from migration
- Update depth rule: max 3 → max 4 levels (new notes only)
- Add metadata-converge.mjs script for reproducibility
2026-09-26 11:37:19 +08:00

2.5 KiB
Raw Blame History

created
created
2026-01-05

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 的协作方式

典型做法(推荐):

  1. 保持 Docker 使用 iptables:
    {
      "iptables": true,
      "ip-masq": true
    }
    
  2. 在 firewalld 里:
    • 为 docker0、br-xxxx 等网桥分配到 docker zone:
      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/端口映射。