У меня есть VPC, использующий сеть 10.10.0.0/16
, и VPN-сервер в публичной подсети (10.10.0.0/24
). VPN использует адреса в 10.11.254.0/24
ассортимент. Когда я подключаюсь к VPN, я могу получить доступ к узлам как в общедоступной, так и в частной подсети (10.10.1.0/24
), поэтому я считаю, что у меня правильно настроена таблица маршрутизации для отправки пакетов, связанных с VPN, обратно через VPN-сервер. Я отключил проверки источника / назначения на сервере VPN (который также необходим для доступа к другим хостам в сети).
Сервер AmazonProvidedDNS работает правильно внутри VPC; Я могу бегать dig @10.10.0.2 ip-10-10-1-215.ec2.internal
от хоста в VPC, и я получаю ожидаемый ответ.
Однако, если я запустил то же самое dig
Команду с майского ноутбука, подключенного к VPN, я не получаю ответа.
Запустив tcpdump на сервере vpn, я вижу A?
пакеты, приходящие с моего адреса VPN, собираются 10.10.0.2
, но я не вижу ответа. Что мне нужно сделать, чтобы DNS-сервер отвечал на запросы из-за пределов диапазона адресов VPC?
Звучит как необычный способ сделать это, но, учитывая магию разделения внутреннего и внешнего разрешения, которую они реализовали, я понимаю, почему это имеет смысл (теперь, когда я думаю об этом).
Маловероятно, что преобразователи DNS EC2 ответят на запросы с внешнего IP-адреса, но должен быть простой обходной путь.
Например, если ваш IP-адрес на vpn - 192.168.2. *, То на vpn-сервере в VPC ...
$ sudo iptables --table nat -A POSTROUTING -s 192.168.2.0/24 -d 10.10.0.2/32 -j MASQUERADE
Это добавляет правило в таблицу трансляции сетевых адресов, чтобы после принятия решения о маршрутизации пакетов из указанного исходного блока в указанный целевой блок вместо обычной пересылки пакета, как обычно, он отключил ваш IP-адрес и добавил свой собственный. IP как адрес источника, и он запомнит запрос. Когда ответ возвращается, адресованный IP-адресу vpn-сервера, он снова перепишет адрес (на этот раз пункт назначения обратно на ваш адрес) и отправит ответ вам.
Это должно выполнить то, что вы хотите.
Вы можете запустить микро-экземпляр и использовать его в качестве udp-прокси.
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 53 -j DNAT --to 10.10.0.2