Мне нужно понять, как заставить два контейнера докеров работать по такому сценарию:
Есть филиал с роутером и клиентом. Сеть - 192.168.190.0/24, а адреса - 1 и 57.
Где-то еще есть виртуальная машина, выходящая в Интернет с общедоступным IP-адресом X.Y.Z.K и установленной сверху средой докеров. Внутри два контейнера. Первый - это веб-сервер, подключенный только к частной сети с адресом 192.168.80.2. Другой контейнер имеет подключение к частной сети с адресом 192.168.80.44 и предоставляет свой порт 1194 на другом сетевом интерфейсе общедоступному IP-адресу.
Мне нужно, чтобы 192.168.190.57 открывал страницы на 192.168.80.2.
Часть VPN работает нормально (маршрутизатор подключается и получает ping-запрос от клиента), и мне в этом не нужна помощь.
Это макет моего файла для создания докеров.
version: '2'
services:
openvpn:
image: mycompany/openvpn
restart: 'always'
cap_add:
- NET_ADMIN
ports:
- '1194:1194/udp'
networks:
nat:
private_net:
ipv4_address: '192.168.80.44'
coredns:
image: 'nginx'
restart: 'always'
links:
- openvpn:private_net_vpn
networks:
private_net:
ipv4_address: '192.168.80.2'
networks:
private_net:
internal: true
ipam:
config:
- subnet: '192.168.80.0/24'
nat:
В конце концов я обнаружил проблему.
По умолчанию, если вы определяете сеть internal: true
это означает, что будут введены некоторые правила iptables, чтобы заблокировать выход всех контейнеров в сегменте локальной сети.
Вначале я думал, что это просто путь, скажем, от 192.168.80.2 к 192.168.80.1 (IP-адрес, назначенный хост-машине для этого сегмента локальной сети), а затем в Интернет. Внимательно прочитав все правила iptables, я обнаружил, что пересылка также отключена.
Удаление internal: true
позволил контейнеру проходить через VPN, как и ожидалось, за счет предоставления веб-серверу прямого доступа к общедоступному Интернету.