V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
essethon
V2EX  ›  Docker

在一个 Docker 容器中,通过主机的 Hostname 访问 另一个容器 中架设的网站,会被 ufw 拦截

  •  
  •   essethon · 2021-04-23 16:44:02 +08:00 · 1249 次点击
    这是一个创建于 1308 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    众所周知,一般 ufw 防火墙是不会对 Docker 容器映射的端口起作用的,因为 ufw 的原理是向 iptables 里添加规则,而 Docker 映射端口时也会向 iptables 添加规则,而且 Docker 添加的那两个 Chains (DOCKER-USER 和 DOCKER) 优先级要比 ufw 的那些 chains 高。( ref: https://docs.docker.com/network/iptables/

    所以,在我的 VPS 上,我一直是用 Docker 运行一个 Traefik 容器,然后这个容器开启端口映射 0.0.0.0:443:443,对公网开放了 443 端口,作为我的网站入口。假设我的域名是 domain.tld.,该域名有一条 A 记录指向我 VPS 的 IP 地址。

    而由于 DOCKER 在防火墙上打洞比 ufw 优先级高,ufw 不需要 allow https(443) ,访客就能通过 https://domain.tld 访问我的网站,这没问题,works as expected.

    问题

    但是今天意外发现,如果我在运行 Traefik 容器(网站)的同一台 VPS 再跑一个容器 test,在 test 容器内运行 curl https://domain.tld,这个访问居然会被 VPS 上的 ufw 防火墙拦截。

    因为我只要在 VPS 上运行 ufw allow https,上述访问就能成功; ufw delete allow https 删掉规则,上述访问就会卡住。已经反复多次试验,在该 VPS 上可稳定复现。

    补充信息

    更加令人百思不得其解的是,我的另一台 VPS,同样的配置:

    • 同样的 Debian 10.9 系统
    • 同样的 Docker 20.10.6
    • 同样的 docker-compose
    • 同样的 traefik 配置文件(包括 docker-compose.yml 、traefik.toml 等,我用 diff 比较过,除了域名不一样其他配置一模一样)

    这台 VPS 就完全和我想象的一样,在 ufw allow https 的情况下,另开一个容器,容器内也能正常 curl https://xxx 访问到另一个 traefik 容器。

    请问 V 友们知道还有什么可以排查问题的思路么? 为什么我访问一个本机 Docker 开放了端口的容器,会被本机的 ufw 拦截呢

    4 条回复    2021-05-08 01:58:12 +08:00
    Showfom
        1
    Showfom  
       2021-04-23 19:23:46 +08:00
    我也被 docker 的 bridge 网络困惑了很久,最后索性直接 host 模式一劳永逸哈哈哈
    oott123
        2
    oott123  
       2021-04-23 20:04:32 +08:00
    两边打 iptables-save 对比
    leschans
        3
    leschans  
       2021-04-24 07:21:29 +08:00 via iPhone
    allow localhost 不知道管不管用
    ypcs03
        4
    ypcs03  
       2021-05-08 01:58:12 +08:00 via iPhone
    会不会是 dns 解析的时候出问题?看看 dns 缓存
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5061 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 03:46 · PVG 11:46 · LAX 19:46 · JFK 22:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.