`/ etc / hosts`와 DNS는 어떻게 호스트 이름을 IP 주소로 해석합니까? 주소로 확인하기 위해

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

  1. 에서 호스트 이름을 확인할 수있는 경우 /etc/hostsDNS /etc/hosts
    가 호스트 이름을 확인한 후 적용 하거나 확인 된 IP 주소를
    /etc/hosts“호스트 이름”으로 처리하여 재귀 적으로 해결합니까?
  2. 내 브라우저 (firefox 및 Google 크롬)에서 /etc/hosts다음을 추가하면
    :

    127.0.0.1 google.com www.google.com
    

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

    에 줄을 다시 추가 한 /etc/hosts후에도 웹 페이지를 새로 고친 후에도 웹 사이트에 계속 연결할 수 있습니다. /etc/hosts웹 사이트에 연결할 수 없도록 다시 적용 되지 않는 이유는 무엇
    입니까?

감사.



답변

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

hosts:    files mdns4_minimal [NOTFOUND=return] dns

여기에, files받는 의미 /etc/hosts파일과 dns는 DNS 시스템을 말한다. 그리고 당신이 상상할 수 있듯이 어느 것이 먼저 이기는가 .

또한 man 5 nsswitch.conf이것에 대해 더 많은 아이디어를 얻으십시오.


NSS 호스트 확인 순서를 따르려면 다음 getenthosts같이 데이터베이스로 사용하십시오 .

getent hosts example.com


답변

마지막 질문에 대답하려면 마지막으로 얻은 호스트 이름을 캐싱 /etc/hosts하기 때문에 즉시 다시 적용되지 않습니다 . 항상 다시 가져 오려면 에서 로 설정 해야 합니다. 더 많은 정보 (약간 구식이지만) here . 이것이 주제가 아닌 경우 죄송합니다.firefoxgoogle.comnetwork.dnsCacheExpiration0about:config


(!) 참고로, 많은 프로그램은 표준 리졸버를 사용하지 않는 ( getaddrinfo(3), getnameinfo(3)[1]) 때문에 이 안됐다 .

먼저 인터페이스가 비동기 적이 지 않습니다. 중간 정도의 복잡한 프로그램은 그냥 수행하는 별도의 스레드를 생성 한 getaddrinfo()다음 자체 프로토콜을 발명하여 통신해야합니다 (그리고 완료되면 신호getaddrinfo_a()보내는 조차 입력하지 마십시오 . 심지어 더 나쁩니다).

둘째, glibc(리눅스의 표준 C 라이브러리)에서 리졸버 구현 은 끔찍합니다. 임의의 동적 객체를 등 dlopen()뒤를 통해 주소 공간으로 가져 와서 어떤 식 으로든 포함하거나 정적으로 사용할 수 없게합니다. 연결된 실행 파일

많은 프로그램이 직접 표준 리졸버를 사용하지 않기 때문에, 그들은 또한 정확하게 동작을 복제하는 데 방해, 일부 또는 전부 무시하지 않는 /etc/resolv.conf, /etc/hosts, /etc/nsswitch.conf또는 /etc/gai.conf.

[1] 그리고 재 진행되지 않은 ipv4-only는 언급하지 않았으며 gethostbyname(), 이는 오래 전부터 사용되지 않습니다.


답변

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

그들을 연결하는 접착제는 리눅스 시스템 내부 /etc/nsswitch.conf에 있습니다 . 에서 /etc/netsvc.confAIX 서버에 대한 시스템에서 윈도우 와는 나열 될 수있다 lookupd -configuration: (유사에 LookupOrder 검색, Cache FF DNS NI DS맥 OS 시스템에서).

각 이름 확인 서비스가 다른 수준의 확인을 조사 할 수 있기 때문에 실제 순서는 복잡해지고 일반적으로 복잡합니다. 마찬가지로 dnsmasq(일반적으로 가벼운 DNS 서버 127.0.0.1:53, 또는 ::1:53(또는 둘 다)) 일반적으로는 읽고 포함 /etc/hosts파일의 내용을. 또는 (와 같이 systemd.resolver점이없는 이름 만 확인해야하는 기본 확인자 )는 일부 조건에서 mycomputer점으로 구분 된 이름 ( mycomputer.here.dev.)에 대한 DNS 확인을 직접 호출 합니다.

일반적으로 서비스는 순서대로 호출되며 실패하지 않은 첫 번째 서비스가 우선하며 올바른 주소로 승인됩니다. 일반적인 기본 순서는 /etc/hosts(파일), mDNS (점으로 구분되지 않은 이름), DNS, NIS, NIS +, LDAP입니다. 일부 리눅스 시스템 에서는 서비스 의 컴퓨터 대한 최후의 해결책 이 있습니다 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와 관련된이 (리눅스) 클라이언트 컴퓨터에 미치는 영향은 일반적으로 사용되는 DNS 서버 (바인드, 언 바운드 등)에 의해 제어됩니다.

그래서:

  1. / etc / hosts에서 호스트 이름을 확인할 수있는 경우 DNS가 / etc / hosts 뒤에 적용되어 호스트 이름을 확인하거나 / etc / hosts의 확인 된 IP 주소를 “호스트 이름”으로 처리하여 재귀 적으로 해결합니까?

없음

호스트 이름이 해결 될 수있는 경우 /etc/hosts는가 DNS(파일이 DNS 이전 인 경우)에는 적용되지 않습니다.

해석 된 IP 주소도 “호스트 이름”으로 취급 되지 않습니다 .

해결 된 주소입니다.

브라우저

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

시스템 순서가 /etc/hosts이전 DNS인 경우 해당 파일의 항목이 DNS분석 서비스 보다 우선 함을 의미합니다 .

그래서:

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

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

/etc/hosts웹 사이트에 연결할 수 없도록 다시 적용 되지 않는 이유는 무엇 입니까?

해당 특정 이름에 대해 브라우저 내부 캐시가 지워지거나 시간 초과 될 때까지만 해당 이름이 브라우저 외부에서 다시 검색됩니다.

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

캐시를 지우려면 이것을 사용하십시오 .

또는 브라우저를 닫고 (잠깐 기다렸다가) 브라우저를 다시 시작하십시오.


답변