Вопрос или проблема
Кажется, я не могу заставить Route53 корректно перенаправлять DNS-запросы на nat64.net при использовании IPv6. Хостом в этом случае является Ubuntu 22 (хотя я думаю, что это касается AWS).
Вот фон:
- Я создал Route53 Outbound Resolver с интерфейсами в подсети только для IPv6. Тип конечной точки Resolver – IPV6.
- Группа безопасности, связанная с интерфейсами, позволяет весь исходящий трафик и весь входящий трафик изнутри VPC.
- Я создал правило Resolver для перенаправления запросов на
ghcr.io
на три IPv6-адреса, найденные на nat64.net. - Правило Resolver связано с VPC.
- Я могу успешно выполнить запрос к одному из IPv6-адресов на nat64.net из экземпляра EC2 только для IPv6 в той же подсети, что и конечные точки Outbound Resolver. Другими словами, это работает:
$ nslookup ghcr.io 2a01:4f9:c010:3f02::1
Сервер: 2a01:4f9:c010:3f02::1
Адрес: 2a01:4f9:c010:3f02::1#53
Неавторитетный ответ:
Имя: ghcr.io
Адрес: 140.82.121.34
Имя: ghcr.io
Адрес: 2a01:4f9:c010:3f02:64:0:8c52:7922
Имя: ghcr.io
Адрес: 2a01:4f8:c2c:123f:64:5:8c52:7922
Имя: ghcr.io
Адрес: 2a00:1098:2b::1:8c52:7922
- Это тоже работает (показывая, что DNS в целом работает нормально внутри VPC и что подсеть имеет доступ в Интернет через IGW):
$ nslookup google.com
Сервер: 127.0.0.53
Адрес: 127.0.0.53#53
Неавторитетный ответ:
Имя: google.com
Адрес: 142.251.211.238
Имя: google.com
Адрес: 2607:f8b0:400a:807::200e
- Это не работает. Я думаю, это показывает, что правило разрешения работает, но что Outbound Resolver не связывается с адресами nat64.net.
$ nslookup ghcr.io
;; ошибка связи с 127.0.0.53#53: время ожидания
;; ошибка связи с 127.0.0.53#53: время ожидания
;; ошибка связи с 127.0.0.53#53: время ожидания
;; невозможно достичь серверов
- Журналы потоков VPC не показывают никаких отклоненных соединений.
- Анализатор доступности не работает с IPv6 (ссылка)
Я еще не нашел документации, утверждающей, что Резолверы не могут использовать Интернет. Мне было бы интересно услышать мысли сообщества по этому поводу!
Обновление 1
Я установил BIND9 на экземпляре EC2 внутри подсети только для IPv6 и создал правило Route53 для перенаправления запросов на ghcr.io
на него, и это работает нормально—выходной резолвер, похоже, успешно разрешает, когда используется BIND9 в качестве прокси. Я еще не выяснил, почему конечные точки IPv6 выходного резолвера не могут напрямую подключиться к адресам IPv6 за пределами VPC, когда экземпляр EC2 в той же подсети может это сделать.
Как я понимаю этот документ AWS, трафик из выходных конечных точек не может проходить через Интернет-шлюз. Поэтому у меня есть трафик IPv4, проходящий через NAT-шлюз – но вы не можете сделать это для IPv6 – и это, похоже, не работает через шлюз только для исходящего интернет-трафика.
Поэтому я думаю, что вы наткнулись на единственное текущее решение для IPv6 – (то есть настройка «локального» резолвера в VPC).
Ответ или решение
Решение проблемы с пересылкой запросов по IPv6 в Route 53 Outbound Resolver
Проблема с пересылкой DNS-запросов через Route 53 Outbound Resolver в IPv6-среде, о которой вы упоминаете, может вызывать затруднения у многих специалистов в области IT. Рассмотрим вашу ситуацию более детально, проанализируем возможные причины и предложим несколько решений.
Ситуация
Вы настроили Route 53 Outbound Resolver с IPv6-адресами, используя интерфейсы в подсети только IPv6. Несмотря на то, что ваш EC2 экземпляр внутри этой же подсети может связываться с nat64.net, ваш Resolver не может выполнить запросы напрямую. Ошибка времени ожидания подтверждает, что связь с DNS-серверами за пределами вашей VPC не установлена.
Возможные причины
-
Ограничения сетевого трафика: Как вы правильно заметили, трафик, исходящий из вашего Outbound Resolver, не может проходить через Internet Gateway. Это создает ограничения на работу с внешними IPv6-ресурсами.
-
Отсутствие поддержки IPv6 в Reachability Analyzer: Это затрудняет диагностику, так как вы не можете проверить доступность других ресурсов.
-
Настройка безопасности: Хотя ваш security group разрешает аварийное выполнение запросов, важно убедиться, что нет других правил, таких как Network ACL, которые могут блокировать трафик.
Решение проблем
-
Использование локального резольвера: Как вы уже выяснили, установка BIND9 на другом экземпляре EC2 в той же подсети позволяет решить проблему. Это, вероятно, является рекомендуемым временным решением, пока AWS не внедрит поддержку для прямых запросов из Outbound Resolver в IPv6.
-
Проверка настройки правил и шифрования: Убедитесь, что ваши Resolver Rules действительно настроены на пересылку запросов для нужного домена на правильный IP-адрес. Также важно проверить, поддерживают ли итоговые серверы DNS DNSSEC и как происходит шифрование данных.
-
Настройка Network ACL: Убедитесь, что ваши Network Access Control Lists (ACL) не блокируют трафик к/из внешних IPv6-ресурсов. Нужно проверить как входящие, так и исходящие правила, чтобы гарантировать, что трафик разрешен.
-
Проверьте настройки DNS: Убедитесь, что DNS-клиент на Ubuntu корректно настроен на использование IPv6 и проверяет правильность конфигурации системного файла resolv.conf (например, работающий DNS-сервер должен быть указан правильно).
-
Альтернативные подходы: Рассмотрите возможность использования AWS PrivateLink или Transit Gateway, которые могут помочь в маршрутизации трафика для более сложных конфигураций и потребностей бизнеса.
Заключение
В вашей ситуации временное решение по установке локального резольвера выглядит оптимальным. Однако важно отслеживать обновления от AWS относительно поддержки прямых запросов Outbound Resolver для IPv6, чтобы в будущем упростить архитектуру. Понимание ограничений и возможностей ваших инструментов позволит вам легче управлять инфраструктурой в облаке.
Если у вас возникают дополнительные вопросы или потребуется помощь с дальнейшей настройкой, не стесняйтесь обращаться.