/etc/hosts
Linux에서 DNS는 호스트 이름을 IP 주소로 확인하기 위해 어떻게 함께 작동합니까?
- 에서 호스트 이름을 확인할 수 있는 경우 호스트 이름이 확인된 후에
/etc/hosts
DNS가 적용됩니까 , 아니면 확인된 IP 주소가 "호스트 이름"으로 처리되어 반복적으로 확인됩니까?/etc/hosts
/etc/hosts
내 브라우저(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/hosts
dns
뭐든지 가장 먼저 온것.
또한 man 5 nsswitch.conf
이에 대한 더 많은 아이디어를 보려면 참조하세요.
그런데 NSS 호스트 확인 순서를 따르려면 다음과 같이 데이터베이스 getent
로 사용하세요.hosts
getent hosts example.com
답변2
마지막 질문에 답하려면 마지막 호스트 이름이 캐시되기 /etc/hosts
때문에 즉시 다시 적용되지 않습니다 . 항상 다시 가져오려면 설정해야 합니다.firefox
google.com
network.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/hosts
systemd.resolver
mycomputer
mycomputer.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 서버(바인딩, 바인딩 해제 등)에 의해 제어됩니다.
그래서:
- /etc/hosts에서 호스트 이름을 확인할 수 있는 경우 호스트 이름을 확인하기 위해 /etc/hosts 뒤에 DNS를 적용해야 합니까, 아니면 /etc/hosts에서 확인된 IP 주소를 "호스트 이름"으로 처리하여 반복적으로 확인해야 합니까?
전혀.
호스트 이름을 확인할 수 있는 경우 (파일이 DNS 앞에 있는 경우) 에는 적용 /etc/hosts
되지 않습니다 .DNS
...도 아니다"호스트 이름"으로 처리되는 확인된 IP 주소입니다.
그것은 바로 해결된 주소입니다.
브라우저
브라우저는 이름을 확인하기 위해 모든 방법을 사용할 수 있습니다(확인된 이름의 캐시를 확인한 후). 위에 제공된 순서는 시스템 제공 방법을 사용하는 경우에만 적용됩니다. 다른 프로그램과 마찬가지로 브라우저는 모든 DNS 서버에 직접 연결하도록 선택할 수 있습니다.
시스템 순서가 /etc/hosts
이전 인 경우 DNS
이 파일의 항목이 DNS
먼저 해결된다는 의미입니다.
그래서:
- ...이것은 호스트 이름을 확인하기 위해 /etc/hosts가 DNS를 무시한다는 의미입니까?
예(브라우저가 시스템 제공 해상도를 사용하는 경우)
왜
/etc/hosts
다시 적용되지 않아 웹사이트에 연결할 수 없나요?
해당 특정 이름에 대한 내부 브라우저 캐시가 지워진(또는 시간 초과된) 후에만 브라우저 외부에서 이름이 다시 검색됩니다.
브라우저는 캐시에서 이름을 확인하면 이를 다시 사용합니다.
아니면 브라우저를 닫고(잠시만 기다려주세요) 다시 시작하세요.