Я реализовал программу ретрансляции DNS в Windows.
Я получаю 3 DNS-запроса каждые nslookup
команда, PTR, A и AAAA.
Сначала я отвечаю на запрос type = A, а через несколько микросекунд отвечаю на запрос PTR / AAAA.
Но у меня тайм-аут nslookup
и обнаружил, что каждый ответ A и AAAA получен localhost, но ответ PTR получил ICMP Port unreachable
ошибка.
Интересно, почему это происходит?
Запросы адресов (A и AAAA) отделены от запроса записи PTR. Пока у вас нет адреса, вы не можете запросить запись PTR.
Для типичного SMTP обратного поиска проверки DNS для IP 192.0.2.8
процесс выглядит следующим образом:
8.2.0.192.in-addr.arpa
.smtp.example.org
smtp.example.org
192.0.2.8
IP-адреса меняются местами для поиска, так как это необходимо для поиска в таких подсетях, как 2.0.192.in-addr.arpa
чтобы найти сервер имен для подсети.
Делегирование частичных подсетей выполняется с использованием записей CNAME.
Вы используете UDP, TCP или оба? Используете ли вы тот же номер порта UDP, который был источником исходного запроса, в качестве порта назначения при использовании UDP? (Другими словами: когда UDP-запрос поступает с IP-адреса a.b.c.d порта X на ваш IP-адрес и порт 53, ответ должен быть отправлен с вашего порта 53 на порт X a.b.c.d.)
DNS может использовать как TCP, так и UDP: обычно UDP используется первым, потому что он самый быстрый, но если ответ не помещается в один пакет UDP, сервер вставляет столько, сколько может, и добавляет флаг, который сообщает клиенту, что «вот первая часть; если вам нужно больше, спросите еще раз по TCP, чтобы получить полный ответ ».