Основной вопрос заключается в том, как подключиться к vpn-серверу через vpn-клиент, который является экземпляром NAT, позвольте мне описать это.
Сцены 1:
У меня есть группа экземпляров службы (ubuntu 18.04) с именем A
Один экземпляр, который я использую для экземпляра NAT с именем B
и группа A, и экземпляр B находятся в одном и том же vpc, A не имеет общедоступного IP-адреса, B имеет один открытый IP-адрес, и я использовал B в качестве NAT и установил SNAT в vpc, чтобы группа A могла получить доступ к Интернету через B.
как это:
И для группы А (10.0.0.0/16). Я рисую только два экземпляра в группе А, но их много.
поэтому в моей службе B я добавляю правило iptables: iptables -A POSTROUTING -t nat -s 10.0.0.0/16 -j MASQUERADE
это сработало будет.
# показать ip маршрут
по умолчанию через 10.0.1.253 dev eth0 proto dhcp src 10.0.1.157 метрика 100
10.0.1.0/24 dev eth0 ссылка на область действия ядра proto src 10.0.1.157
10.0.1.253 dev eth0 proto dhcp scope link src 10.0.1.157 метрика 100
Сцены 2:
Как и в приведенных выше сценах, но теперь я не могу использовать общедоступный IP-адрес B (X) для доступа в Интернет, замененный подключением vpn (openvpn).
который:
обратите внимание, что служба C является экземпляром службы vpn, который я не контролирую.
и у меня есть файл конфигурации клиента, который может подключаться от B к C, и абсолютно соединение создано. теперь B может выходить в интернет через C, и теперь в моем сервисе B у меня есть
# показать ip маршрут
0.0.0.0/1 через 10.8.0.1 dev tun0
по умолчанию через 10.0.1.253 dev eth0 proto dhcp src 10.0.1.157 метрика 100
10.0.1.0/24 dev eth0 ссылка на область действия ядра proto src 10.0.1.157
10.0.1.253 dev eth0 proto dhcp scope link src 10.0.1.157 метрика 100
10.0.2.0/24 через 10.0.1.157 dev eth0
10.0.3.0/24 через 10.0.1.157 dev eth0
10.8.0.0/24 dev tun0 ссылка на область действия ядра proto src 10.8.0.2
{публичный IP-адрес C здесь} via 10.0.1.253 dev eth0
128.0.0.0/1 через 10.8.0.1 dev tun0
Хорошо, я надеюсь, что мое описание понятно;
Итак, в этом случае я думаю, что мне нужно делать все, что касается обслуживания B.
например B, я перенаправляю весь трафик с eth0 на tun0, поэтому трафик с eth0 будет пересылаться на tun0, а группа A должна иметь доступ в Интернет через B:
iptables -A ВПЕРЕД -i eth0 -o tun0 -j ПРИНЯТЬ
iptables -A FORWARD -i tun0 -o eth0 -m состояние --state УСТАНОВЛЕНО, СВЯЗАННО -j ПРИНЯТЬ
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
Но это не работает, как я ожидал.
затем я отлаживаю его, грубо анализируя трафик в B. я получил информацию о том, что B может получить трафик от A. но без ответа.