Добрый день!
Ситуация: есть домашний 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 смысла нет