Назад | Перейти на главную страницу

Обойти поиск DNS-сервера с помощью / etc / hosts при использовании динамического IP-адреса

Насколько я понимаю, необходимость запрашивать внешние 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 в курсе изменений сети и перенумерации.