Мне нужно получить доступ к некоторым хостам, доступным через OpenVPN, из моей частной подсети AWS VPC. Моя настройка VPC аналогична описанной Вот.
Внутри частной сети я создал экземпляр EC2, который настраивает клиент OpenVPN с помощью следующей команды:
openvpn --verb 3 --config config.ovpn --script-security 2 --up up.sh
Содержимое файла сценария up.sh:
#!/bin/bash
/sbin/sysctl -w net.ipv4.ip_forward=1
/sbin/iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT 2>&1
/sbin/iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED \
-j ACCEPT 2>&1
/sbin/iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE 2>&1
Предположим, что 171.20.0.0/16 - это подсеть за VPN. Таблица маршрутов для частной подсети выглядит так:
DESTINATION TARGET
10.0.0.0/16 local
0.0.0.0/0 nat-gateway
171.20.0.0/16 ec2-instance-with-openvpn-client
Я использую группы безопасности по умолчанию.
Моя проблема в том, что я не могу получить доступ к хостам за VPN из образа докера, запущенного в кластере ECS внутри частной подсети. Клиент OpenVPN работает правильно, потому что я могу получить доступ к узлам за VPN прямо из экземпляра EC2. Из того, что я смог наблюдать, я думаю, что трафик от докера никогда не достигает экземпляра EC2, но я не уверен на 100% в этом.
Сеть VPC - это программно определяемая сеть - сеть уровня 3, которая имитирует Ethernet. По умолчанию сеть не позволяет трафику проходить к или от экземпляра EC2, у которого нет точно адреса этого экземпляра в качестве адреса источника или назначения (в зависимости от направления трафика) ... поэтому проверка должна быть отключена для подобных случаев.
Изменение источника или пункта назначения Проверка
Атрибут Source / Destination Check контролирует, включена ли в экземпляре проверка источника / назначения. Отключение этого атрибута позволяет экземпляру обрабатывать сетевой трафик, который не предназначен специально для этого экземпляра. Например, экземпляры, на которых запущены такие службы, как преобразование сетевых адресов, маршрутизация или брандмауэр, должны установить это значение на
disabled
. Значение по умолчанию -enabled
.https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#change_source_dest_check