ФОН
Я пытаюсь узнать, какой сервер DNS используется, когда я соединяюсь с Интернетом со своим wlan0 устройством. Я выполняю Kubuntu 15.04.
Я искал вокруг и попробовал несколько решений, ни одно из которых не работает на меня. Вот то, что я попробовал:
1. Используя команду nmcli
nmcli dev list | grep DNS
согласно ответу на подобный вопрос, который задают здесь.
Это было отмечено как ответ для OP, но для меня я просто получаю следующий вывод:
Ошибка: команда 'dev' 'список' не допустима.
2. Чтение resolv.conf:
cat /etc/resolv.conf
Это не дает мне информацию DNS для моего соединения.
nm-инструмент, кажется, не установлен в моей системе. Таким образом, это не корректный ответ для меня.
Существует несколько ответов, которые включают использование dnsmasq. Но во всех случаях я не понял ответ достаточно для использования его, и я не знаю, каков dnsmasq.
ВОПРОС
Как я узнаю то, что DNS соединение использует, через командную строку или GUI, с Kubuntu 15.04?
Кажется, что я испытал затруднения в артикулировании этого вопроса, потому что многие люди предоставили ответы, которые - пока корректный - не совсем ответы на вопрос, я имел в виду. Вот моя попытка разъяснения:
Ответы, предоставленные до сих пор просто, дают мне адрес моего маршрутизатора, потому что мой маршрутизатор ответственен за обеспечение интернет-соединения. Но вопрос, который я действительно имел в виду, был; какой Интернет сервер DNS используется, когда я ввожу, например, "www.google.com" в интернет-браузер?
Я думал, что это будет относительно легко узнать, главным образом потому что легко продиктовать, какой Интернет сервер DNS используется сам. Я могу, например, поднять свои настройки подключения и сказать этому использовать 8.8.8.8 для DNS, который является общедоступным сервером DNS Google. Мой вопрос, затем; если я не диктую определенного сервера DNS и оставляю маршрутизатор для использования независимо от того, что он присвоен, как я узнаю, какой сервер (серверы) DNS он использует?
Вот два пути:
$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.1.1 **<--Server**
search localdomain
или
$ dig localhost
; <<>> DiG 9.9.5-3ubuntu0.4-Ubuntu <<>> localhost
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47070
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;localhost. IN A
;; ANSWER SECTION:
localhost. 0 IN A 127.0.0.1
;; Query time: 1 msec
;; SERVER: 127.0.1.1#53(127.0.1.1) **<--Server**
;; WHEN: Wed Aug 05 11:30:10 EDT 2015
;; MSG SIZE rcvd: 54
оказывается, что вопрос был, "Я хотел бы узнать, какие серверы DNS используются, когда я использую свое интернет-соединение для разрешения имени хоста к IP т.е. когда я использую свой интернет-браузер для просмотра на www.amazon.com, какой сервер DNS переводит это в IP"
Теперь, ответ:
Для существующего соединения, Вы не можете. Разрешение адреса DNS произошло и закончено, прежде чем можно будет открыть соединение.
Для наблюдения, какие серверы имен используются для разрешения запроса DNS Вы могли dig +trace @$( grep nameserver /etc/resolv.conf| awk '{print $2}' | head -n1 ) amazon.com
dig
, от dnsutils
пакет.
С nmcli можно проверить, с какими серверами DNS dnsmasq настроен:
nmcli dev show wlan0 | grep -i dns
Пример был бы:
$ nmcli dev show wlan0 | grep -i dns
IP4.DNS[1]: 10.11.12.1
IP4.DNS[2]: 10.11.13.1
Показать весь DNS для каждого сетевого устройства, кроме lo
:
for i in /sys/class/net/*; do \
awk -F/ '! /lo/ {system("nmcli dev show "$(NF)" | grep \"DNS\|DEVICE\"")}' <<< "$i"; \
done
Пример производится
GENERAL.DEVICE: eth0
IP4.DNS[1]: 192.168.20.1
Обновление: Как показано в реве комментариев вопрос, OP хочет знать сервер DNS, который использует маршрутизатор. При использовании автоматического соединения все ответы, данные здесь, скажут Вам адрес Вашего маршрутизатора, что означает, что запросы переходят к Вашему маршрутизатору сначала. Маршрутизатор в свою очередь имеет свои собственные настройки, которые передают любой запрос DNS, который Вы отправляете в DNS маршрутизатора.
Обнаружение, какой сервер DNS используется на маршрутизаторе, только возможно при доступе к настройкам маршрутизатора, обычно для жилых маршрутизаторов через 192.168.0.1
.
TL; DR: Версия 1 - проверяет системный журнал. Версия 2 - отправляет пакеты с nslookup
или dig
и посмотрите, куда они переходят в; более усовершенствованный и технический ответ, но определенно больше забавы и по-моему немного более надежен.
Другие ответы, отправленные выше, являются большими и работают 99% времени. В этом ответе я хотел бы предоставить несколько альтернативный, больше технического решения с nslookup
. Другое простое решение состоит в том, чтобы проверить /var/log/syslog
.
Метод системного журнала
Простой метод состоит в том, чтобы искать с grep
инструмент для using nameserver
строка в /var/log/syslog/
:
$ sudo grep 'using nameserver' /var/log/syslog
Aug 6 02:25:34 ******** dnsmasq[1487]: using nameserver 208.67.220.220#53
tcpdump и nslookup метод
Вот не так простого метода, но возможно более надежен. Начиная с наблюдения, где движение запросов DNS скажет нам, что является реальным сервером DNS, мы можем сделать точно это. Существует такой инструмент как tcpdump
. Это используется для анализа пакетов, отправляют интернет-адаптерами. Часто, этот инструмент используется в перьевом тестировании. Для нашей скромной цели определить DNS, мы только должны сделать две вещи - выполненный одновременно tcpdump
и используйте другой инструмент nslookup
(который на самом деле помогает искать доменные имена с помощью сервера DNS системы). Конкретно мы хотим искать пакеты с тем движением к .domain
места назначения. Например, я работаю sudo tcpdump -c 50 -i wlan0 > tcpdump-result.txt
получать 50 пакетов от моего беспроводного адаптера, и сразу перейти к другой терминальной вкладке и работать nslookup google.com
. Для удобства я также произвел tcpdump
закончитесь в файл tcpdump-result.txt
Теперь, с помощью определенного знания таких инструментов как grep
и awk
, Я отфильтровываю желаемую информацию о .domain
:
$ awk '/.domain/ {gsub("my-host-name","****");print}' tcpdump-result.txt
01:49:48.811363 IP ****.local.29258 > 192.168.0.1.domain: 11608+ PTR? 69.0.168.192.in-addr.arpa. (43)
01:49:49.095361 IP ****.local.44184 > google-public-dns.domain: 9560+ A? google.com. (28)
01:49:49.139361 IP google-public-dns.domain > ****.local.44184: 9560 1/0/0 A 216.58.217.46 (44)
Как Вы видите, мой запрос переходит в 192.168.0.1, который является моим домашним маршрутизатором. Поэтому это означает использование сервера DNS, который Интернет-провайдер присвоил Вам.
Теперь, что, если мы изменяем DNS и делаем все это снова?
$ awk '/.domain/ {gsub("my-hostname","****");print}' tcpdump-result2.txt
02:05:35.885670 IP ****.local.51056 > resolver2.opendns.com.domain: 2511+ A? google.com. (28)
02:05:36.189665 IP ****.local.5503 > 192.168.0.1.domain: 63991+ PTR? 220.220.67.208.in-addr.arpa. (45)
02:05:36.237664 IP 192.168.0.1.domain > ****.local.5503: 63991 1/0/0 PTR resolver2.opendns.com. (80)
02:05:36.241664 IP ****.local.27776 > 192.168.0.1.domain: 58334+ PTR? 69.0.168.192.in-addr.arpa. (43)
Теперь мои запросы переходят к opendns! Но который IP конкретно?
ping resolver2.opendns.com
PING resolver2.opendns.com (208.67.220.220) 56(84) bytes of data.
64 bytes from resolver2.opendns.com (208.67.220.220): icmp_seq=1 ttl=57 time=59.9 ms
64 bytes from resolver2.opendns.com (208.67.220.220): icmp_seq=2 ttl=57 time=55.9 ms
^C
--- resolver2.opendns.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1003ms
rtt min/avg/max/mdev = 55.999/57.999/59.999/2.000 ms
Поскольку Вы видите, что это переходит в 208.67.220.220