LINUX.ORG.RU
решено ФорумAdmin

nslookup ресолвит хост, а ping - нет

 ,


0

1

Всем привет. Я пытался настроить локалхост (Ubuntu 14.10) на работу с одним из сервисов оркестрации, работающих по протоколу DNS (в моём случае это Consul на 10.241.232.14:8600). Для этого добавил в уже имеющийся dnsmasq дополнительную настройку, после чего перезапустил сервис:

$ cat /etc/dnsmasq.d/10-consul 
server=/service.search.km./10.241.232.14#8600

Пытаюсь подсоединиться к jenkins-deb-builder.service.search.km - это сервис, который ресолвится DNS'ом, установленным на Consul. В результате столкнулся с неожиданной ситуацией, когда dns работает:

$ host jenkins-deb-builder.service.search.km
jenkins-deb-builder.service.search.km is an alias for mailtest-4.dev.search.km.

$ nslookup jenkins-deb-builder.service.search.km
Server:		127.0.0.1
Address:	127.0.0.1#53

jenkins-deb-builder.service.search.km	canonical name = mailtest-4.dev.search.km.

$ dig @localhost jenkins-deb-builder.service.search.km

; <<>> DiG 9.9.5-4.3ubuntu0.2-Ubuntu <<>> @localhost jenkins-deb-builder.service.search.km
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32618
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;jenkins-deb-builder.service.search.km. IN A

;; ANSWER SECTION:
jenkins-deb-builder.service.search.km. 0 IN CNAME mailtest-4.dev.search.km.

;; Query time: 25 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Jun 23 19:49:45 MSK 2015
;; MSG SIZE  rcvd: 130

А пинг и вообще любые другие сетевые обращения - нет:

$ ping jenkins-deb-builder.service.search.km
ping: unknown host jenkins-deb-builder.service.search.km

$ curl http://jenkins-deb-builder.service.search.km:8082
curl: (6) Could not resolve host: jenkins-deb-builder.service.search.km

Ниже привожу свои конфиги (nsswitch немного исправлял, поскольку гугл указывал на возможные проблемы с avahi):

$ 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.0.1
search int.pv.km srv.pv.km dev.ix.km search.km ix.km srv.search.km

$ cat /etc/nsswitch.conf 
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

# hosts:          files mdns4_minimal [NOTFOUND=return] dns
hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Для пущей полноты картины - фрагмент трассировки пинга, где видно, что он почему-то пишет в дескриптор неполное имя хоста...

$ strace ping jenkins-deb-builder.service.consul 
...
stat("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=239, ...}) = 0
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
poll([{fd=3, events=POLLOUT}], 1, 0)    = 1 ([{fd=3, revents=POLLOUT}])
sendto(3, "\364\25\1\0\0\1\0\0\0\0\0\0\23jenkins-deb-builder"..., 52, MSG_NOSIGNAL, NULL, 0) = 52
poll([{fd=3, events=POLLIN}], 1, 5000)  = 1 ([{fd=3, revents=POLLIN}])
ioctl(3, FIONREAD, [127])               = 0
recvfrom(3, "\364\25\201\203\0\1\0\0\0\1\0\0\23jenkins-deb-builder"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 127
close(3)                                = 0
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
poll([{fd=3, events=POLLOUT}], 1, 0)    = 1 ([{fd=3, revents=POLLOUT}])
sendto(3, "\220P\1\0\0\1\0\0\0\0\0\0\23jenkins-deb-builder"..., 62, MSG_NOSIGNAL, NULL, 0) = 62
poll([{fd=3, events=POLLIN}], 1, 5000)  = 1 ([{fd=3, revents=POLLIN}])
ioctl(3, FIONREAD, [112])               = 0
recvfrom(3, "\220P\205\203\0\1\0\0\0\1\0\0\23jenkins-deb-builder"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 112
close(3)                                = 0
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
poll([{fd=3, events=POLLOUT}], 1, 0)    = 1 ([{fd=3, revents=POLLOUT}])
sendto(3, "\354\274\1\0\0\1\0\0\0\0\0\0\23jenkins-deb-builder"..., 62, MSG_NOSIGNAL, NULL, 0) = 62
poll([{fd=3, events=POLLIN}], 1, 5000)  = 1 ([{fd=3, revents=POLLIN}])
ioctl(3, FIONREAD, [118])               = 0
recvfrom(3, "\354\274\205\203\0\1\0\0\0\1\0\0\23jenkins-deb-builder"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 118
close(3)                                = 0
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
poll([{fd=3, events=POLLOUT}], 1, 0)    = 1 ([{fd=3, revents=POLLOUT}])
sendto(3, "\211\222\1\0\0\1\0\0\0\0\0\0\23jenkins-deb-builder"..., 62, MSG_NOSIGNAL, NULL, 0) = 62
poll([{fd=3, events=POLLIN}], 1, 5000)  = 1 ([{fd=3, revents=POLLIN}])
ioctl(3, FIONREAD, [112])               = 0
recvfrom(3, "\211\222\205\203\0\1\0\0\0\1\0\0\23jenkins-deb-builder"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 112
close(3)                                = 0
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
poll([{fd=3, events=POLLOUT}], 1, 0)    = 1 ([{fd=3, revents=POLLOUT}])
sendto(3, "\2077\1\0\0\1\0\0\0\0\0\0\23jenkins-deb-builder"..., 62, MSG_NOSIGNAL, NULL, 0) = 62
poll([{fd=3, events=POLLIN}], 1, 5000)  = 1 ([{fd=3, revents=POLLIN}])
ioctl(3, FIONREAD, [112])               = 0
recvfrom(3, "\2077\205\203\0\1\0\0\0\1\0\0\23jenkins-deb-builder"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 112
close(3)                                = 0
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
poll([{fd=3, events=POLLOUT}], 1, 0)    = 1 ([{fd=3, revents=POLLOUT}])
sendto(3, "\257b\1\0\0\1\0\0\0\0\0\0\23jenkins-deb-builder"..., 58, MSG_NOSIGNAL, NULL, 0) = 58
poll([{fd=3, events=POLLIN}], 1, 5000)  = 1 ([{fd=3, revents=POLLIN}])
ioctl(3, FIONREAD, [108])               = 0
recvfrom(3, "\257b\205\203\0\1\0\0\0\1\0\0\23jenkins-deb-builder"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 108
close(3)                                = 0
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
poll([{fd=3, events=POLLOUT}], 1, 0)    = 1 ([{fd=3, revents=POLLOUT}])
sendto(3, "L5\1\0\0\1\0\0\0\0\0\0\23jenkins-deb-builder"..., 66, MSG_NOSIGNAL, NULL, 0) = 66
poll([{fd=3, events=POLLIN}], 1, 5000)  = 1 ([{fd=3, revents=POLLIN}])
ioctl(3, FIONREAD, [116])               = 0
recvfrom(3, "L5\205\203\0\1\0\0\0\1\0\0\23jenkins-deb-builder"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 116
close(3)                                = 0
write(2, "ping: unknown host jenkins-deb-b"..., 54ping: unknown host jenkins-deb-builder.service.consul
) = 54
exit_group(2)                           = ?
+++ exited with 2 +++

Я не могу понять, как вообще устроен ping, как он ресолвит имена? Nscd на машине не установлен. Если кто может что подсказать, буду благодарен.

Ответ на: комментарий от t184256
$ ping mailtest-4.dev.search.km
PING mailtest-4.dev.search.km (10.241.232.14) 56(84) bytes of data.
64 bytes from mailtest-4.dev.search.km (10.241.232.14): icmp_seq=1 ttl=63 time=4.08 ms
vitalyisaev2 ()
Ответ на: комментарий от vitalyisaev2

Вопрос собственно в том почему, исходя из первого сообщения ни host, ни nslookup в итоге не отдают собственно адрес? Ответ dns'a явно не полный.

Ip0 ★★★★ ()
Последнее исправление: Ip0 (всего исправлений: 3)
Ответ на: комментарий от Ip0

Я тоже этого не понимаю. Вот попробовал посмотреть на трафик на 53 порту:

$ tcpdump port 53 -i lo

# ping jenkins-deb-builder.service.search.km
21:15:36.829938 IP localhost.34643 > localhost.domain: 20993+ A? jenkins-deb-builder.service.search.km. (55)
21:15:36.839746 IP localhost.domain > localhost.34643: 20993* 1/0/0 CNAME mailtest-4.dev.search.km. (130)


# ping jenkins-deb-builder
21:15:45.097989 IP localhost.56556 > localhost.domain: 17371+ A? jenkins-deb-builder.int.pv.km. (47)
21:15:45.098592 IP localhost.domain > localhost.56556: 17371 NXDomain* 0/1/0 (97)
21:15:45.098648 IP localhost.51222 > localhost.domain: 49017+ A? jenkins-deb-builder.srv.pv.km. (47)
21:15:45.098675 IP localhost.domain > localhost.51222: 49017 NXDomain 0/0/0 (47)
21:15:45.098721 IP localhost.50833 > localhost.domain: 26533+ A? jenkins-deb-builder.dev.ix.km. (47)
21:15:45.098764 IP localhost.domain > localhost.50833: 26533 NXDomain 0/0/0 (47)
21:15:45.098815 IP localhost.34005 > localhost.domain: 32607+ A? jenkins-deb-builder.search.km. (47)
21:15:45.098831 IP localhost.domain > localhost.34005: 32607 NXDomain 0/0/0 (47)
21:15:45.098853 IP localhost.33575 > localhost.domain: 32604+ A? jenkins-deb-builder.ix.km. (43)
21:15:45.098865 IP localhost.domain > localhost.33575: 32604 NXDomain 0/0/0 (43)
21:15:45.098886 IP localhost.38730 > localhost.domain: 26613+ A? jenkins-deb-builder.srv.search.km. (51)
21:15:45.098897 IP localhost.domain > localhost.38730: 26613 NXDomain 0/0/0 (51)
21:15:45.098916 IP localhost.45103 > localhost.domain: 30488+ A? jenkins-deb-builder. (37)
21:15:45.225236 IP localhost.domain > localhost.45103: 30488 NXDomain 0/1/0 (112)


# ping mailtest-4.dev.search.km
21:15:23.294183 IP localhost.57178 > localhost.domain: 57693+ A? mailtest-4.dev.search.km. (42)
21:15:23.294335 IP localhost.domain > localhost.57178: 57693 1/0/0 A 10.241.232.14 (58)
21:15:23.298946 IP localhost.58821 > localhost.domain: 4419+ PTR? 14.232.241.10.in-addr.arpa. (44)
21:15:23.299075 IP localhost.domain > localhost.58821: 4419 1/0/0 PTR mailtest-4.dev.search.km. (82)
21:15:24.161550 IP localhost.49713 > localhost.domain: 28617+ PTR? 1.0.0.127.in-addr.arpa. (40)
21:15:24.161620 IP localhost.domain > localhost.49713: 28617* 1/0/0 PTR localhost. (63)

# ping www.yandex.ru
21:16:02.449454 IP localhost.54410 > localhost.domain: 46182+ A? www.yandex.ru. (31)
21:16:02.453285 IP localhost.domain > localhost.54410: 46182 3/2/4 A 213.180.193.3, A 213.180.204.3, A 93.158.134.3 (203)
21:16:02.455740 IP localhost.37068 > localhost.domain: 17732+ PTR? 3.193.180.213.in-addr.arpa. (44)
21:16:02.460642 IP localhost.domain > localhost.37068: 17732 1/2/4 PTR www.yandex.ru. (195)


vitalyisaev2 ()

как вообще устроен ping, как он ресолвит имена?

Просто вызывает библиотечную функцию gethostbyname(), а уж та обрабатывает /etc/nsswitch и т.д. Но, рекурсивный запрос она не делает, ЕМНИП, поэтому dnsmasq должен в ответ выдвавать не просто CNAME, а ещё и A-запись.

;; ANSWER SECTION:
jenkins-deb-builder.service.search.km. 0 IN CNAME mailtest-4.dev.search.km.

Здесь вот мне не понятен 0, это же TTL. Как по этому может делаться следующий запрос, если запись в кеше не должна жить?

Попробуйте bind, может он будет делать два запроса к серверу, а клиенту выдавать один ответ.

mky ★★★★★ ()
Ответ на: комментарий от steemandlinux
$ dig jenkins-deb-builder.service.search.km A

; <<>> DiG 9.9.5-4.3ubuntu0.2-Ubuntu <<>> jenkins-deb-builder.service.search.km A
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5154
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;jenkins-deb-builder.service.search.km. IN A

;; ANSWER SECTION:
jenkins-deb-builder.service.search.km. 0 IN CNAME mailtest-4.dev.search.km.

;; Query time: 8 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Jun 24 12:02:02 MSK 2015
;; MSG SIZE  rcvd: 130
$ dig jenkins-deb-builder.service.search.km CNAME

; <<>> DiG 9.9.5-4.3ubuntu0.2-Ubuntu <<>> jenkins-deb-builder.service.search.km CNAME
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47365
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;jenkins-deb-builder.service.search.km. IN CNAME

;; ANSWER SECTION:
jenkins-deb-builder.service.search.km. 0 IN CNAME mailtest-4.dev.search.km.

;; Query time: 8 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Jun 24 12:02:12 MSK 2015
;; MSG SIZE  rcvd: 130
$ dig jenkins-deb-builder.service.search.km SOA

; <<>> DiG 9.9.5-4.3ubuntu0.2-Ubuntu <<>> jenkins-deb-builder.service.search.km SOA
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7745
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;jenkins-deb-builder.service.search.km. IN SOA

;; AUTHORITY SECTION:
search.km.		0	IN	SOA	ns.search.km. postmaster.search.km. 1435136635 3600 600 86400 0

;; Query time: 5 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Jun 24 12:02:18 MSK 2015
;; MSG SIZE  rcvd: 132
 
vitalyisaev2 ()

Всё, всем спасибо, разобрались - неправильно запускали Consul и вспомогательные сервисы, теперь возращает так:

$ dig jenkins-deb-builder.service.consul

; <<>> DiG 9.9.5-4.3ubuntu0.2-Ubuntu <<>> jenkins-deb-builder.service.consul
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21160
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;jenkins-deb-builder.service.consul. IN	A

;; ANSWER SECTION:
jenkins-deb-builder.service.consul. 0 IN A	10.241.232.14

;; Query time: 5 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Jun 24 12:22:35 MSK 2015
;; MSG SIZE  rcvd: 102
vitalyisaev2 ()
17 ноября 2016 г.
18 марта 2017 г.
Ответ на: А можно резюме? от whatsupguys

Прошу прощения, давно сюда не заходил, уже забыл, в чём суть проблемы. Кажется, консул собрался в кластер, но ему чего-то не хватило в конфиге: там есть ряд неочевидных настроек, и по этой причине всё «как бы» работало, но DNS не было.

vitalyisaev2 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.