Я реализовал программу ретрансляции 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. )
DNS может использовать как TCP, так и UDP: обычно сначала используется UDP, потому что он самый быстрый, но если ответ не помещается в один UDP-пакет, сервер помещает как можно больше и добавляет флаг, который говорит клиенту: "вот первая часть; если вам нужно больше, попросите еще раз по TCP, чтобы получить полный ответ"
.