Вопрос или проблема
Как я могу проверить, какой DNS-сервер я использую (в Linux)? Я использую менеджер сети и проводное соединение с локальной сетью своего университета. (Я пытаюсь выяснить, почему мой домен не разрешается)
Вы должны получить какую-то разумную информацию по следующей команде:
$ cat /etc/resolv.conf
Вот как я это делаю:
( nmcli dev list || nmcli dev show ) 2>/dev/null | grep DNS
Это работало раньше указанным способом:
nm-tool | grep DNS
На Debian вам нужно установить пакет network-manager.
На системах, работающих под управлением systemd, используйте:
systemd-resolve --status
Или:
resolvectl
Я думаю, вы также можете запросить DNS, и он покажет вам, какой сервер вернул результат. Попробуйте это:
dig yourserver.somedomain.xyz
И в ответе должно быть указано, какой сервер(ы) вернули результат. Интересующий вас вывод будет выглядеть как-то так:
;; Время запроса: 91 мсек
;; СЕРВЕР: 172.xxx.xxx.xxx#53(172.xxx.xxx.xxx)
;; КОГДА: Вт Апр 02 09:03:41 EDT 2019
;; РАЗМЕР СООБЩЕНИЯ получен: 207
Вы также можете указать dig
запросить конкретный DNS-сервер, используя dig @server_ip
Просто выполните nslookup
. Часть его результатов включает сервер, который он использует.
В следующем примере показано, что используемый DNS-сервер находится по адресу 8.8.8.8.
$ nslookup google.com
Сервер: 8.8.8.8
Адрес: 8.8.8.8#53
Неавторитетный ответ:
Имя: google.com
Адрес: 172.217.22.174
С помощью новой команды network-manager
nmcli
, сделайте это:
nmcli --fields ipv4.dns,ipv6.dns con show [connection_name]
В последних версиях network-manager (таких как в Ubuntu 16.04) имена полей немного отличаются:
nmcli --fields ip4.dns,ip6.dns con show [connection_name]
Если вы не знаете имя соединения, используйте:
nmcli -t --fields NAME con show --active
Например, в старых версиях nmcli:
$ nmcli --fields ip4.dns,ip6.dns con show 'Проводное соединение 1'
IP4.DNS[1]: 172.21.0.13
IP4.DNS[2]: 172.21.0.4
Чтобы получить первый DNS СЕРВЕР (только IP):
cat /etc/resolv.conf|grep -im 1 '^nameserver' |cut -d ' ' -f2
cat
выведет конфигурацию DNSgrep
фильтрует только nameserver-i
grep игнорирует регистр-m 1
grep останавливается после первого совпаденияcut
извлекает часть IP из строки (второй столбец с разделителем ‘ ‘)
Если вы предпочитаете sed:
cat /etc/resolv.conf | sed -rn "s/^nameserver ([.0-9]*).*$/\1/p"
- Команда Sed: после nameserver вернуть все, что является числом или точкой.
Чтобы поместить IP DNS в переменную окружения, вы можете использовать следующее:
export THEDNSSERVER=$(cat /etc/resolv.conf|grep -im 1 '^nameserver' |cut -d ' ' -f2)
Используя resolvectl
$ resolvectl status | grep -1 'DNS Server'
Поддержка DNSSEC: нет
Текущий DNS сервер: 1.1.1.1
DNS серверы: 1.1.1.1
1.0.0.1
Опции
grep
:-C NUM
,-NUM
,--context=NUM
Печатает NUM строк контекста вывода.
Для совместимости systemd-resolve
является символической ссылкой на resolvectl
на многих дистрибутивах, как в Ubuntu 18.10:
$ type -a systemd-resolve
systemd-resolve это /usr/bin/systemd-resolve
$ ll /usr/bin/systemd-resolve
lrwxrwxrwx 1 root root 10 ное. 15 21:42 /usr/bin/systemd-resolve -> resolvectl
$ type -a resolvectl
resolvectl это /usr/bin/resolvectl
$ file /usr/bin/resolvectl
/usr/bin/resolvectl: ELF 64-bit LSB shared object, x86-64, версия 1 (SYSV), динамически связанный, интерпретатор /lib64/ld-linux-x86-64.so.2, для GNU/Linux 3.2.0, BuildID[sha1]=09e488e849e3b988dd2ac93b024bbba18bb71814, очищенный
Если вы используете менеджер сети, то, вероятно, вы получаете все параметры сети от DHCP-сервера в вашем университете.
Если вы не хотите использовать свою оболочку для проверки настроек DNS (как описано Хессе и Алексисом), вы можете увидеть их в панели «Информация о сети».
Вы можете получить доступ к этой панели, щелкнув правой кнопкой мыши на значке менеджера сети и выбрав «Информация о соединении» в меню.
У меня Fedora 25, и я также испытывал подобную медленную реакцию командной строки на команды sudo.
nmcli dev show | grep DNS
Показал, что только один из моих трех адаптеров (два активных) имел DNS-записи.
Добавив DNS-записи к одному активному адаптеру, у которого не было записи – вуаля!
Все хорошо, и время отклика мгновенное.
В Ubuntu >= 15
nmcli device show <interfacename> | grep IP4.DNS
Замените <interfacename>
на ваше.
В Ubuntu <= 14
Команда
nmcli dev list iface <interfacename> | grep IP4
Замените <interfacename>
на ваше.
Примеры
nmcli device show eth0 | grep IP4.DNS
Или
nmcli dev list iface eth0 | grep IP4
Это выведет все DNS-серверы (если вы используете более одного).
В недавней Fedora 33 вы можете просто использовать
# resolvectl dns
Глобально:
Ссылка 2 (enp0s31f6):
Ссылка 3 (wlp4s0): 1.1.1.1 8.8.8.8
Ссылка 4 (virbr0):
Ссылка 5 (virbr0-nic):
Чтобы проверить, активен ли systemd-resolved
, выполните cat /etc/resolv.conf
. Это сообщит вам, кто управляет файлом.
Если вам нужны более подробные данные, вы можете использовать resolvectl status
, resolvectl statistics
, вы также можете сбросить кэши…
Для устранения неполадок вы можете использовать journalctl -u systemd-resolved -f -o cat | grep Looking
после установки уровня на DEBUG: sudo resolvectl log-level debug
На системах, где systemd-resolved
НЕ установлен:
$ host -v something.unknown | awk -F "[ #]" '/Received /{print$5}' | uniq
192.168.1.1
На системах, где работает NetworkManager
:
$ ( nmcli -f IP4.DNS,IP6.DNS dev list || nmcli -f IP4.DNS,IP6.DNS dev show ) 2>/dev/null | awk '/DNS/{print$NF}'
192.168.1.1
В CentOS вы можете использовать:
/usr/sbin/named -v
Некоторые ребята используют tcpdump
и довольны результатом:
tcpdump -i any port 53
Ответ или решение
Чтобы проверить, какие DNS-серверы вы используете в Linux, есть несколько методов, особенно если вы подключены через Network Manager с проводным соединением к университетской локальной сети. Эти методы помогут вам выявить текущие DNS-настройки, что может быть полезно для диагностики проблем с разрешением доменов.
Способы проверки DNS-серверов
-
Чтение файла
/etc/resolv.conf
Этот файл содержит информацию о DNS-серверах, используемых вашей системой. Можно выполнить следующую команду:cat /etc/resolv.conf
Вы увидите строки, начинающиеся с
nameserver
, за которыми следуют IP-адреса DNS-серверов. -
Использование
nmcli
Утилитаnmcli
предоставляет информацию о соединениях и их настройках. Для получения информации о DNS-серверах выполните:nmcli dev list | grep DNS
или
nmcli dev show | grep DNS
Если вам нужно увидеть DNS-серверы для конкретного соединения, используйте:
nmcli --fields ipv4.dns,ipv6.dns con show [имя_соединения]
Чтобы получить имя соединения, выполните:
nmcli -t --fields NAME con show --active
-
Работа с
systemd-resolve
илиresolvectl
На системах, использующихsystemd
, можно использовать следующие команды для проверки статуса DNS:systemd-resolve --status
или
resolvectl status
Эти команды предоставят информацию о текущих DNS-серверах и других параметрах.
-
Запрос с помощью
dig
илиnslookup
Эти команды позволяют делать запросы к DNS и предоставляют информацию о том, какой сервер ответил на запрос. Например:dig вашдомен.xyz
В выводе вы увидите строку, которая указывает, какой сервер обработал запрос:
;; SERVER: 172.xxx.xxx.xxx#53(172.xxx.xxx.xxx)
Для
nslookup
:nslookup google.com
Вывод будет содержать строки, показывающие, какой сервер использовался:
Server: 8.8.8.8 Address: 8.8.8.8#53
-
GUI-интерфейс Network Manager
Если вы предпочитаете графический интерфейс, нажмите правую кнопку мыши на значке Network Manager, выберите "Информация о соединении". Это позволит вам увидеть текущие параметры сети, включая DNS-серверы.
Заключение
Используя вышеописанные методы, вы можете легко определить, какие DNS-серверы используются вашим устройством под управлением Linux. Это часто является первой стратегией для диагностики проблем с разрешением доменов. Если данные значения не совпадают с ожидаемыми или возникают проблемы с доступом к определенным доменам, вы можете рассмотреть возможность изменения настроек DNS на своем устройстве.