通过 VPN 容器路由 Docker 容器流量

Sam*_*ons 5 vpn containers openvpn docker

我在运行 openmediavault(版本 4.1.27-1 Arrakis)的RockPro64(ARMv8 处理器 rev 2(v8|))上安装了几个容器。一切都像魅力一样工作。

我使用的容器包括传输、Jellyfin、Radarr、Sonarr、Jacket... 等等。我希望能够通过 VPN 连接这些容器,以便连接更加私密。

理想的情况是我有一个与我的 VPN 提供商连接的“VPN 容器”(目前这是 PIA,但我想要一个灵活的解决方案)。我的其他容器将通过此容器连接到 Internet,以便它们具有 VPN 连接。

也许值得一提的是,我有两个容器(Jellyfin 和 Nextcloud),我可以通过域名从外部通过 Internet 访问它们。也许通过 VPN 连接它们会有所不同。

我找不到任何明确的指南来为我的设置提供解决方案。我希望有人可以就从哪里开始提供一些想法或分享对我有用的指南。

C.G*_*der 5

我通过https://github.com/qdm12/gluetun(在 amd64 上,但也提供了 arm64 的图像)在 PIA vpn 后面运行radar、sonarr、lidar、bazarr、pyload、deluge、jellyfin、jacket、airsonic 容器。

它有据可查并积极维护。在撰写本文时,它支持 Private Internet Access、Mullvad、Windscribe、Surfshark、Cyber​​ghost、Vyprvpn、NordVPN、PureVPN 和 Privado。

对于gluetun容器,我用它来暴露端口:

version: '3.7'
services:
  gluetun:
    image: qmcgaw/private-internet-access
    container_name: gluetun
    cap_add:
      - NET_ADMIN
    network_mode: bridge
    ports:
      - 8888:8888/tcp # HTTP proxy
      - 8388:8388/tcp # Shadowsocks
      - 8388:8388/udp # Shadowsocks
      - 8000:8000/tcp # Built-in HTTP control server
# other containers ports
      - 8112:8112     # deluge webui
      - 58846:58846   # deluge daemon
      - 6767:6767     # bazarr
      - 8989:8989     # sonarr
      - 7878:7878     # radarr
      - 8686:8686     # lidarr
      - 9117:9117     # jackett
      - 4040:4040     # airsonic
      - 8096:8096     # jellyfin/emby
      - 8227:8227     # pyload
    volumes:
      - ./data_gluetun:/gluetun
      - ./data_gluetun/port_forward:/tmp/gluetun/forwarded_port
    environment:
      - VPNSP=private internet access
      - TZ=Europe/London
      - USER=${PIA_USER}
      - PASSWORD=${PIA_PASS}
      - REGION=${PIA_REGION}
      - PORT_FORWARDING=on
      - FIREWALL_OUTBOUND_SUBNETS=192.168.1.0/24
      - HTTPPROXY=on
      - SHADOWSOCKS=on
      - SHADOWSOCKS_PASSWORD=${SHADOW_PASS}
    restart: unless-stopped
Run Code Online (Sandbox Code Playgroud)

然后在我希望通过上述容器路由的容器中,我评论了任何现有的网络设置并将它们替换为network_mode: "container:gluetun".

对于从本地网络外部访问的自动 letencrypt 证书和反向代理,我使用https://github.com/jc21/nginx-proxy-manager和 arm 兼容的 mariadb yobasystems/alpine-mariadb:latest,在带有 64 位 ubuntu 服务器的RPi4b 上运行。