host 명령이 / etc / hosts의 항목을 해석하지 않는 이유는 무엇입니까?


25

/etc/hosts우분투 12.04 시스템에 다음 파일이 있습니다.

127.0.0.1 localhost
10.248.27.66 ec2-50-112-220-110.us-west-2.compute.amazonaws.com puppetmaster

# 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
ff02::3 ip6-allhosts

그러나 puppetmastertelnet 명령이 수행하는 동안 host 명령이 이름을 올바르게 해석 하지 못합니다.

root@ip-10-248-34-162:/home/ubuntu# host puppetmaster
Host puppetmaster not found: 3(NXDOMAIN)

root@ip-10-248-34-162:/home/ubuntu# telnet puppetmaster 8140
Trying 10.248.27.66...
Connected to ec2-50-112-220-110.us-west-2.compute.amazonaws.com.
Escape character is '^]'.

host 명령이 / etc / hosts의 항목을 해석하지 않는 이유는 무엇입니까?

답변:


52

host프로그램은 libresolvDNS 쿼리를 직접 수행하는 데 사용 합니다 (예 :) gethostbyname.

대부분의 프로그램은 다른 호스트에 연결하려고 할 때 gethostbyname시스템 호출 또는 유사한 기능을 호출합니다. 이 기능은의 구성을 따릅니다 /etc/nsswitch.conf. 이 파일에는 Ubuntu 12.04에서 기본적으로 다음과 같은 줄이 있습니다.

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

/etc/hosts, 먼저을 사용한 다음 DNS 쿼리로 넘어갑니다.

이 방법으로 호스트 조회를 수행하려면을 사용하여 수행 할 수 있습니다 getent hosts. 예를 들면 다음과 같습니다.

$ getent hosts serverfault.com
198.252.206.16  serverfault.com

이게 도움이 되길 바란다.


2
고마워요 Kvisle, 그러나 나는 아직도 약간 혼란스러워합니다. 이 줄은 /etc/nsswitch.conf다음 hosts: files dns과 같이 보였지만 hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4두 경우 모두 /etc/hosts쿼리되지 않았으며 직접 dns 쿼리가 수행 된 것처럼 보입니다. 또는 /etc/hosts같은 명령을 사용할 때 먼저 쿼리를 받도록하려면 어떻게해야 합니까? dighost
user784637

4
당신은 할 수 없습니다. dig / host는 DNS를 직접 사용합니다. 호스트 파일을 먼저 확인하는 이름 조회를 수행해야하는 경우 다음을 사용 getent hosts하거나 다른 것을 사용해야 합니다.gethostbyname()
Kvisle

오, 알 겠어, 내 나쁜, 지금
알았어

1
나는 요즘 사용 하거나 쓸모가 없기 때문에 getent ahosts대신 사용해야한다고 생각합니다 . 내가 올바르게 이해했다면, 오래된 유닉스 C 프로그램이 얼마나 오래 작동했는지 모방하고 모뎀 프로그램이 작동하는 방식을 모방한다. getent hostsgetent hostsgethostbyaddr()gethostbyname*()getent hostsgetent ahosts
Mikko Rantalainen

그러나 / etc / hosts를 호스트 명령으로 사용하는 방법이 있습니까?
Kornel

10

host유틸리티는 독점적으로 DNS 조회 유틸리티 이기 때문 입니다.

대부분의 응용 프로그램은 라이브러리 호출 getaddrinfo또는을 사용합니다 gethostbyname. 이러한 라이브러리 /etc/nsswitch.conf는 조회 우선 순위 및 다른 조회를 수행하는 방법에 대한 정책을 결정하기 위해 호출 된 파일을 조사 합니다.

일반적으로 /etc/nsswitch.conf라인을 포함

hosts:        files dns

이것은 프로그램에 먼저 /etc/hostsDNS를 조사한 후 실패하면 DNS를 조사 하도록 지시합니다 .

호스트는 독점적으로 DNS 조회 /etc/hosts를 수행하므로 조회를 수행 하지 않습니다 .


3

당신은 그것을 찾을 수 dignslookup같은 방식으로 작동합니다 host.

그 이유는 이러한 모든 명령의 목적이 파일을 찾지 않고 DNS 조회를 수행하기 때문입니다.

대부분의 다른 프로그램은 운영 체제 이름 확인자를 사용하여 요청한 호스트 이름을 확인하는 방법을 결정합니다 /etc/nsswitch.conf(필요한 경우) /etc/resolv.conf. (이는 단순화이며 다른 옵션이 있습니다.) nsswitch.conf파일은 일반적으로 DNS가 아닌 로컬 파일보다 우선합니다.



-1

/etc/nsswitch.conf 파일을 확인하고 단어 "hosts"로 시작하는 줄을 찾으십니까? 이 줄에 "파일"이라는 단어가 있습니까? 그렇다면 "dns"라는 단어 앞이나 뒤에 있습니까?

일반적인 시스템에서이 줄은

hosts      files dns

존재하지 않거나 다른 순서로되어 있다면 문제 일 수 있습니다.


그것은 존재하고 다음과 같습니다hosts: files dns
user784637
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.