라즈베리 파이를 dnsmasq를 이용한 DNS 서버로 써야 할 3가지 이유

PCWorld
필자는 라즈베리 파이(Raspberry Pi)를 사랑한다. 이 조그만 35달러짜리 컴퓨터는 실용에서 취미에 이르기까지 쓰임새가 엄청 많다. 그렇다고는 해도 자가용 아마존 에코(Amazon Echo)를 직접 만들 사람은 현실적으로 별로 많지 않을 것이다. 1년 가까운 필자의 경험에 의하면 라즈베리 파이를 간단한 DNS 서버로 쓰면 아주 좋다.

DNS와 dnsmasq
원격 서버 대신 로컬 서버인 라즈베리 파이에서 DNS 요청을 하면 몇 가지 장점이 있다. 인터넷에서보다 근거리 통신망에서 데이터를 가져오는 속도가 더 빠를 수밖에 없기 때문이다.

DNS 작동 방식을 잘 모르는 사람은 DNS 속도 향상에 관한 PCWorld의 기사를 읽어보면 도움이 된다. 그래도 복잡하다고 느껴지면 귀여운 그림으로 DNS 작동 방식을 설명한 만화 시리즈를 봐도 좋다.

리눅스 프로그램 dnsmasq는DD-WRT와 같은 라우터 운영체제에서 찾아볼 수 있는 경량급 DNS 및 DHCP 서버다. 라즈베리 파이는 다른 라우팅 및 방화벽 기능에는 다소 힘이 부족할지 모르지만, 필자의 라즈베리 파이 2에서는 dnsmasq를 충분히 구동하고도 남는다는 것을 확인했다. 게다가 dnsmasq 구성 파일은 다른 DNS 서버에 비해 이해하기 훨씬 쉽다.

dnsmasq를 설치하려면 라즈베리 파이에 서버를 설치해야 되는데 그 자체가 일이다. dnsmasq 설치 방법은 아치 리눅스 위키(Arch Linux Wiki)에 잘 나와 있고 주요 구성 파일(/etc/dnsmasq.conf)은 문서화가 잘 되어 있다. 서버 설치 경험이 없는 사람에게는 우분투(Ubuntu) 구동을 권장한다.

1. DNS 검색 내용을 캐시에 저장해 로딩 시간을 줄일 수 있다
로컬 DNS 서버를 운영하면 DNS 검색 내용을 캐시(cache)에 저장해 두었다가 나중에 사용 가능하다는 것이 주요 장점 가운데 하나다. 기껏해야 도메인 IP 주소를 가져오는 입장에서는 별 것 아닌 것처럼 보일 수 있지만 작은 것도 쌓이면 커지게 마련이다.



웹 페이지 하나를 불러올 때 DNS 검색 횟수는 12번이 넘기도 한다. 일단 웹사이트 자체에 대한 DNS 검색이 필요하다. 요즘 웹 사이트들은 애니메이션에서부터 분석 자료 수집에 이르기까지 모든 것에 자바스크립트(Javascript) 플러그인으로 불러와야 한다. 각 서비스마다 자체적인 DNS 검색이 필요하다. 이미지나 동영상을 제공하기 위해 사용되는 콘텐츠 전송 네트워크(CDN) 또한 마찬가지이다. 거기다가 광고와 SNS 버튼 등 수없이 많다.

라즈베리 파이는 로컬 네트워크 상에 있기 때문에 이들 IP주소를 캐시에 저장하여 네트워크 지연시간을 단축시킬 수 있다. 물론 몇 분의 일 초에 불과하긴 하지만 바로 그 몇 분의 일초 때문에 광대역 인터넷 서비스에 가입하기도 한다.

2. LAN상의 컴퓨터로 도메인을 다시 보낼 수 있다
로컬 네트워크용 도메인을 1개 이상 설정하고 기기들은 자동으로 하위 도메인으로 지정 가능하다는 것이 dnsmasq의 매력 가운데 하나다. 예를 들어 “alexlaptop”이라는 노트북과 “campbell.home”이라는 네트워크가 있다고 할 때, ping alexlaptop.campbell.home을 입력하면 네크워크 상에 노트북을 핑(ping)할 수 있다.

dnsmasq로 다른 주소들을 미리 정의할 수도 있다. 이는 1대 이상의 컴퓨터에서 서비스를 운영 중일 때 유용하다. “media.campbell.home”을 엠비(Emby)나 플렉스(Plex)와 같은 미디어 서버를 운영 중인 컴퓨터의 IP주소를 가리키도록 정의하거나 “ftp.campbell.home”으로 로컬 FTP 서버를 가리키게 할 수도 있다.

컴퓨터 1대에 하나 이상의 서비스를 운영하려면 똑같은 컴퓨터에 여러 개의 도메인을 보내고 NGNIX를 리버스 프록시(reverse proxy)로 이용해 원하는 포트로 트래픽을 다시 보낼 수 있다.

3. 철저한 광고 차단이 가능하다
광고 차단 방법은 여러 가지가 있지만 그 중에서 하급은 로컬 컴퓨터 상의 호스트 파일(hosts file)을 통하는 것이다. PC에서 DNS 서버에 요청을 보내기에 앞서 IP 검색 시 가장 먼저 사용하는 것이 호스트 파일이다. 한 도메인(예: doubleclick.net)을 127.0.0.1라는 로컬 호스트로 정의해 두면 도메인 전체가 차단되므로 광고 차단에 효과적이다. 자체에 대한 광고 콘텐츠 검색을 시도하므로 불러오기가 실패하고 결국 웹 페이지 상에 빈 곳으로 나타나게 된다.

dnsmasq를 사용해서 광고 도메인 블랙리스트를 만들면, 구글 검색시 상위 3개와 같은 결과를 효과적으로 차단할 수 있다.

아주 좋은 방법이기는 하지만 일부 악성코드와 원치 않는 프로그램들이 호스트 파일을 재작성 해 버리면 효과가 없다. 다행히도 dnsmasq는 이러한 PC의 부담을 덜어준다.

dnsmasq는 여러 가지 방법을 통해 유사 호스트 파일 행동이 가능하다. 먼저 라즈베리 파이 자체의 호스트 파일을 사용할 수 있다. 아니면 사용자가 dnsmasq에게dnsmasq 구성 파일을 사용하라는 지시를 내릴 수 있다. 그러면 해당 근거리 통신망 전체에 적용되는 유사 호스트 파일 블랙리스트가 완성된다.

어느 쪽 길을 선택해도, 흔한 광고 네트워크의 도메인이 포함된 dnsmasq 구성 파일 또는 미리 만들어진 호스트 파일을 만날 수 있다.

그러나 이러한 철저한 차단 방식에는 주의점이 있다. 깨지지 말아야 할 것까지 깨지는 경우가 있기 때문이다. 구글 검색 시에 항상 그런 일이 발생한다.

구글 검색 결과 맨 상단에 나타나는 광고야말로 원하는 것(예: 찾고 있던 회사의 홈페이지)일 때가 있지만 “정상적인” 검색 결과 이전에 나타나는 광고를 클릭하면 링크는 깨져 버린다.
블랙리스트 방식을 이용하면 구글 검색뿐만 아니라 특정 웹 사이트의 일부 기능 사용에도 문제가 생긴다. 상당 수의 뉴스 웹사이트에서는 광고 트래픽이 있어야 계속 운영될 수 있기 때문에 광고를 다 차단해 버리면 도움을 주고 싶은 사이트에 도리어 피해를 줄 수 있다. 또한 집에 온 손님들이 무선 인터넷을 통한 웹 사이트 이용 시 불편을 겪을 수 있다.

dnsmasq DNS 서버 사용 시 사이트 블랙리스트를 잠시 해제하려면 PC에서 DNS 설정을 직접 수정해야 한다. VPN을 사용하여 로컬 DNS를 우회하는 방법도 있다. 단, 해당 VPN에서 자체적인 DNS 설정을 제공해야 한다.

결론
다른 것들도 마찬가지지만 로컬 서비스를 직접 운영하려면 스스로 기술 지원도 할 줄 알아야 한다. 서버로 사용 중인 라즈베리 파이의 전원이나 네트워크 연결이 갑자기 끊긴다면 해당 로컬 네트워크에 대한 웹 작동이 멈추게 된다. (직접 IP는 계속 작동된다). 이러한 이유 때문에 필자는 DHCP 구성에 백업 DNS 서버 IP(예: 구글은 8.8.8.8)를 두고 있다. 이렇게 하면 데스크톱과 같은 DHCP 클라이언트들은 데스크톱이 꺼지거나 DHCP 임대기간이 만료되지 않는 한 백업 DNS 서버에 의지할 수 있다.

또 한 가지 유의점은 보안이다. 라즈베리 파이를 가정용 LAN의 방화벽과 NAT 뒤에 안전하게 보관 가능하다 해도 최신 보안 패치로 계속 업데이트해야 한다. 쉽게 처리할 수 있는 간단한 작업이지만 유지 보수 차원에서 주기적으로 수행해야 한다.

유의해야 할 점은 다 설명했다. 명령줄을 자유자재로 사용 가능하고 로컬 네트워크를 좀 더 직접 제어하고 싶은 사람은 라즈베리 파이를 DNS 서버로 쓰는 방안을 검토해 보라. 혹시 실패하더라도 DHCP 및 DNS 제어는 언제든지 다시 라우터로 가능하기 때문이다. editor@itworld.co.kr