nginx 如何通过DNS名称在Docker容器之间建立连接?

apeeds0o  于 2023-02-03  发布在  Nginx
关注(0)|答案(1)|浏览(125)

我已成功设置以下容器:

  • 突触:
  • Matrix聊天服务器
  • 不暴露于外部网
  • 英金思
  • 反向代理
  • 允许外部连接连接到synapse的客户端API
  • 阻止外部连接到synapse的admin API
  • 电线保护装置:
  • 虚拟专用网
  • 我连接到VPN以访问Synapse的管理API
  • API可通过http://synapse:8008/访问

问题是,当连接到VPN时,我无法通过其域名连接到反向代理。

  • 从VPN断开连接后,https://example.tld成功连接到反向代理
  • 连接到VPN时,https://example.tld无限期挂起
  • 在主机上运行curl https://example.tld可以正常工作,但在容器中不能正常工作

我希望能够从域名同时访问管理API和我的NGINX反向代理。我并不总是连接到VPN,所以我希望我的Matrix聊天客户端无论是否连接到VPN都能无缝工作。我还有其他独立的服务在反向代理后面运行,我无法连接。
docker-compose.yml:

version: "3.8"

services:
    synapse:
        image: docker.io/matrixdotorg/synapse:latest
        ...

    nginx:
        image: nginx:mainline-alpine
        restart: unless-stopped
        volumes:
            - ./www:/var/www
            - ./nginx:/etc/nginx 
        ports:
            - mode: host
              protocol: tcp
              published: 80
              target: 80
            - mode: host
              protocol: tcp
              published: 443
              target: 443

    wireguard:
        image: docker.io/linuxserver/wireguard
        restart: unless-stopped
        cap_add:
            - NET_ADMIN
            - SYS_MODULE
        environment:
            - PUID=1000
            - PGID=1000
            - TZ=America/Los_Angeles
            - PEERS=1
        volumes:
            - ./config:/config
            - /usr/src:/usr/src
            - /lib/modules:/lib/modules
        ports:
            - "51820:51820"
        sysctls:
            - net.ipv4.conf.all.src_valid_mark=1

我让NGINX容器在主机模式下运行,以便正确记录IP地址

42fyovps

42fyovps1#

通过排除WireGuard客户端中的任何Matrix客户端应用程序,分割隧道VPN可以正常工作,但也有一些缺点:

  • 如果通过浏览器(即,通过https://github.com/Awesome-Technologies/synapse-admin)连接到管理API,则浏览器不能被分割隧道化,并且只能通过浏览器访问的任何服务在该浏览器中不可访问
  • 如果优先保护所有通过VPN的流量(即使用公共WiFi),则Matrix客户端应用程序将不具有此保护,但可能没有问题:
  • MitM通过HTTPS攻击Matrix客户端API的风险可以忽略不计
  • vPN和Matrix服务器共享一个IP,因此隐私问题可以忽略不计

相关问题