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

在容器里运行 VPN,如何接管其他容器的流量作为默认出口?

  •  
  •   cnt2ex · 37 天前 · 1450 次点击
    这是一个创建于 37 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大概的背景是这样的。

    我有 3 个服务,分别是通过 3 个 compose.yml 管理的。 一个服务是 caddy ,作为反向代理,同时反代另外两个服务(叫它们 A 和 B 好了)。 caddy 容器通过 external network 和 A 、B 相连,并且通过容器名访问 A 和 B 。

    但是服务 A 和 B 都需要访问一些被污染了的网站(比如 raw.githubusercontent.com),虽然试过设置 HTTP_PROXY/HTTPS_PROXY 等环境变量让它们走代理,但是依然有部分流量直连,因此打算再跑一个 VPN 容器来接管这两个服务的流量。

    假设我跑起来了一个 VPN 容器,该怎么接管 A 和 B 的流量呢?

    5 条回复    2025-07-26 09:40:52 +08:00
    66450146
        1
    66450146  
       37 天前
    network_mode: container:<your_container_name>
    cnt2ex
        2
    cnt2ex  
    OP
       37 天前
    @66450146
    考虑过这个方法了,但遇到了一些问题。

    是我把背景过于简化了,没有讲清楚。因为我想着把大致背景交代一下,就能遇到解决过类似问题的人。
    毕竟 V2EX 上应该有不少人都在 NAS 上通过 docker 自建自己的各种服务,应该遇到过相似的问题。

    实际上,B 是包含多个容器的服务(独立的一个 compose.yml 管理的)。一个 php-fpm 容器,一个 db 容器。如主题所说,caddy 通过容器名访问并反代 php-fpm 。而 php-fpm 实际上也通过容器名访问 db 容器。如果把 php-fpm 的 network_mode 设置成 vpn 的话,就会导致 php-fpm 的 DNS 服务器也变成 VPN 的 DNS ,导致 php-fpm 通过容器名访问 db 失效了。
    piku
        3
    piku  
       37 天前 via Android
    @cnt2ex 都 compose 了,多网络不好吗
    xinge666
        4
    xinge666  
       37 天前 via iPhone
    我的解决方案是装一个 iStoreOS 或者 OpenWRT ,然后其他的虚拟机直接由它来获取 IP 以及科学上网
    ihciah
        5
    ihciah  
       37 天前 via iPhone
    网络互通要么扔同一个网络里,要么 veth 怼起来; dns 是更上层的另一回事。感觉扔同一个网络最简单,dns 的话只需要自己容器里起一个独立的 dnsmasq 转到 coredns 或者 8888 。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5939 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 06:17 · PVG 14:17 · LAX 23:17 · JFK 02:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.