Music for reading(spotify)

DNS over HTTPS logo

##TL;DR 쭉 내려가셔서 설치하기 부분부터 확인하세요.

서두

작년 초에 있었던 일이다. 국가가 DNS서버도 검열하기 시작한다는 말 이후로 일반 유저들 사이에서도 DNS를 변경하는 것이 추세가 되는 현상이 있었다. 하지만 DNS를 변경하는 것 만으로는 중간자 공격(Man-in-the-middle attack)에 취약해질 수 밖에 없는데, 이를 이용해서 목적지를 알아내는 것 또한 가능하다. 이에 따라 2018년 구글과 모질라 재단은 DNS over HTTPS(이하 DOH)라는 것을 제안하였다.

DOH는 도메인 쿼리도 암호화하여, 자신이 가고자 하는 곳의 목적지마저 ISP 등에게서 숨기는 기능이다. KT, LG, SK같은 서비스 제공자들도 이를 이용하면 목적지를 알 수 없기 때문에 요청을 중간에 드랍하거나 하지 못 한다.

더 자세한 내용은 DNS over HTTPS를 참조하는 게 좋다.

설치하기 및 설정하기.

설치 안내에 앞서 이 글은 Manjaro Linux Kernel 4.20을 대상으로 쓰여져 있으나, systemd를 사용하는 리눅스 운영체제는 크게 다르지 않을 것이라 본다. 저장소와 데몬 등록 명령어 등에 유의하면서 따라하면 되겠다. 윈도우 환경이나 MacOS 환경에서는 공식 설치 문서를 참조하여 설치한 후 따라 설정하면 되겠다.

저장소에서 설치하기.

특별한 이유가 없다면 빌드나 바이너리를 직접 받아 설치하는 것 보다 저장소를 이용하는 것이 편하다. 아치 리눅스의 경우 community에 존재하므로 간단히 설치할 수 있다.

sudo pacman -S dnscrypt-proxy

설정하기.

서비스를 통해 dnscrypt-proxy를 등록하자.

sudo systemctl enable --now dnscrypt-proxy.service

다음은 dnscrypt-proxy를 설정할 차례이다. 우리는 cloudflare의 DNS를 사용할 예정이다.

[EDITOR] /etc/dnscrypt-proxy/dnscrypt-proxy.toml

그리고 다음과 같은 부분을 찾아 다음과 같이 수정해준다.

server_names = ['cloudflare', 'cloudflare-ipv6']

이제 resolv가 이 클라이언트를 바라보게 해줘야한다.

[EDITOR] /etc/resolv.conf

내용을 다음과 같이 수정해준다.

nameserver 127.0.0.1
options edns0 single-request-reopen

설정이 완료되었으면 dnscrypt를 재시작해주자.

sudo systemctl restart dnscrypt-proxy.service

확인하기.

여기까지 마쳤으면 설정이 완료된 것이다. DNS Leak Test를 이용하여 본인의 DNS가 암호화되어 있는지 확인하자. cloudflare만 떠 있다면 제대로 작동하는 것이다. KT, LG, SK등이 떠 있다면 설정이 되지 않은 것이다.

트러블슈팅.

  1. 이미 53번 포트를 사용하고 있는지 확인. 당연하게도 53번 포트를 이용하여 DNS를 이용하기 때문에 이미 53번 포트를 이용하고 있다면 문제가 된다. 본 설정은 systemd-resolv가 해당 로컬 클라이언트를 쳐다보게 하였기 때문에 포트 문제는 발생하지 않을 것이라 생각하지만, 혹시 포트가 문제가 된다면 먼저 해결해야 한다.

마치며.

기존에는 Cloudflared라는 클라이언트를 이용하였으나, dnscrypt가 설정하기 더 편해보여 이쪽을 사용하기로 했다. 이 방법의 단점은 모든 머신에 대해 설정해줘야 한다는 점인데, OpenWRT 등을 이용하면 공유기 측에서 설정할 수 있어 편할 것이다. OpenWRT를 이용할 정도라면 사실 이 정도의 정보만 가지고 설정 가능한 실력을 가지고 있을 것이라 생각하기에 딱히 설명하지는 않겠다. 모두들 건강한 인터넷 생활이 되었으면 좋겠다.