`/etc/hosts`와 DNS는 어떻게 함께 작동하여 호스트 이름을 IP 주소로 확인합니까?

`/etc/hosts`와 DNS는 어떻게 함께 작동하여 호스트 이름을 IP 주소로 확인합니까?

/etc/hostsLinux에서 DNS는 호스트 이름을 IP 주소로 확인하기 위해 어떻게 함께 작동합니까?

  1. 에서 호스트 이름을 확인할 수 있는 경우 호스트 이름이 확인된 후에 /etc/hostsDNS가 적용됩니까 , 아니면 확인된 IP 주소가 "호스트 이름"으로 처리되어 반복적으로 확인됩니까?/etc/hosts/etc/hosts
  2. 내 브라우저(firefox 및 google chrome)에 다음을 추가할 때 /etc/hosts:

    127.0.0.1 google.com www.google.com
    

    브라우저 주소 표시줄에 www.google.com을 입력하고 Enter를 누르면 해당 웹사이트에 연결할 수 없습니다. 해당 줄을 제거한 후 /etc/hosts웹 사이트에 연결할 수 있습니다. 이는 /etc/hosts호스트 이름을 확인하기 위해 DNS가 재정의된다는 의미입니까 ?

    라인을 다시 추가한 후에도 /etc/hosts페이지를 새로 고친 후에도 사이트에 계속 연결할 수 있습니다. 왜 /etc/hosts다시 적용되지 않아 웹사이트에 연결할 수 없나요?

감사해요.

답변1

이는 NSS(Name Service Switch) 구성(예: /etc/nsswitch.conf파일 지시문)에 의해 hosts결정 됩니다. 예를 들어 내 시스템에서는 다음과 같습니다.

hosts:    files mdns4_minimal [NOTFOUND=return] dns

여기서는 파일 과 DNS 시스템을 files의미합니다 . 당신이 상상할 수 있듯이/etc/hostsdns뭐든지 가장 먼저 온것.

또한 man 5 nsswitch.conf이에 대한 더 많은 아이디어를 보려면 참조하세요.


그런데 NSS 호스트 확인 순서를 따르려면 다음과 같이 데이터베이스 getent로 사용하세요.hosts

getent hosts example.com

답변2

마지막 질문에 답하려면 마지막 호스트 이름이 캐시되기 /etc/hosts때문에 즉시 다시 적용되지 않습니다 . 항상 다시 가져오려면 설정해야 합니다.firefoxgoogle.comnetwork.dnsCacheExpiration존재하다. 0​추가about:config 정보(약간 오래되었지만)여기. 주제에서 벗어난 내용이라면 죄송합니다.


참고로 많은 프로그램은 표준 파서( getaddrinfo(3), getnameinfo(3)[1]) 를 사용하지 않습니다.너무 끔찍해.

첫째, 인터페이스는 비동기적이지 않습니다. 어느 정도 복잡한 프로그램은 해당 작업을 수행하는 별도의 스레드를 생성한 다음 getaddrinfo()그것과 통신하기 위한 자체 프로토콜을 만들어야 합니다.getaddrinfo_a()신호끝나고 나니 상황이 더 심각해졌습니다.)

둘째, (리눅스의 표준 C 라이브러리)의 파서 구현은 glibc끔찍합니다. 임의의 동적 객체를 등 뒤의 주소 공간으로 끌어들이도록 허용 dlopen()하고 이를 어떤 방식으로든 포함하거나 정적으로 사용하는 것을 불가능하게 만듭니다. 연결된 실행 문서.

많은 프로그램이 표준 파서를 직접 사용하지 않기 때문에 그 동작을 정확하게 복제하지 않고 , 또는 /etc/resolv.conf의 일부 또는 전부를 무시합니다 ./etc/hosts/etc/nsswitch.conf/etc/gai.conf

gethostbyname()[1] 수년에 걸쳐 더 이상 사용되지 않는 재진입이 불가능한 ipv4 전용 버전은 말할 것도 없습니다 .

답변3

이 파일 /etc/hosts과 DNS는 함께 작동하지 않습니다. 독립적인 이름 확인(네트워크 이름)을 제공합니다.

그들을 연결하는 접착제는/etc/nsswitch.conf리눅스 시스템 내부. AIX 서버 의 경우 /etc/netsvc.conf시스템에서윈도우MacOS에서 사용할 수 있습니다 lookupd -configuration(LookupOrder 검색, 유사: ).Cache FF DNS NI DS

각 이름 확인 서비스는 다른 확인 수준을 볼 수 있고 종종 확인하기 때문에 실제 순서는 복잡해지고 복잡해지는 경우가 많습니다. dnsmasq경량 DNS 서버 (일반적으로 , 또는 (또는 둘 다)에 있음 )는 일반적으로 파일 내용을 읽고 포함합니다. 또는 어떤 경우에는 도트 이름의 DNS 확인( )을 직접 호출하는(비가 아닌 이름만 확인해야 하는 기본 확인자) 것과 같습니다.127.0.0.1:53::1:53/etc/hostssystemd.resolvermycomputermycomputer.here.dev.

일반적으로 서비스는 순서대로 호출되며 실패하지 않는 첫 번째 서비스가 승리하여 올바른 주소로 승인됩니다. 일반적인 기본 순서는 ( /etc/hosts파일), mDNS(점 없는 이름), DNS, NIS, NIS+, LDAP입니다. 일부 Linux 시스템에는 최종 솔루션이 있습니다.hostname서비스 중인 컴퓨터myhostname

예를 들어, 이 시스템에서는 ( 에서 cat /etc/nsswitch):

hosts:          files mdns4_minimal [NOTFOUND=return] dns myhostname

매우 오래된(glibc 2.4 및 이전 버전) order항목 에 유의하세요.설정하다/etc/host.conf처럼:

order hosts,bind,nis

/etc/hosts파일 이름 서비스 에만 적용됩니다 .

NIS 및 LDAP와 관련된 이(Linux) 클라이언트 시스템의 영향은 (일반적으로) 사용된 DNS 서버(바인딩, 바인딩 해제 등)에 의해 제어됩니다.

그래서:

  1. /etc/hosts에서 호스트 이름을 확인할 수 있는 경우 호스트 이름을 확인하기 위해 /etc/hosts 뒤에 DNS를 적용해야 합니까, 아니면 /etc/hosts에서 확인된 IP 주소를 "호스트 이름"으로 처리하여 반복적으로 확인해야 합니까?

전혀.

호스트 이름을 확인할 수 있는 경우 (파일이 DNS 앞에 있는 경우) 에는 적용 /etc/hosts되지 않습니다 .DNS

...도 아니다"호스트 이름"으로 처리되는 확인된 IP 주소입니다.

그것은 바로 해결된 주소입니다.

브라우저

브라우저는 이름을 확인하기 위해 모든 방법을 사용할 수 있습니다(확인된 이름의 캐시를 확인한 후). 위에 제공된 순서는 시스템 제공 방법을 사용하는 경우에만 적용됩니다. 다른 프로그램과 마찬가지로 브라우저는 모든 DNS 서버에 직접 연결하도록 선택할 수 있습니다.

시스템 순서가 /etc/hosts이전 인 경우 DNS이 파일의 항목이 DNS먼저 해결된다는 의미입니다.

그래서:

  1. ...이것은 호스트 이름을 확인하기 위해 /etc/hosts가 DNS를 무시한다는 의미입니까?

예(브라우저가 시스템 제공 해상도를 사용하는 경우)

/etc/hosts다시 적용되지 않아 웹사이트에 연결할 수 없나요?

해당 특정 이름에 대한 내부 브라우저 캐시가 지워진(또는 시간 초과된) 후에만 브라우저 외부에서 이름이 다시 검색됩니다.

브라우저는 캐시에서 이름을 확인하면 이를 다시 사용합니다.

캐시를 지우는 데 사용하세요.

아니면 브라우저를 닫고(잠시만 기다려주세요) 다시 시작하세요.

관련 정보