Проверьте что доменные имена успешно резолвятся в ip адреса
Проверьте что доменные имена успешно резолвятся в ip адреса
Добрый день, дорогие друзья.
Возникла небольшая проблема.. Не резолвятся некоторые доменные имена, к примеру victoriaclassic.ru. В чем может быть проблема не подскажете, спасибо.
1. «Bind не резолвит некоторые доменные имена» | + / – | |
Сообщение от fantom (ok) on 18-Июл-13, 12:40 | ||
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору |
2. «Bind не резолвит некоторые доменные имена» | + / – | |
Сообщение от Alexadm (ok) on 18-Июл-13, 12:56 | ||
Проверены файлы /etc/resolv.conf на BIND сервере, там стоит ip адрес сервера и localhost. в /etc/named.conf стоит listen-on port 53 < 127.0.0.1; any; >; listen-on-v6 port 53 < ::1; >; Server: 127.0.0.1 ———— В чем может быть причина. | ||
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору |
3. «Bind не резолвит некоторые доменные имена» | + / – | |
Сообщение от Alexadm (ok) on 18-Июл-13, 13:41 | ||
]# cat /etc/named.conf acl «uni-nets» < options < dnssec-enable yes; /* Path to ISC DLV key */ logging < channel default_log < channel notify_log < channel query_log < channel update_log < category notify < category update < category queries < category default < view «internal» zone «.» IN < >; zone «.» IN < >; | ||
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору |
4. «Bind не резолвит некоторые доменные имена» | + / – | |
Сообщение от Alexadm (ok) on 18-Июл-13, 13:43 | ||
Корневые сервера прописаны в /var/named/named.ca | ||
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору |
5. «Bind не резолвит некоторые доменные имена» | + / – | |
Сообщение от Alexadm (ok) on 18-Июл-13, 17:27 | ||
| ||
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору |
6. «Bind не резолвит некоторые доменные имена» | + / – | |
Сообщение от lavr on 18-Июл-13, 17:59 | ||
| ||
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору |
7. «Bind не резолвит некоторые доменные имена» | + / – | |
Сообщение от LSTemp (ok) on 19-Июл-13, 04:52 | ||
| ||
Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору |
8. «Bind не резолвит некоторые доменные имена» | + / – | |
Сообщение от Alexadm (ok) on 19-Июл-13, 10:11 | ||
У не резолвившегося ip менялся хостинг.
Я тоже думал так, что не такие корневые серверы, оказалось всё намного проще. Спасибо всем за помощь..
Хорошим тоном является все-таки огласить в конце решенной темы в чем была проблема и как ее исправили.
прошу прощения. пост как-то мимо меня прошел ). Чиним резолвинг адресов в VPN-локалке (openconnect) для docker и systemd-resolvedsystemd-resolvedПоставил пакеты network-manager-openconnect network-manager-openconnect-gnome И если параметры знаешь, то можно и руками отредактировать нужное соединение. Подключаться стало удобно и возникла вторая проблема, имена ресурсов в VPN сети не разрешаются в адреса DNS сервером. Сервер есть, все настройки на месте, но nslookup someserver.local выдает ошибку, а nslookup someserver.local somednsIP выдет правильный ответ. Странно, подумал я, как так, сервер есть, отвечает, а если его конкретно не указать, ошибка? Ответ оказался прост. Когда systemd-resolved пытается найти адрес сервера по имени, он выступает фасадом для других DNS серверов. Делается это так, ссылка /etc/resolv.conf может указывать на несколько мест: Саму ссылку /etc/resolv.conf вы можете сами настроить что бы смотрела в любое из мест. Когда systemd-resolved прикинулся локальным DNS сервером и через /etc/resolv.conf всех отправил к себе за разрешением имен, логика его работы такова. Для каждого коннекта, которые можно посмотреть командой nmcli connection show (это те коннекты, которые знает NetworkManager) systemd-resolved помнит DNS сервера, которые получил по DHCP. Это можно посмотреть командой: Когда в 127.0.0.53 приходит запрос на разрешение имени, systemd-resolved смотрит search domain у каждого из коннектов (эти домены он при подключении от DHCP получил тоже). Домены можно посмотреть командой: Далее имя хоста проверяется на частичное совпадение с теми доменами, которые прикреплены к коннектам и самое длинное совпадение и определяет какой конкретно DNS сервер вызвать. Либо все идет в DNS сервер где search domain « От сервера компании мне приходил неверный search domain (somedomain.local) для VPN коннекта и потому когда я пытался разрешить адрес someserver.local, systemd-resolved их не мог найти, так как предполагал, что DNS сервера, полученные из этого соединения нужны что бы распознавать имена someserver.somedomain.local. Поправил я это подменив search domain в NetworkManager командой dockerТеперь в хост системе работает резолвинг адресов, но при запуске докера резолвинг локальных адресов в VPN может не работать по прежнему. И тут есть несколько вариантов. Контейнер запущен с network_mode: host в таком случае будет использоваться для резольвинга то, что лежит в /run/systemd/resolve/resolv.conf и там у меня первый же днс сервер выбирается для резольва local и он для этого не подходит. Итог, не работает. Зато все сервисы хост машины видно из контейнера, что еще и неправильно. Контейнер запущен с network_mode: bridge с созданием отдельной сети. В таком случае сервисы хоста будет не видно, помимо этого будет использован все тот же не работающий у меня /run/systemd/resolve/resolv.conf Контейнер запущен без настроек сети и использует дефолтный bridge, созданный докером при инсталляции (docker0). В этом случае используется для резольва имен внутренний докеровский DNS, который судя по всему нормально взаимодействует с systemd-resolved и все резолвит как надо. В /etc/resolv.conf будет такое: Если надо показать сервисы хост машины для доступа из контейнера, то просто запускаем сервисы слушать на docker0 IP и получаем доступ. Не забываем открыть порты, например у меня ufw зарезал 8080 и пришлось открывать. В итоге можно будет указать адрес где слушать не захардкоженный 127.0.0.53, а доступный изнутри докера и все будет работать, но пока нет. Есть другое решение, когда контейнер пойдет на порт 53 мы будем перебрасывать его запросы в стаб systemd с помощью чего то вроде В итоге мы получаем работающий VPN на хосте, который резолвит имена в локальной сети, работающий докер, который может резолвить эти адреса как родные. Resolve IP адресов в Linux: понятное и детальное описаниеНастройка сетевого взаимодействия сервисов не самая простая задача и часто осуществляется без глубокого понимания как требуется настраивать систему и какие настройки на что влияют. После миграции сервисов в docker контейнерах с centos 6 на centos 7 я столкнулся со странным поведением вебсервера: он пытался присоединиться к сервису по IPv6, а сервис же слушал только IPv4 адрес. Стандартный совет в такой ситуации — отключить поддержку IPv6. Но это не поможет в ряде случаев. Каких? В этой статье я задался целью собрать и детально объяснить как приложения resolve ‘ят адреса. Публикация будет полезна начинающим администраторам и разработчикам.
Теперь, когда у разработчика есть возможность вызвать функцию семейства getaddrinfo из glibc для определения адреса, то возникает потребность конфигурировать возвращаемые значения. Например, использовать ли сперва /etc/hosts или запрос к DNS-серверу. В glibc подобное конфигурирование производится с помощью схемы под названием Name Service Switch (NSS). Если объяснять на пальцах, то NSS позволяет задавать базы данных и очередность поиска в этих базах для предоставления сервиса. В нашем случае, сервис — это поиск по hostname, а базой данных может выступать /etc/hosts или DNS сервер. Это не единственный сервис настраиваемый посредством NSS, предоставляются сервисы mail алиасов, сервис поиска пользователей и групп. Ознакомится со списком можно в руководстве. Можно отметить, что для localhost имеются две записи: IPv4 и IPv6 адрес. Это может сыграть злую шутку и в конце материала я расскажу почему. В мануале еще пишут про особую логику с обработкой хостнейма _gateway, но видимо это какой-то патч, так как с Centos 7 у меня он не завелся. База mdns4_minimal или же mdns_minimal требуется для корректной работы Avahi. При необходимости можно обратиться к документации Arch по Avahi, где коротко и понятно дана информация Теперь, когда дана информация по базам и принципам их работы стоит отметить отличия в определении адресов в разных инструментах, что приводит к проблемам в рантайме. Обычно администраторы проверяют хостнейм используя команду host. Это некорректно, так host, как и dig, используют только DNS резолвинг, но не используют NSS. Nginx, например, использует функцию getaddrinfo, а она использует NSS. Это приводит к тому, что вбитый в /etc/hosts хостнейм может работать с nginx, но не резолвится иными способами. Куда хуже, когда в /etc/hosts вбиты IPv6 адрес для хостнейма, а в настройках DNS возвращается только IPv4 адрес. В этом случае, администратор может проверить что команда host возвращает только IPv4 адрес и успокоится, а потом приложение использующее getaddrinfo из glibc запустится и найдет для того же хостнейма IPv4 и IPv6 адрес. Источник ошибок… Для проверки результатов возвращаемой каждой из баз документация рекомендует воспользоваться утилитой getent. Ниже немного примеров работы с getent с включенным IPv6. В /etc/nsswitch.conf содержится следующая цепочка баз: В /etc/hosts содержится следующее инфо Команда getent ahosts покажет список всех адресов которые удалось найти. С такими настройками она выведет следующее: Команда позволяет точечно опросить конкретную базу и выяснить что срезолвит база. Рассмотрим для каждой базы возвращаемые значения: Если убрать из /etc/hosts строки для localhost, то вывод видоизменится: Теперь база dns и myhostname возвращает ответы, а база files не содержит данных. Для DNS запросов используется неймсервер конфигурируемый в /etc/resolv.conf в моем контейнере, например На хост машине установлен dnsmasq который проксирует и кэширует ответы DNS серверов. Ответ от DNS будет зависеть от настроек DNS сервера к которому поступил запрос. RFC 1912 рекомендует в пункте 4.1 сконфигурировать DNS сервера таким образом, чтобы localhost указывал на 127.0.0.1.
These are set up to either provide nameservice for «special» The «localhost» address is a «special» address which always refers to В моем случае, dnsmasq из коробки содержит записи для localhost, как и рекомендует RFC. Статус IPv6 на сервере можно получить из параметров ядра. Значение 0 возвращается при включенном IPv6, а 1 при выключенном. В выводе ifconfig интерфейсы слушающие IPv6 содержат строчку inet6. Ниже пример вывода с выключенным и включенным IPv6 соответственно: Выключить IPv6 можно вызовом Воу, в первом выводе у нас дублируется адрес 127.0.0.1. Чтобы разобраться почему так происходит стоит обратиться к исходному коду glibc и к коду утилиты getent. Ниже кусок кода утилиты getent. Флаг AI_V4MAPPED функции getaddrinfo производит маппинг IPv6 адресов на IPv4 если не были найдены IPv6 адреса в результате опроса базы. Флаг AI_ADDRCONFIG вынудит getaddrinfo проверить наличие IPv6/IPv4 адресов сконфигурированных в системе и в случае отсутствия хотя бы одного IPv6/IPv4 адреса не будет возвращаться IPv6/IPv4 независимо от того что ответит конкретная база. Чтобы лучше понять эту концепцию, приведу примеры с выводом getaddrinfo на той же системе, с разными настройками ai_flags и ai_family. В /etc/hosts включены для localhost IPv4 и IPv6 адреса. Осталось проверить как ведет себя getaddrinfo для dns базы. Для этого оставлю в /etc/nsswitch.conf для hosts только dns базу и порезолвлю google.com. Вывод ниже с включенным IPv6. А вот вывод с выключенным IPv6: Как видно, ситуация с AI_ADDRCONFIG очень похожа. Напоследок приведу пример как не учитывая все вышесказанное вляпаться в проблемы. IPv6 включен, /etc/nsswitch.conf стандартный. Какой можно сделать вывод из всего написанного?
|