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

时间:2019-12-15 01:32:13

标签: docker containers vpn openvpn

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

我使用的容器包括Transmission,Jellyfin,Radarr,Sonarr,Jackett ...等。我希望能够通过VPN连接这些容器,从而使连接更加私密。

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

也许值得一提的是,我有两个容器(Jellyfin和Nextcloud),我可以通过域名从互联网上从外部访问这些容器。通过VPN进行连接可能会有所不同。

我找不到任何清晰的指南来为我的设置提供解决方案。我希望有人可以提出一些建议,从何处着手或分享对我有用的指南。

2 个答案:

答案 0 :(得分:1)

这看起来像您需要容器来保护传出的连接:https://jordanelver.co.uk/blog/2019/06/03/routing-docker-traffic-through-a-vpn-connection/。您要使用--net container:name-of-vpn-container来启动容器。

我想像一下,如果希望传入容器通过VPN,则需要确保VPN提供程序为您提供静态IP /主机名并转发端口。我怀疑您不想走这条路,因为这很复杂。最好的选择是继续通过域名访问它们,只需确保它位于https *之上,并确保您正在使用的设备(您的电话/平板电脑/笔记本电脑等)在VPN上即可。

*在linuxserver.io的出色工作中,没有什么比这更多的了:https://blog.linuxserver.io/2020/08/21/introducing-swag/

答案 1 :(得分:1)

我通过https://github.com/qdm12/gluetun在PIA vpn后面运行了雷达,声纳,激光雷达,巴扎尔,pyload,洪水,果冻,护套,空速容器(在amd64上,但也提供了arm64的图像)。

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

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

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

,然后在我希望通过上述容器进行路由的容器中,我注释了任何现有的网络设置,并用network_mode: "container:gluetun"替换了它们。

要让自动化的letencrypt证书和反向代理从本地局域网访问,我将https://github.com/jc21/nginx-proxy-manager与在64位ubuntu服务器的RPi4b上运行的与手臂兼容的mariadb yobasystems/alpine-mariadb:latest结合使用。