@kolayuk

Как опубликовать Docker-контейнеры через Reverse VPN?

Добрый день!
Ситуация: есть домашний NAS за NAT и VPS сервер. Оба сервера на Linux, там развернуты всякие интересные штуки в docker-контейнерах через docker-compose.

И вот понадобилось сделать некоторые контейнеры на домашнем NAS доступными из интернета чтобы интеграцию с внешними сервисами настроить по вебхукам. Но возникли сложности с настройкой сети из Docker-контейнеров.

На VPS развернут OpenVPN, и nginx каждый в своем контейнере, но в одном docker-compose файле. Друг друга отлично видят внутри сетки поднятой docker-compose-ом.
На NAS развернут OpenVPN клиент и полезные сервисы тоже в отдельных контейнерах в одном docker-compose, друг друга видят.

Но сервера друг друга не видят, хотя VPN канал вроде как установлен (когда делаю proxy_pass в nginx на имя хоста контейнера с NAS получаю ошибку nginx мол нет такого хоста (host not found in upstream "myusefulhost" in /etc/nginx/sites-enabled/default-ssl.conf:39)).

Что я делаю не так?

Конфиги:
VPS docker-compose:
webnginx:
    image: richarvey/nginx-php-fpm:latest
    restart: always
    hostname: webnginx
    container_name: webnginx
    environment:
      WEBROOT: /var/www/html/src
      DOMAIN: mydomain
    volumes:
      - ./nginx-site-ssl.conf:/etc/nginx/sites-enabled/default-ssl.conf
      - ./certs/:/etc/letsencrypt/live/
      - ./clientcert/ca.crt:/etc/nginx/clientca/ca.crt:ro
    links:
      - openvpn
openvpn:
    image: kylemanna/openvpn
    cap_add:
      - NET_ADMIN
    restart: always
    hostname: openvpn
    container_name: openvpn
    volumes:
      - ./vpn:/etc/openvpn
    ports:
       - "XXXX:1194/udp"

nginx на VPS:
location / {
                if ($ssl_client_verify != SUCCESS){
                    return 403;
                }
                proxy_pass http://myusefulhost:8123; # имя хоста контейнера из NAS
        }


на NAS:
myusefulhost:
#    network_mode: "container:openvpn"
    container_name: myusefulhost
    hostname: myusefulhost
    image: ...
    ports:
      - 80:8123/tcp # для доступа из локальной сети используется
    volumes:
      - /opt/homeassistant/hass-config:/config
      - /etc/localtime:/etc/localtime:ro
    environment:
      - TZ=Europe/Moscow
#    depends_on:
#      - openvpn
  openvpn:
    build: ./vpn
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/net/tun 
    restart: always
    hostname: openvpn
    container_name: openvpn
    volumes:
      - ...
# вот эта штука линкуется с первым хостом но ее можно не публиковать
  second-useful-host:
    links:
      - myusefulhost
#    network_mode: "container:openvpn"
    container_name: second-useful-host
    hostname: second-useful-host
    image: acockburn/appdaemon:latest
    environment:
        ...
    volumes:
      ....
    depends_on:
      - myusefulhost


Как я понимаю VPN устанавливается только между openvpn контейнерами, как бы его расшарить на всю docker-compose сетку?

Ставить openvpn клиента на всю систему я не хочу тк мне нужны только опреленные контейнеры, а тот же transmission гонять через VPN смысла нет
  • Вопрос задан
  • 223 просмотра
Пригласить эксперта
Ответы на вопрос 1
@LeoCata
Может быть стоит посмотреть в сторону ssh-туннелей? Достаточно пробросить порты на внешний сервер.

Как пример: localhost.run
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы