потратил много времени на поиск проблемы, но не нашел ответа на него.
Учитывая: новая установка Ubuntu 16.04, что подразумевает, что IPv6 включен, а служба сетевого администратора использует dnsmasq для локального DNS кэширование.
Проблема в том, что для конкретных доменов утилиты командной строки не разрешают имя хоста.
$ curl -v https://deb.nodesource.com/
* Could not resolve host: deb.nodesource.com
* Closing connection 0
curl: (6) Could not resolve host: deb.nodesource.com
$ wget http://deb.nodesource.com/
--2017-04-10 15:23:34-- http://deb.nodesource.com/
Resolving deb.nodesource.com (deb.nodesource.com)... failed: Name or service not known.
wget: unable to resolve host address ‘deb.nodesource.com’
$ ssh deb.nodesource.com
ssh: Could not resolve hostname deb.nodesource.com: Name or service not known
Пока другие «общие» хосты работают хорошо.
$ curl http://www.google.com/
<HTML>...</HTML>
Также работает локальный DNS-кеш.
$ dig deb.nodesource.com
; <<>> DiG 9.10.3-P4-Ubuntu <<>> deb.nodesource.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55668
;; flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTHORITY: 13, ADDITIONAL: 12
<...>
;; ANSWER SECTION:
deb.nodesource.com. 101 IN CNAME d2buw04m05mirl.cloudfront.net.
d2buw04m05mirl.cloudfront.net. 59 IN A 54.192.98.17
<...>
;; Query time: 38 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Mon Apr 10 15:28:57 EEST 2017
;; MSG SIZE rcvd: 615
$ dig AAAA deb.nodesource.com
; <<>> DiG 9.10.3-P4-Ubuntu <<>> AAAA deb.nodesource.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52753
;; flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTHORITY: 13, ADDITIONAL: 12
<...>
;; ANSWER SECTION:
deb.nodesource.com. 300 IN CNAME d2buw04m05mirl.cloudfront.net.
d2buw04m05mirl.cloudfront.net. 60 IN AAAA 2600:9000:203b:9200:1f:6523:6040:93a1
<...>
;; Query time: 58 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Mon Apr 10 15:32:53 EEST 2017
;; MSG SIZE rcvd: 711
Запросы IPv6 также работают:
$ dig -6 deb.nodesource.com
; <<>> DiG 9.10.3-P4-Ubuntu <<>> -6 deb.nodesource.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5056
;; flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTHORITY: 13, ADDITIONAL: 12
<...>
;; ANSWER SECTION:
deb.nodesource.com. 290 IN CNAME d2buw04m05mirl.cloudfront.net.
d2buw04m05mirl.cloudfront.net. 60 IN A 54.192.229.174
<...>
;; Query time: 21 msec
;; SERVER: ::1#53(::1)
;; WHEN: Mon Apr 10 16:05:52 EEST 2017
;; MSG SIZE rcvd: 615
Фокус в том, что если я применяю IPv4 для curl или wget, тогда он выполняет трюк.
$ curl -4 http://deb.nodesource.com/
<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
$ wget -4 http://deb.nodesource.com/
--2017-04-10 15:40:28-- http://deb.nodesource.com/
Resolving deb.nodesource.com (deb.nodesource.com)... 54.192.98.73, 54.192.98.106, 54.192.98.122, ...
Connecting to deb.nodesource.com (deb.nodesource.com)|54.192.98.73|:80... connected.
<...>
2017-04-10 15:40:29 (175 KB/s) - ‘index.html.1’ saved [83983]
Как вы можете видеть, локальный кеш DNS поддерживает запросы IPv4 и IPv6 и возвращает правильные ответы. Но я не понимаю, что мешает всем этим утилитам командной строки разрешать хост, если система по умолчанию пытается работать на IPv6.
Некоторые предложения, которые я нашел до сих пор:
полностью отключить IPv6: как отключить IPv6 в Ubuntu 14.04? для отключения локального кэша DNS (dnsmasq) и добавления руководства nameserver 8.8.8.8: как отключить DNS, который использует Network Manager?Я был бы благодарен за любую помощь, как заставить эти функции работать вместе.
Спасибо!
Релевантные конфигурации и выходы:
$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 ubuntu-host
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
$ 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
$ cat /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile,ofono
dns=dnsmasq
[ifupdown]
managed=false
$ 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
gshadow: files
hosts: files mdns4_minimal [NOTFOUND=return] dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
$ sudo tcpdump port 53
# curl -4 request
15:55:27.161321 IP 192.168.2.101.54124 > 192.168.2.1.domain: 32338+ A? deb.nodesource.com. (36)
15:55:27.184442 IP 192.168.2.1.domain > 192.168.2.101.54124: 32338 9/13/5 CNAME d2buw04m05mirl.cloudfront.net., A 54.192.229.151, A 54.192.229.174, A 54.192.229.177, A 54.192.229.185, A 54.192.229.62, A 54.192.229.76, A 54.192.229.81, A 54.192.229.98 (508)
# curl -6 request
15:57:17.283919 IP 192.168.2.101.54124 > 192.168.2.1.domain: 63423+ A? deb.nodesource.com. (36)
15:57:17.283950 IP 192.168.2.101.54124 > 192.168.2.1.domain: 4140+ AAAA? deb.nodesource.com. (36)
15:57:17.323109 IP 192.168.2.1.domain > 192.168.2.101.54124: 4140| 9/12/0 CNAME d2buw04m05mirl.cloudfront.net., AAAA 2600:9000:203b:8400:1f:6523:6040:93a1, AAAA 2600:9000:203b:da00:1f:6523:6040:93a1, AAAA 2600:9000:203b:f400:1f:6523:6040:93a1, AAAA 2600:9000:203b:2400:1f:6523:6040:93a1, AAAA 2600:9000:203b:2a00:1f:6523:6040:93a1, AAAA 2600:9000:203b:4600:1f:6523:6040:93a1, AAAA 2600:9000:203b:6000:1f:6523:6040:93a1, AAAA 2600:9000:203b:7800:1f:6523:6040:93a1 (508)
15:57:17.323132 IP 192.168.2.1.domain > 192.168.2.101.54124: 63423 9/13/5 CNAME d2buw04m05mirl.cloudfront.net., A 54.192.229.151, A 54.192.229.174, A 54.192.229.177, A 54.192.229.185, A 54.192.229.62, A 54.192.229.76, A 54.192.229.81, A 54.192.229.98 (508)
15:57:17.323683 IP 192.168.2.101.58769 > 192.168.2.1.domain: Flags [S], seq 783238377, win 29200, options [mss 1460,sackOK,TS val 4431703 ecr 0,nop,wscale 7], length 0
15:57:17.325295 IP 192.168.2.1.domain > 192.168.2.101.58769: Flags [R.], seq 0, ack 783238378, win 0, length 0
15:57:17.325933 IP 192.168.2.101.60649 > 192.168.2.1.domain: Flags [S], seq 665587122, win 29200, options [mss 1460,sackOK,TS val 4431704 ecr 0,nop,wscale 7], length 0
15:57:17.331301 IP 192.168.2.1.domain > 192.168.2.101.60649: Flags [R.], seq 0, ack 665587123, win 0, length 0
15:57:17.331540 IP 192.168.2.101.54124 > 192.168.2.1.domain: 29050+ A? deb.nodesource.com. (36)
15:57:17.331578 IP 192.168.2.101.54124 > 192.168.2.1.domain: 5852+ AAAA? deb.nodesource.com. (36)
15:57:17.334915 IP 192.168.2.1.domain > 192.168.2.101.54124: 29050 9/13/5 CNAME d2buw04m05mirl.cloudfront.net., A 54.192.229.98, A 54.192.229.151, A 54.192.229.174, A 54.192.229.177, A 54.192.229.185, A 54.192.229.62, A 54.192.229.76, A 54.192.229.81 (508)
15:57:17.334969 IP 192.168.2.1.domain > 192.168.2.101.54124: 5852| 9/12/0 CNAME d2buw04m05mirl.cloudfront.net., AAAA 2600:9000:203b:7800:1f:6523:6040:93a1, AAAA 2600:9000:203b:8400:1f:6523:6040:93a1, AAAA 2600:9000:203b:da00:1f:6523:6040:93a1, AAAA 2600:9000:203b:f400:1f:6523:6040:93a1, AAAA 2600:9000:203b:2400:1f:6523:6040:93a1, AAAA 2600:9000:203b:2a00:1f:6523:6040:93a1, AAAA 2600:9000:203b:4600:1f:6523:6040:93a1, AAAA 2600:9000:203b:6000:1f:6523:6040:93a1 (508)
15:57:17.335550 IP 192.168.2.101.38257 > 192.168.2.1.domain: Flags [S], seq 2283847070, win 29200, options [mss 1460,sackOK,TS val 4431706 ecr 0,nop,wscale 7], length 0
15:57:17.336614 IP 192.168.2.1.domain > 192.168.2.101.38257: Flags [R.], seq 0, ack 2283847071, win 0, length 0
15:57:17.336763 IP 192.168.2.101.42479 > 192.168.2.1.domain: Flags [S], seq 3878661065, win 29200, options [mss 1460,sackOK,TS val 4431707 ecr 0,nop,wscale 7], length 0
15:57:17.337800 IP 192.168.2.1.domain > 192.168.2.101.42479: Flags [R.], seq 0, ack 3878661066, win 0, length 0
Наконец, найдена основная причина проблемы: это мой WiFi-маршрутизатор.
Несмотря на то, что dig работает нормально, по какой-то причине утилиты командной строки, которые используют getaddrinfo, не могут для анализа ответа DNS маршрутизатора (который в моем случае был проксирован dnsmasq).
Я указал dnsmasq на DNS-сервер моего ISP напрямую, и он работал нормально. По какой-то причине мой маршрутизатор повреждает DNS-ответы, полученные от восходящих серверов.
curl --> dnsmasq -X-> router --> ISP --> ... # NOK
curl --> dnsmasq --> ISP --> ... # OK
Наконец, найдена основная причина проблемы: это мой WiFi-маршрутизатор.
Несмотря на то, что dig работает нормально, по какой-то причине утилиты командной строки, которые используют getaddrinfo, не могут для анализа ответа DNS маршрутизатора (который в моем случае был проксирован dnsmasq).
Я указал dnsmasq на DNS-сервер моего ISP напрямую, и он работал нормально. По какой-то причине мой маршрутизатор повреждает DNS-ответы, полученные от восходящих серверов.
curl --> dnsmasq -X-> router --> ISP --> ... # NOK
curl --> dnsmasq --> ISP --> ... # OK
Наконец, найдена основная причина проблемы: это мой WiFi-маршрутизатор.
Несмотря на то, что dig работает нормально, по какой-то причине утилиты командной строки, которые используют getaddrinfo, не могут для анализа ответа DNS маршрутизатора (который в моем случае был проксирован dnsmasq).
Я указал dnsmasq на DNS-сервер моего ISP напрямую, и он работал нормально. По какой-то причине мой маршрутизатор повреждает DNS-ответы, полученные от восходящих серверов.
curl --> dnsmasq -X-> router --> ISP --> ... # NOK
curl --> dnsmasq --> ISP --> ... # OK
Наконец нашел причину проблемы: это мой WiFi роутер.
несмотря на то, что dig работает нормально, почему-утилит командной строки, которая используется getaddrinfo не смог разобрать ответа ДНС маршрутизатора (в моем случае была оценена dnsmasq).
я уже указывал [F5], чтобы DNS-сервер моего провайдера напрямую, и он работал нормально. Почему мой маршрутизатор тлетворного DNS-ответов, полученных от серверов.
curl --> dnsmasq -X-> router --> ISP --> ... # NOK
curl --> dnsmasq --> ISP --> ... # OK
Наконец, найдена основная причина проблемы: это мой WiFi-маршрутизатор.
Несмотря на то, что dig
работает нормально, по какой-то причине утилиты командной строки, которые используют getaddrinfo
, не могут для анализа DNS-ответа маршрутизатора (который в моем случае был проксирован dnsmasq
).
Я указал dnsmasq
на DNS-сервер моего ISP напрямую, и он работал нормально. По какой-то причине мой маршрутизатор повреждает ответы DNS, которые он получает от восходящих серверов.
curl --> dnsmasq -X-> router --> ISP --> ... # NOK
curl --> dnsmasq --> ISP --> ... # OK
Наконец, найдена основная причина проблемы: это мой WiFi-маршрутизатор.
Несмотря на то, что dig
работает нормально, по какой-то причине утилиты командной строки, которые используют getaddrinfo
, не могут для анализа DNS-ответа маршрутизатора (который в моем случае был проксирован dnsmasq
).
Я указал dnsmasq
на DNS-сервер моего ISP напрямую, и он работал нормально. По какой-то причине мой маршрутизатор повреждает ответы DNS, которые он получает от восходящих серверов.
curl --> dnsmasq -X-> router --> ISP --> ... # NOK
curl --> dnsmasq --> ISP --> ... # OK