Вопрос или проблема
Я пытаюсь написать простую программу на C, чтобы подключиться к имени хоста по TCP/IP, но у меня возникают трудности с работой DNS на Ubuntu.
На самом деле, у меня это довольно хорошо работало на Windows. На Windows Server 2022 с IP 192.168.1.189 я настроил простой DNS-сервер, чтобы направить мое имя хоста TESTHOSTNAME на мой IP 192.168.1.157. На ПК с Windows 10 я указал свой DNS на 192.168.1.189 и использовал Putty для создания сырого соединения с TESTHOSTNAME. Данные, отправленные из Putty, успешно принимаются на TESTHOSTNAME.
У меня не получается настроить это на Ubuntu. Я указал свой DNS на 192.168.1.189 и проверил, что могу его пинговать. Но когда я запускаю “nc TESTHOSTNAME 10000”, он не работает: nc: getaddrinfo для хоста “TESTHOSTNAME” порт 10000: Имя или служба не известны.
На клиенте Ubuntu, на DNS-сервере Windows и на ПК TESTHOSTNAME брандмауэры выключены.
Я не вижу абсолютно никаких полезных журналов, показывающих либо успех, либо неудачи в просмотре событий Windows Server. Я включил отладочный журнал на DNS-сервере Windows Server и получил этот сбой:
9/27/2024 12:42:48 PM 017C PACKET 00000252C1073130 UDP Snd 192.168.1.168 93c7 R Q [8281 DR SERVFAIL] A (7)TESTHOSTNAME(0)
UDP response info at 00000252C1073130
Socket = 936
Remote addr 192.168.1.168, port 50201
Time Query=13247, Queued=0, Expire=0
Buf length = 0x0fa0 (4000)
Msg length = 0x0019 (25)
Message:
XID 0x93c7
Flags 0x8182
QR 1 (RESPONSE)
OPCODE 0 (QUERY)
AA 0
TC 0
RD 1
RA 1
Z 0
CD 0
AD 0
RCODE 2 (SERVFAIL)
QCOUNT 1
ACOUNT 0
NSCOUNT 0
ARCOUNT 0
QUESTION SECTION:
Offset = 0x000c, RR count = 0
Name = (7)TESTHOSTNAME(0)
QTYPE A (1)
QCLASS 1
Я новичок в DNS и испытываю трудности с устранением проблем, которые, по всей видимости, должны просто работать:
-
Есть ли что-то в журнале ошибок, что могло бы помочь? Есть ли другие журналы или диагностические средства, которые я могу попробовать?
-
Я все больше беспокоюсь о том, что не смогу настроить DNS-сервер Windows для работы с клиентом Linux (по крайней мере, на уровне моего опыта). Есть ли очень простой DNS-сервер для Ubuntu, который я мог бы настроить вместо этого?
Ответ или решение
Для устранения неполадок с DNS на Ubuntu, следуйте следующему пошаговому руководству. Я постараюсь помочь вам понять проблему и предложить решения.
Шаг 1: Проверка конфигурации DNS на Ubuntu
-
Проверьте настройки
/etc/resolv.conf
:
Убедитесь, что ваш файл/etc/resolv.conf
содержит корректный адрес вашего DNS-сервера. Например:nameserver 192.168.1.189
-
Проверьте работоспособность DNS-запросов:
Используйте командуdig
илиnslookup
, чтобы проверить, как работает DNS. Установитеdnsutils
, если они не установлены:sudo apt install dnsutils
Затем выполните:
dig @192.168.1.189 TESTHOSTNAME
или
nslookup TESTHOSTNAME 192.168.1.189
Обратите внимание на выдаваемые ответы. Если вы получаете
SERVFAIL
или другие ошибки, это может указывать на проблемы с самим DNS-сервером.
Шаг 2: Проверка логов на DNS-сервере Windows
Согласно вашему логированию, код ошибки RCODE 2 (SERVFAIL)
означает, что DNS-сервер не смог решить запрос. Это может быть связано с несколькими причинами:
-
Проверьте настройку зонирования:
Убедитесь, что ваш DNS-сервер Windows правильно настроен для разрешения имениTESTHOSTNAME
. Проверьте наличие соответствующей записи типа A дляTESTHOSTNAME
в вашей зоне. -
Проверка разрешения имени:
Выполните команду на сервере Windows:nslookup TESTHOSTNAME
Убедитесь, что DNS-сервер возвращает правильный IP-адрес. Если он не возвращает то, что ожидается, возможно, необходимо внести изменения в конфигурацию.
Шаг 3: Устранение возможных проблем
-
Проверка брандмауэра:
Даже если вы думаете, что брандмауэр отключен, немаловажно проверить, не блокируются ли порты DNS (53) и порты вашего приложения (например, 10000). На Ubuntu вы можете использовать:sudo ufw status
-
Дополнительная диагностика:
Если у вас есть возможность, попробуйте использовать другую машину в вашей сети (Linux или Windows) для обращения кTESTHOSTNAME
, чтобы убедиться, что проблема не связана с вашим Ubuntu-клиентом.
Шаг 4: Альтернативный DNS-сервер на Ubuntu
Если вы продолжаете испытывать трудности с Windows DNS-сервером, рассмотрите возможность использования простого DNS-сервера на Ubuntu, такого как dnsmasq
. Установите его следующей командой:
sudo apt install dnsmasq
После установки:
-
Настройте файл
/etc/dnsmasq.conf
, чтобы добавить свою запись дляTESTHOSTNAME
:address=/TESTHOSTNAME/192.168.1.157
-
Перезапустите dnsmasq:
sudo systemctl restart dnsmasq
-
Убедитесь, что ваш Ubuntu-клиент использует локальный DNS-сервер:
nameserver 127.0.0.1
Заключение
Следуя данным шагам, вы сможете диагностировать и, возможно, исправить проблему с разрешением имени TESTHOSTNAME
на Ubuntu. Если возникнут дополнительные вопросы или трудности, пожалуйста, не стесняйтесь задать их. Удачи!