Есть ли хорошее руководство или пример для настройки сложной (общедоступной/частной) сети с докером?
Итак, забегая вперед, предположим:
- У меня есть рабочая установка обратного прокси, работающая в докере. (jwilder/nginx-прокси)
- У меня есть служба Pihole, работающая в докере. (Планируйте принудительно использовать его внутри VPN)
- У меня есть VPN-сервер, работающий в докере. (килеманна/openvpn)
- У меня несколько серверов.
Для каждого стека службы, работающего в докере, запущенном с помощью docker compose, я указываю 2 сети, интерфейс и серверную часть.
сети:
внешний интерфейс:
внешний:
имя: реверс_прокси
серверная часть:
внешний:
имя: впн
Внешний интерфейс указывает, что к нему можно получить доступ через обратный прокси-сервер.
Серверная часть указывает, что к ней можно получить доступ через VPN.
Когда я создаю службы в докере, независимо от того, на каком сервере они находятся, я хочу иметь доступ к серверным службам только через ту же VPN.
Так, например, если я запускаю:
Сервисы:
дБ:
изображение: MySQL: 5.7
имя_контейнера: db.service1.example.com
сервис1:
зависит от:
- дб
изображение: вордпресс
имя_контейнера: service1.example.com
среда:
- ВИРТУАЛЬНЫЙ_ХОСТ=service1.example.com
- LETSENCRYPT_HOST=service1.example.com
- ВИРТУАЛЬНЫЙ_ПОРТ=80
сети:
- бэкэнд
- внешний интерфейс
административная служба:
изображение: phpmyadmin/phpmyadmin
имя_контейнера: admin.service1.example.com
среда:
- ВИРТУАЛЬНЫЙ_ХОСТ=admin.service1.example.com
- LETSENCRYPT_HOST=admin.service1.example.com
- ВИРТУАЛЬНЫЙ_ПОРТ=80
сети:
- бэкэнд
сети:
внешний интерфейс:
внешний:
имя: реверс_прокси
серверная часть:
внешний:
имя: впн
(Обратите внимание, что приведенный выше код не содержит информации о правильной настройке экземпляра mysql и не будет работать. Это всего лишь пример)
Чтобы сделать то, что я хочу, я предполагаю, что мне нужен контейнер VPN-клиента, подключенный к контейнеру VPN-сервера (если он находится на том же сервере, что и контейнер VPN-сервера) и второй обратный прокси-сервер для управления маршрутизацией?
Я не совсем уверен. Я также не уверен, что вместо соединений клиент-сервер в VPN мне нужны соединения сервера-сервера, которые я даже не уверен, что это правильно/возможно
Конечная цель - иметь http://service1.example.com виден в открытом интернете.
и имеют http://admin.service1.example.com 404, если вы не подключены к VPN.
Я на правильном пути?
Из того, что я видел о доступе к службам в докере через VPN, я могу маршрутизировать весь сервис и все порты только через VPN. Или же иметь порты, указанные в самом VPN Который направляет трафик контейнера через VPN, но доступ к нему не ограничивается VPN.