Мне нужно понять, как заставить два контейнера docker работать с таким сценарием, как этот:
Есть филиал с маршрутизатором и клиентом. Сеть - 192.168.190.0/24, а адреса - 1 и 57.
Где-то еще есть виртуальная машина, подключенная к Интернету с общедоступным IP-адресом X.Y.Z.K и установленной сверху средой docker.Внутри есть два контейнера. Первый - это веб-сервер, работающий только в частной сети с адресом 192.168.80.2. Другой контейнер имеет подключение к частной сети с адресом 192.168.80.44 и предоставляет свой порт 1194 на другом сетевом интерфейсе общедоступному IP-адресу.
Мне нужно иметь возможность заставить 192.168.190.57 открывать страницы на 192.168.80.2.
Часть VPN работает нормально (маршрутизатор подключается и может пинговаться с клиента), и мне не нужна помощь в этом.
По умолчанию, если вы определяете сеть internal: true это означает, что будут введены некоторые правила iptables, блокирующие выход из него всех контейнеров в сегменте локальной сети.
Вначале я думал, что это просто маршрут, скажем, с 192.168.80.2 на 192.168.80.1 (IP-адрес, назначенный хост-машине для этого сегмента локальной сети), а затем в Интернет. Внимательно прочитав все правила iptables, я обнаружил, что переадресация также отключена.
Удаление internal: true позволил контейнеру маршрутизировать через VPN, как и ожидалось, за счет предоставления веб-серверу прямого доступа к общедоступному Интернету.
Нет, я не смог. Ни один протокол вообще (icmp, tcp, udp) не работал так, как он был настроен. Но я все понял. Подробнее о моем собственном ответе ниже.
Если вы внимательно посмотрите на схему на изображении, вы увидите, что контейнер docker для VPN - это сервер, а не клиент. Я не думаю, что этот образ сработал бы для меня.