Как устранить проблемы с DNS

Вопрос или проблема

Я пытаюсь написать простую программу на 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 и испытываю трудности с устранением проблем, которые, по всей видимости, должны просто работать:

  1. Есть ли что-то в журнале ошибок, что могло бы помочь? Есть ли другие журналы или диагностические средства, которые я могу попробовать?

  2. Я все больше беспокоюсь о том, что не смогу настроить DNS-сервер Windows для работы с клиентом Linux (по крайней мере, на уровне моего опыта). Есть ли очень простой DNS-сервер для Ubuntu, который я мог бы настроить вместо этого?

Редактировать: Изображение DNS-сервера:
вставьте описание изображения здесь

Ответ или решение

Для устранения неполадок с DNS на Ubuntu, следуйте следующему пошаговому руководству. Я постараюсь помочь вам понять проблему и предложить решения.

Шаг 1: Проверка конфигурации DNS на Ubuntu

  1. Проверьте настройки /etc/resolv.conf:
    Убедитесь, что ваш файл /etc/resolv.conf содержит корректный адрес вашего DNS-сервера. Например:

    nameserver 192.168.1.189
  2. Проверьте работоспособность 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-сервер не смог решить запрос. Это может быть связано с несколькими причинами:

  1. Проверьте настройку зонирования:
    Убедитесь, что ваш DNS-сервер Windows правильно настроен для разрешения имени TESTHOSTNAME. Проверьте наличие соответствующей записи типа A для TESTHOSTNAME в вашей зоне.

  2. Проверка разрешения имени:
    Выполните команду на сервере Windows:

    nslookup TESTHOSTNAME

    Убедитесь, что DNS-сервер возвращает правильный IP-адрес. Если он не возвращает то, что ожидается, возможно, необходимо внести изменения в конфигурацию.

Шаг 3: Устранение возможных проблем

  1. Проверка брандмауэра:
    Даже если вы думаете, что брандмауэр отключен, немаловажно проверить, не блокируются ли порты DNS (53) и порты вашего приложения (например, 10000). На Ubuntu вы можете использовать:

    sudo ufw status
  2. Дополнительная диагностика:
    Если у вас есть возможность, попробуйте использовать другую машину в вашей сети (Linux или Windows) для обращения к TESTHOSTNAME, чтобы убедиться, что проблема не связана с вашим Ubuntu-клиентом.

Шаг 4: Альтернативный DNS-сервер на Ubuntu

Если вы продолжаете испытывать трудности с Windows DNS-сервером, рассмотрите возможность использования простого DNS-сервера на Ubuntu, такого как dnsmasq. Установите его следующей командой:

sudo apt install dnsmasq

После установки:

  1. Настройте файл /etc/dnsmasq.conf, чтобы добавить свою запись для TESTHOSTNAME:

    address=/TESTHOSTNAME/192.168.1.157
  2. Перезапустите dnsmasq:

    sudo systemctl restart dnsmasq
  3. Убедитесь, что ваш Ubuntu-клиент использует локальный DNS-сервер:

    nameserver 127.0.0.1

Заключение

Следуя данным шагам, вы сможете диагностировать и, возможно, исправить проблему с разрешением имени TESTHOSTNAME на Ubuntu. Если возникнут дополнительные вопросы или трудности, пожалуйста, не стесняйтесь задать их. Удачи!

Оцените материал
Добавить комментарий

Капча загружается...