Насколько я понимаю, необходимость запрашивать внешние DNS-серверы для часто используемых имен может быть уменьшена, если эти часто используемые имена присутствуют в / etc / hosts.
Теперь у меня есть ситуация, когда у меня есть встроенный Linux-ящик с динамическим IP-адресом. Предположим, этот динамический IP-адрес в настоящее время - 206.190.36.105.
Вот содержимое моего файла / etc / hosts:
[root@zop]# cat /etc/hosts
127.0.0.1 localhost
192.168.0.1 mydevice
173.194.33.18 somesite.com
Однако, когда я запускаю tcpdump и пингую somesite.com, я все еще вижу, что somesite.com разрешается с помощью поиска DNS.
17:28:48.330535 IP 206.190.36.105 > somesite.com: ICMP echo request, id 14880, seq 0, length 64
17:28:48.333465 IP 206.190.36.105.57201 > resolver1.opendns.com.domain: 2+ PTR? 204.220.167.10.in-addr.arpa. (45)
17:28:49.312286 IP somesite.com > 206.190.36.105: ICMP echo reply, id 14880, seq 0, length 64
17:28:49.335601 IP 206.190.36.105 > somesite.com: ICMP echo request, id 14880, seq 1, length 64
17:28:49.366973 IP resolver1.opendns.com.domain > 206.190.36.105.57201: 2* 0/1/0 (104)
17:28:49.368286 IP 206.190.36.105.59381 > resolver1.opendns.com.domain: 3+ PTR? 204.220.167.10.in-addr.arpa. (45)
17:28:49.664215 IP somesite.com > 206.190.36.105: ICMP echo reply, id 14880, seq 1, length 64
17:28:49.742004 IP resolver1.opendns.com.domain > 206.190.36.105.59381: 3* 0/1/0 (104)
17:28:49.743194 IP 206.190.36.105.57388 > resolver1.opendns.com.domain: 4+ PTR? 204.220.167.10.in-addr.arpa. (45)
17:28:50.038848 IP resolver1.opendns.com.domain > 206.190.36.105.57388: 4* 0/1/0 (104)
17:28:50.040069 IP 206.190.36.105.53513 > resolver1.opendns.com.domain: 5+ PTR? 204.220.167.10.in-addr.arpa. (45)
17:28:50.335815 IP resolver1.opendns.com.domain > 206.190.36.105.53513: 5* 0/1/0 (104)
17:28:50.337036 IP 206.190.36.105.54248 > resolver1.opendns.com.domain: 6+ PTR? 204.220.167.10.in-addr.arpa. (45)
Если я создам запись для текущего IP-адреса ящика Linux в / etc / hosts, как в:
[root@zop]# cat /etc/hosts
127.0.0.1 localhost
192.168.0.101 mydevice
173.194.33.18 somesite.com
206.190.36.105 whatismyip
затем tcpdump в тандеме с пингом на somesite.com показывает, что поиск DNS теперь пропущен
17:15:35.795013 IP whatismyip > somesite.com: ICMP echo request, id 61212, seq 0, length 64
17:15:36.648193 IP somesite.com > whatismyip: ICMP echo reply, id 61212, seq 0, length 64
17:15:36.809234 IP whatismyip > somesite.com: ICMP echo request, id 61212, seq 1, length 64
17:15:37.164276 IP somesite.com > whatismyip: ICMP echo reply, id 61212, seq 1, length 64
17:15:37.819915 IP whatismyip > somesite.com: ICMP echo request, id 61212, seq 2, length 64
17:15:38.148193 IP somesite.com > whatismyip: ICMP echo reply, id 61212, seq 2, length 64
17:15:38.827728 IP whatismyip > somesite.com: ICMP echo request, id 61212, seq 3, length 64
Мне интересно понять причины этого наблюдаемого поведения. Производитель встроенного Linux утверждает, что такое поведение является нормальным и ожидаемым, но рационально не следует ли обходить поиск DNS, если только IP-адрес назначения отсутствует в файле / etc / hosts?
Порядок поиска обычно контролируется /etc/nsswitch
. Помните, что если у вас есть записи в /etc/hosts
и это первый поиск, поиск DNS не выполняется. Убедитесь, что записи являются статичными и правильными.
Если dns
первый, /etc/hosts
будет использоваться только в случае сбоя поиска по DNS. Если files
первый, dns используется только если /etc/hosts
терпит неудачу.
В search
и domain
линии в /etc/resolv.conf
может вызвать дополнительные поиски, если имя не найдено. В ndots
параметр может использоваться, чтобы указать, сколько точек требуется для отключения использования search
и domain
в поиске.
Вы можете использовать псевдонимы в /etc/hosts
привязан к первой записи в search
чтобы предотвратить поиск с помощью дополнительных поисковых доменов.
Я думаю, вы путаете прямой поиск DNS с обратным поиском DNS.
Прямой поиск DNS осуществляется от имени к IP-адресу. Если вы посмотрите на пакеты DNS в своем первом tcpdump, вы увидите PTR?
(запрос указателя), который представляет собой запрос на преобразование IP в имя.
z.y.x.w.in-addr.arpa
IP-адрес запрашивается в нотации обратного просмотра. Если вы измените этот порядок, вы получите w.x.y.z, IP-адрес, который он пытается найти.
Я подозреваю tcpdump
является источником запросов обратного просмотра, а не ping
, так как нет необходимости выполнять обратный поиск по вашему IP. Когда вы добавляете свой IP в /etc/hosts
, tcpdump
больше нет необходимости выполнять обратный поиск на вашем IP-адресе, поскольку ваша библиотека преобразователя может найти его без выполнения DNS-запросов.
Обычно неплохо запустить tcpdump
с -n
вариант, чтобы избежать этих поисков. Обычно в них нет необходимости.
DNS-запросы, которые вы видите, - это обратные запросы, отображающие IP-адрес в доменное имя:
PTR 204.220.167.10.in-addr.arpa.
Ping запрашивает имя 10.167.220.204 (предположительно IP вашего клиента?). Я не видел перенаправления запросов (преобразование somesite.com в IP-адрес) в вашем tcpdump
вывод.
Теперь вернемся к вашему первоначальному намерению, которое, как я предполагаю, заключается в уменьшении сетевого трафика. Если ты бежишь nscd
(Демон кэширования служб имен) вы обычно видите только один DNS-запрос для каждого имени хоста и nscd
демон будет кэшировать его для вас. Это намного лучше, чем хранить /etc/hosts
в курсе изменений сети и перенумерации.