Debian 系统解决 Podman 容器无法连接外网

GT610 Lv3

Debian 系统内的 Podman 容器无法连接外网,表现为 IP 通但是域名不通,确定了主机的 DNS 没有问题。但是禁用 UFW 防火墙之后又可以连接外网。启用 UFW 时查看日志发现:

1
2
3
4
5
6
7
8
9
10
2025-08-05T17:39:08.608253+08:00 * kernel: [UFW BLOCK] IN=podman1 OUT= MAC=* SRC=10.89.0.8 DST=10.89.0.1 LEN=70 TOS=0x00 PREC=0x00 TTL=64 ID=57601 DF PROTO=UDP SPT=60822 DPT=53 LEN=50
2025-08-05T17:39:09.100219+08:00 * kernel: [UFW BLOCK] IN=podman1 OUT= MAC=* SRC=10.89.0.8 DST=10.89.0.1 LEN=70 TOS=0x00 PREC=0x00 TTL=64 ID=11523 DF PROTO=UDP SPT=54081 DPT=53 LEN=50
2025-08-05T17:39:09.100267+08:00 * kernel: [UFW BLOCK] IN=podman1 OUT= MAC=* SRC=10.89.0.8 DST=10.89.0.1 LEN=70 TOS=0x00 PREC=0x00 TTL=64 ID=11524 DF PROTO=UDP SPT=54081 DPT=53 LEN=50
2025-08-05T17:39:18.616247+08:00 * kernel: [UFW BLOCK] IN=podman1 OUT= MAC=* SRC=10.89.0.8 DST=10.89.0.1 LEN=81 TOS=0x00 PREC=0x00 TTL=64 ID=26249 DF PROTO=UDP SPT=55651 DPT=53 LEN=61
2025-08-05T17:57:42.040306+08:00 * kernel: [UFW BLOCK] IN=podman1 OUT= MAC=* SRC=10.89.0.8 DST=10.89.0.1 LEN=59 TOS=0x00 PREC=0x00 TTL=64 ID=28103 DF PROTO=UDP SPT=52779 DPT=53 LEN=39
2025-08-05T17:57:42.040373+08:00 * kernel: [UFW BLOCK] IN=podman1 OUT= MAC=* SRC=10.89.0.8 DST=10.89.0.1 LEN=59 TOS=0x00 PREC=0x00 TTL=64 ID=28104 DF PROTO=UDP SPT=52779 DPT=53 LEN=39
2025-08-05T17:57:47.044235+08:00 * kernel: [UFW BLOCK] IN=podman1 OUT= MAC=* SRC=10.89.0.8 DST=10.89.0.1 LEN=59 TOS=0x00 PREC=0x00 TTL=64 ID=28105 DF PROTO=UDP SPT=52779 DPT=53 LEN=39
2025-08-05T17:57:47.044287+08:00 * kernel: [UFW BLOCK] IN=podman1 OUT= MAC=* SRC=10.89.0.8 DST=10.89.0.1 LEN=59 TOS=0x00 PREC=0x00 TTL=64 ID=28106 DF PROTO=UDP SPT=52779 DPT=53 LEN=39
2025-08-05T17:57:52.048224+08:00 * kernel: [UFW BLOCK] IN=podman1 OUT= MAC=* SRC=10.89.0.8 DST=10.89.0.1 LEN=70 TOS=0x00 PREC=0x00 TTL=64 ID=10188 DF PROTO=UDP SPT=42156 DPT=53 LEN=50
2025-08-05T17:57:52.048263+08:00 * kernel: [UFW BLOCK] IN=podman1 OUT= MAC=* SRC=10.89.0.8 DST=10.89.0.1 LEN=70 TOS=0x00 PREC=0x00 TTL=64 ID=10189 DF PROTO=UDP SPT=42156 DPT=53 LEN=50

确定了是 UFW 阻止了容器的通信。

通过 podman info 查询,确定 Podman 使用的网络后端为 netavark

从日志可以看出:

1
SRC=10.89.0.8 DST=10.89.0.1 LEN=70 ... PROTO=UDP SPT=60822 DPT=53
  • SRC=10.89.0.8:容器的 IP 地址
  • DST=10.89.0.1:Podman 的内置 DNS 服务(由 netavark 提供,监听在网关地址上)
  • DPT=53:目标端口是 DNS
  • IN=podman1:数据包从 podman1 接口进入

这说明:容器尝试访问 10.89.0.1:53 做 DNS 解析,但被 UFW 拦截了。

🔍 问题本质

UFW 默认策略是 限制 FORWARD 链和 INPUT 链对非本机接口的访问。虽然 podman1 是一个虚拟网桥,UFW 会将其视为“外部”接口并默认阻止其流量。

UFW 的 DEFAULT_INPUT_POLICY 通常为 DROPREJECT,而容器访问 10.89.0.1:53 实际上是发往主机上的服务(即 netavark 内建 DNS),所以该请求需要经过主机的 INPUT 链,因此被拦截。

✅ 解决方案

方法一:允许 podman1 接口的 DNS 流量

1
2
sudo ufw allow in on podman1 proto udp to 10.89.0.1 port 53
sudo ufw allow in on podman1 proto tcp to 10.89.0.1 port 53

这条规则明确允许从 podman1 接口进入、目标为 10.89.0.1:53 的 UDP 和 TCP 流量(DNS)。

方法二:更宽松 —— 允许整个 podman1 子网的通信(适用于多个容器)

如果你有多个 Podman 网络或动态 IP 分配,可以允许整个子网:

1
2
sudo ufw allow from 10.89.0.0/16 to any port 53 proto udp
sudo ufw allow from 10.89.0.0/16 to any port 53 proto tcp

这样,如果存在使用 53 端口的容器,容器之间也可以互相通信。但是一般不会出现这样的情形,我还是建议使用方法一

重启 UFW

1
sudo ufw disable && sudo ufw enable

🔧 验证方法

  1. 在容器中测试 DNS:
1
2
podman exec -it <container> ping www.baidu.com
podman exec -it <container> nslookup www.baidu.com
  1. 查看 UFW 日志是否还有 podman1 被 block:
1
sudo tail -f /var/log/ufw.log | grep podman1

🛡️ 安全建议

  • 不要完全禁用 UFW 来解决此问题。
  • 不要使用 ufw default allow,会降低安全性。
  • 使用 最小权限原则:只放行必要的端口(如 53 DNS)。
  • 如果你使用多个 Podman 网络(如 podman2, podman3),需对每个接口重复规则或使用子网范围。

❓ 常见疑问

非 Root 下的 Podman 就没有这个问题……?

Root 模式下的 Podman 使用 CNI(4.x 及之前版本) 或者 netavark(从 Podman 5 开始),它创建 podman0 这样的网桥。而非 Root 模式下的 slirp4netns 基于用户态网络,一般不走防火墙,所以可能不会遇到这样的问题。

Fedora 和 RHEL 系(CentOS / Rocky Linux / AlmaLinux 等)也没有这样的问题……?

Podman 在创建容器的时候,会自动调整 nftables 规则,以确保容器能够正常访问外网。

Fedora 和 RHEL 系(CentOS / Rocky Linux / AlmaLinux 等)一般使用 firewalld 而不是 ufwfirewalld 是基于 nftables 的防火墙,所以不会出现此类问题。而 UFW 是基于 iptables 的防火墙。

同样地,如果在 Fedora 和 RHEL 系(CentOS / Rocky Linux / AlmaLinux 等)上使用 Docker,如果不做调整,容器也会无法访问外网。这是因为 Docker 使用 iptables 而不是 nftables

  • 标题: Debian 系统解决 Podman 容器无法连接外网
  • 作者: GT610
  • 创建于 : 2025-08-07 11:11:33
  • 更新于 : 2025-09-23 15:09:18
  • 链接: https://gt-610.dpdns.org/2025/08/07/solve-podman-ufw-dns-issue/
  • 版权声明: 本文章采用 CC BY 4.0 进行许可。
评论