hosts 파일
컴퓨터가 도메인의 IP를 찾을 때 컴퓨터가 가장 먼저 조사하는 파일로, Linux에서 DNS보다 먼저 hostname을 IP로 찾아준다.
DNS 매핑 과정
IP 주소로 접속하기란 번잡하므로 사람이 외우기 쉬운 주소로 도메인을 사용한다.
tistory.com을 예로 들겠다. tistory.com을 입력했을 때 브라우저는 DNS 서버에 접속하여 tistory.com의 IP 주소를 찾는데, DNS 서버가 해당 IP를 알려주면 이에 접속해서 사이트를 띄운다.
이때, tistory.com을 입력했을 때 컴퓨터가 DNS 서버에 hosts 파일을 먼저 조사한 후 IP 주소를 찾는다. hosts 파일에서 해당 IP 주소를 찾는다면 DNS 서버는 더이상 그 도메인에 대해 묻지 않는다.
hosts 파일 구성
첫째 줄의 127.0.0.1은 서버 컴퓨터 자기 자신을 뜻하며 localhost로 지정되어 있다. localhost 외에 localhost.localdomain, localhost4, localhost4.localdomain4가 있는데 이들은 한 IP에 연결할 도메인을 띄어쓰기로 구분하여 연결해놓은 것이다.
두번째 줄의 ::1은 IPv6에서의 내 PC(localhost)를 가리킨다.
만약, hosts 파일을 수정했다면 네트워크 데몬을 재실행해야 한다.
$ /etc/init.d/networking restart
hosts 파일에 DNS 설정
1. hosts 파일을 vi로 열고 추가할 IP와 도메인명을 작성한다.
192.168.10.3 linux.dnsname.sand
2. ping으로 추가한 도메인명이 통신되는지 확인한다.
$ ping -c 4 linux.dnsname.sand
3. 웹에서 작동되는지 확인한다.
http://linux.dnsname.sand/
4. nslookup으로 확인한다.
$ nslookup linux.dnsname.sand
nslookup은 name server switch를 사용하지 않고 DNS만 사용하므로 'server can't find linux.dnsname.sand: NXDOMAIN'이라는 에러가 발생할 수 있다. 이땐 name server switch를 사용하는 ping, curl로 확인하면 된다.
cf) /etc/nsswitch.conf : DNS를 IP로 변환하는 gethostbyname 함수 등을 호출해서 nsswitch.conf 파일의 hosts 항목을 참고하여 설정한 순서대로 DNS 변환 작업을 수행한다.
$ cat /etc/nsswitch.conf | grep hosts
hosts: files dns
위와 같이 출력됐다면 files(hosts 파일)를 먼저 조사하고 없으면 dns를 거친다. hosts 파일에 '192.168.10.3 linux.dnsname.sand'로 설정돼있다면 linux.dnsname.sand에 연결했을 때 192.168.10.3로 접속된다.
hosts: dns files
다음과 같이 출력된다면 정상적으로 linux.dnsname.sand에 연결된다.