2014년 6월 18일 수요일

Unbound win32 버전으로 PC에 DNS 리졸버 만들기

unbound 는 DNS서버이긴 한데 캐시 모드만 동작 시키면 기존 ISP의 DNS서버를 지정하는 대신 자신의 PC에 DNS 로컬 리졸버를 설치할 수 있습니다. 즉 ISP에서 제공하는 DNS서버를 자신의 PC에 설치한다고 보면 됩니다.

1. 설치


http://unbound.net/download.html

에서 Win32 (32비트 버전 또는 64비트 버전)을 설치하면 됩니다. 설치시에 특별히 해 주어야 할 일은 없습니다. 저는 XP에서 해 보았지만 Vista 이후 버전에서도 문제 없을 겁니다.

2. 설정


C:\Program Files\Unbound 에 설치 되었다고 가정 하고, 다음과 같이 설정 합니다. DNS서버로 설정 하려면 더 복잡한 설정이 필요하겠지만 이건 캐시 용도로만 사용할 거니까요.

C:\Program Files\Unbound\service.conf :
server:
directory: "c:\Program Files\Unbound"
root-hints: "c:\Program Files\Unbound\root.hints"
interface: 127.0.0.1
access-control: 127.0.0.0/8 allow_snoop
verbosity: 1
hide-identity: yes
hide-version: yes
prefetch: yes
do-ip4: yes
do-ip6: no
do-udp: yes
do-tcp: no
private-address: 10.0.0.0/8
private-address: 172.16.0.0/12
private-address: 192.168.0.0/16
private-address: 127.0.0.1/8
logfile: "c:\unbound.log"


그리고 root 서버의 목록인 root.hints를 만들어야 합니다. 이 파일은 IANA에서 보급하는 네임서버용 root.hints를 사용하면 되므로, http://www.internic.net/domain/named.root 를 다운로드해서 C:\Program Files\Unbound\root.hints 로 저장하면 됩니다. 이 파일을 종종 업데이트되니 위 URL에서 최신 버전을 다운로드받아 쓰는게 제일 좋습니다.

C:\Program Files\Unbound\root.hints :
;       This file holds the information on root name servers needed to
;       initialize cache of Internet domain name servers
;       (e.g. reference this file in the "cache  .  "
;       configuration file of BIND domain name servers).
;
;       This file is made available by InterNIC 
;       under anonymous FTP as
;           file                /domain/named.cache
;           on server           FTP.INTERNIC.NET
;       -OR-                    RS.INTERNIC.NET
;
;       last update:    June 2, 2014
;       related version of root zone:   2014060201
;
; formerly NS.INTERNIC.NET
;
.                        3600000  IN  NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
A.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:BA3E::2:30
;
; FORMERLY NS1.ISI.EDU
;
.                        3600000      NS    B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.      3600000      A     192.228.79.201
B.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:84::B
;
; FORMERLY C.PSI.NET
;
.                        3600000      NS    C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12
C.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2::C
;
; FORMERLY TERP.UMD.EDU
;
.                        3600000      NS    D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.      3600000      A     199.7.91.13
D.ROOT-SERVERS.NET.  3600000      AAAA  2001:500:2D::D
;
; FORMERLY NS.NASA.GOV
;
.                        3600000      NS    E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
;
; FORMERLY NS.ISC.ORG
;
.                        3600000      NS    F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
F.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2F::F
;
; FORMERLY NS.NIC.DDN.MIL
;
.                        3600000      NS    G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
;
; FORMERLY AOS.ARL.ARMY.MIL
;
.                        3600000      NS    H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53
H.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:1::803F:235
;
; FORMERLY NIC.NORDU.NET
;
.                        3600000      NS    I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
I.ROOT-SERVERS.NET.      3600000      AAAA  2001:7FE::53
;
; OPERATED BY VERISIGN, INC.
;
.                        3600000      NS    J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.      3600000      A     192.58.128.30
J.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:C27::2:30
;
; OPERATED BY RIPE NCC
;
.                        3600000      NS    K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129
K.ROOT-SERVERS.NET.      3600000      AAAA  2001:7FD::1
;
; OPERATED BY ICANN
;
.                        3600000      NS    L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.      3600000      A     199.7.83.42
L.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:3::42
;
; OPERATED BY WIDE
;
.                        3600000      NS    M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33
M.ROOT-SERVERS.NET.      3600000      AAAA  2001:DC3::35
; End of File

2.1. 설정 확인


cmd 를 쓰면 쉽게 할 수 있습니다.

> cd c:\program files\unbound
> unbound-checkconf
unbound-checkconf: no errors in C:\Program Files\Unbound\service.conf

이렇게 나오면 문제 없습니다. 다른 오류가 나오면 설정 파일을 수정하시기 바랍니다.

2.2. 서비스로 실행


이미 서비스로 설치가 되어 있으니, cmd 또는 services.msc 에서 재시작만 해 주면 됩니다.

> net stop unbound
> net start unbound

2.3. DNS resolver 변경


이제 사용하는 PC 네트워크 장치의 DNS resolver 를 127.0.0.1 로 변경해 주세요.

동작 확인은 직접 브라우저를 띄워 보거나, nslookup 명령으로 해 볼 수 있습니다.

> nslookup daum.net
Server: localhost
Address: 127.0.0.1

Non-authoritative answer:
Name: daum.net
Addresses: 110.45.215.23, 114.108.157.19, 61.111.62.173, 114.108.157.50


3. 끝으로


굳이 ISP의 네임서버를 쓰면 되지 이게 왜 필요할까 하지만... ISP의 네임서버에 문제가 있을 경우 (오래전의 인터넷대란)라든가, ISP 네임서버의 정책을 우회하고 싶다거나 (접속이 안되는 사이트), DNS 기반으로 로드밸런싱을 하는 CDN 에게 자신의 위치를 더 정확하게 알려 주어서 인터넷 속도가 (주로 웹 브라우징이나 비디오이겠죠) 향상되는 효과를 거둘 수 있습니다. 기존에 이런 용도로 Google DNS (8.8.8.8)이나 OpenDNS를 쓰기도 하는데, 이런걸 자신의 PC에 설치한다고 생각하면 되겠죠. Google DNS나 OpenDNS가 edns-client-subnet extension을 지원해서 CDN의 로드밸런싱을 방해하는 일은 거의 없어졌지만, 아직 모든 DNS서버가 그걸 지원하는 것도 아니고 아무래도 자신의 PC에 DNS서버 (127.0.0.1 로만 뜨니까 외부에서 접속 염려는 없습니다)가 있다는 점에 안심하는 분들도 있겠죠.

이 글은 http://npr.me.uk/unbound.html의 내용을 많이 참고하고 있습니다 (설정 파일 등은 거의 그대로). 위 링크에 가시면 필터링 등의 추가 예제도 있으니 살펴 보세요.
댓글 쓰기