호스트 조회는 할 수 있지만 컬은 할 수없는 방법은 무엇입니까?


20

전에 본 사람 있나요? 이것은 google.com뿐만 아니라 내가 시도하는 모든 도메인에서 발생합니다. 무선 연결 (WEP)이지만 그 관련성이 확실하지 않습니다.

$ curl -v google.com
# This takes about 60s to return
* getaddrinfo(3) failed for google.com:80
* Couldn't resolve host 'google.com'
* Closing connection #0
curl: (6) Couldn't resolve host 'google.com'

$ wget google.com
--2011-11-28 14:44:08--  http://google.com/
Resolving google.com... failed: Name or service not known.
wget: unable to resolve host address `google.com'

$ ping google.com
PING google.com (209.85.148.147) 56(84) bytes of data.
64 bytes from fra07s07-in-f147.1e100.net (209.85.148.147): icmp_req=2 ttl=54 time=136 ms
64 bytes from fra07s07-in-f147.1e100.net (209.85.148.147): icmp_req=3 ttl=54 time=34.0 ms
64 bytes from fra07s07-in-f147.1e100.net (209.85.148.147): icmp_req=4 ttl=54 time=34.3 ms
64 bytes from fra07s07-in-f147.1e100.net (209.85.148.147): icmp_req=5 ttl=54 time=42.5 ms
64 bytes from fra07s07-in-f147.1e100.net (209.85.148.147): icmp_req=6 ttl=54 time=44.7 ms
64 bytes from fra07s07-in-f147.1e100.net (209.85.148.147): icmp_req=7 ttl=54 time=34.5 ms
^C
--- google.com ping statistics ---
8 packets transmitted, 6 received, 25% packet loss, time 7007ms
rtt min/avg/max/mdev = 34.063/54.376/136.026/36.758 ms


$ host google.com
google.com has address 209.85.148.106
google.com has address 209.85.148.147
google.com has address 209.85.148.99
google.com has address 209.85.148.103
google.com has address 209.85.148.104
google.com has address 209.85.148.105
google.com mail is handled by 30 alt2.aspmx.l.google.com.
google.com mail is handled by 40 alt3.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.
google.com mail is handled by 10 aspmx.l.google.com.
google.com mail is handled by 20 alt1.aspmx.l.google.com.

$ host google.com 192.168.1.201
Using domain server:
Name: 192.168.1.201
Address: 192.168.1.201#53
Aliases: 

google.com has address 209.85.148.103
google.com has address 209.85.148.104
google.com has address 209.85.148.105
google.com has address 209.85.148.106
google.com has address 209.85.148.147
google.com has address 209.85.148.99
google.com mail is handled by 40 alt3.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.
google.com mail is handled by 10 aspmx.l.google.com.
google.com mail is handled by 20 alt1.aspmx.l.google.com.
google.com mail is handled by 30 alt2.aspmx.l.google.com.

$ cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 192.168.1.201

$ cat /etc/hosts
127.0.0.1       localhost
::1             localhost

$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.1.254   0.0.0.0         UG        0 0          0 wlan0
127.0.0.0       127.0.0.1       255.0.0.0       UG        0 0          0 lo
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 wlan0

기본적으로 Firefox를 포함한 모든 응용 프로그램은 이름 조회를 수행 할 수 없습니다. 또한 Wi-Fi를 오프라인으로 전환하고 이더넷 케이블을 연결하면 모든 것이 정상입니다.


1
어쩌면 더 많은 정보를 추가하십시오-그것은 컬입니까? wget, 브라우저, 핑 등은 어떻습니까?
Sandman4

답변을 표시했지만 문제와 해결책은 정확히 무엇입니까? SELinux 문제입니까?
벨민 페르난데스

"솔루션"은 네트워크가 오른쪽으로 보이는 것처럼 보입니다. 랩톱에서 SELinux를 실행하지 않고 있으며 "네트워크"는 크 래피 상점에서 구입 한 Wi-Fi 라우터로 관리됩니다. 그 대답은 내가 여기저기서 패킷을 떨어 뜨리고 있다는 것을 알아내는 데 도움이되는 것이 었습니다. 왜 더 나은 아이디어가 있습니까?
다니엘 퀸

ping약간 다른 매개 변수와 함께 호출한다 getaddrinfo을 수행 github.com/iputils/iputils/blob/master/ping/ping.c#L574 ai_protocol = IPPROTO_UDP 혼란이 differnetly 어떻게 든 getaddrinfo는 어쩌면? host명령이 항상 사용 된 것은 아닌 것 같습니다 : unix.stackexchange.com/a/553438/8337
rogerdpack

답변:


8

아마도 매우 이상하고 제한적인 SELinux (또는 grsecurity ...) 규칙이 있습니까?

그렇지 않은 경우 출력 파일에서 발생하는 것을 찾아 strace -o /tmp/wtf -fF curl -v google.com보십시오 /tmp/wtf.


1
Wi-Fi 연결 자체 인 것 같습니다. 출력 파일은 다음과 같습니다 :9344 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout)
Daniel Quinn

@Daniel Quinn, 당신은 출력을 게시 할 수 /tmp/wtf있습니까?
Sachin Divekar

다음은 출력입니다 : pastebin.com/1y5Z48NK
다니엘 퀸

흠, 192.168.1.201에 대한 쿼리를하는 것처럼 보입니다. 건강을 위해 "host google.com 192.168.1.201"를 수행 할 수 있습니까? 기본적으로 DNS는 DNS 서버를 대상으로합니다.
cjc

완료 (질문에 추가) 그리고 그것은 잘 작동합니다-서버 인수없이 호스트를 발행하면 올바르게 작동합니다. ICMP (주로 첫 번째 핑을 떨어 뜨림)가 작동하기 때문에 실제 HTTP 호출 인 것처럼 보입니다.
Daniel Quinn


5

확인하십시오 /etc/nsswitch.conf. 는 IF hosts라인 같은 것을 말한다

hosts:      files dns

당신만큼 혼란 스러워요 그러나 만약 그것이

hosts:      files

그러면 DNS가 작동한다는 사실 ( host명령 출력 참조 )은 표준 OS 라이브러리를 통해 이름 확인을 수행하는 DNS를 사용하지 말라고 말한 컬을 도울 수 없습니다.


흠. 나는 그것을 생각하지 않았지만 방금 확인했는데 그것이 아니라고 생각 files dns합니다. :-(
Daniel Quinn

1
광산에는 호스트 라인에 더 많은 것들이있었습니다. "[NOTFOUND = return]"뒤에 "dns"가 표시되어 구성된 DNS 서버를 확인하기 전에 시스템을 찾을 수 없습니다! 알려지지 않은 사항 이전에 "dns"를 이동하면 시스템이 수정되었습니다 (재부트해야 함).
trebormf

3

호스트, nslookup이 확인, 컬을 해결하는 동일한 문제가 있었지만 동일한 호스트 이름을 사용할 수 없습니다.

tcpdumping 통신 후 curl이 내 라우터에서 닫힌 DNS 포트에 TCP (UDP 외에) 연결을 시도하는 것을 발견했습니다. TCP 포트 53이 활성화 된 후 curl이 완벽하게 작동하기 시작했습니다.

또 다른 이상한 점은 dns 서버가 일반 바인드 설치 인 경우이 문제가 발생하지 않는다는 것입니다. 라우터 DNS 서버에 내장을 사용하는 경우 curl은 이미 UDP 2ms 전에 (!) 응답을 받았더라도 갑자기 TCP 포트를 사용하려고 시도합니다. 나는 이것이 버그라고 생각합니다.


1

나는 오늘 내 VE (노트북에서 실행 중)에서 이와 동일한 문제를 겪었고 매우 놀라운 것을 알았습니다. 발굴 및 NSlookup이 작동하지만 컬이 실패합니다.

예를 들어 :

# curl -v google.com
* getaddrinfo(3) failed for google.com:80
* Couldn't resolve host 'google.com'
* Closing connection #0
curl: (6) Couldn't resolve host 'google.com'

그러나 David T의 게시물을 보았을 때 컬로 시도하기로 결정했습니다. 따라서 이것이 실패하는 동안 :

# curl  google.com -6
curl: (6) Couldn't resolve host 'google.com'

성공 :

# curl  google.com -4
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

-6은 curl이 IPv6을 사용하고 -4를 사용하여 IPv4를 사용하도록 지정합니다. wget을 사용할 때 동일한 오류가 발생하므로 호스트의 IPv6 스택에 문제가 있습니다.

nsswitch.conf 파일 및 기타 BIND conf 파일에 대한 다른 모든 수정 사항은이 유틸리티에 문제가 없기 때문에 도움이되지 않았습니다.


1

AWS EC2 인스턴스에 대해 DNS를 설정하려는 사람에게이 문제가 발생하면 해당 인스턴스가 사용하는 보안 그룹에서 HTTP 및 HTTPS에 대한 IPv6 규칙 (:: / 0)도 활성화해야합니다.


0

컬 설치가 원활 했습니까? 가능하면 curl을 다시 설치하십시오.

시도 curl -v google.com디버깅에 대한 더 자세한 출력을 얻을 수 있습니다.

예 :

curl -v dnserror.test
* getaddrinfo(3) failed for dnserror.test:80
* Couldn't resolve host 'dnserror.test'
* Closing connection #0
curl: (6) Couldn't resolve host 'dnserror.test'

비슷한 결과를 얻고 있습니까?


정확히 같은 :-( 나는 출력으로 질문을 업데이트했습니다.
Daniel Quinn

0

/etc/resolv.conf 파일에 nslookup이 허용하지만 curl이 허용하지 않는 오류가있을 수 있습니다.

질문은 "호스트 조회는 할 수 있지만 컬은 할 수없는 방법"이었습니다.

curl은 getaddrinfo ()를 사용하여 FQDN을 해결하지만 nslookup은 그렇지 않기 때문에 가능합니다. 대신, nslookup은 다른 함수 나 라이브러리를 사용하거나 자체 사용자 지정 코드를 통해 /etc/resolv.conf를 구문 분석한다고 생각합니다. 이를 확인하기 위해 소스 코드를 보지 않았지만 /etc/resolv.conf의 네임 서버 토큰 앞에 공백을 추가하여 증명할 수 있습니다. nslookup은이를 구문 분석 할 수 있지만 getaddrinfo ()는이를 수행 할 수 없습니다.


Example /etc/resolv.conf
 nameserver 8.8.8.8

resolv.conf에이 오류 또는 nslookup에서 허용하지만 getaddrinfo ()가 아닌 다른 오류가있는 경우 nslookup으로 FQDN을 해결할 수 있지만 해당 FQDN에서 curl을 사용할 수는 없습니다.

수정 : 루트로 /etc/resolv.conf를 편집하고 네임 서버 줄에서 선행 공백을 제거하십시오.


strace출력 나타낸다 DNS 쿼리가 응답을 수신하지 않고 전송된다. 이는 구문 분석 오류의 가설을 지원하지 않습니다 /etc/resolv.conf. 그러나 순환기에 결함이있을 수 있으며 다른 순환기를 사용하면 도움이 될 수 있습니다.
kasperd
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.