Openwrt: Stubby 를 활용한 DNS over TLS(DOT) 설정.

이거 때문에 왕삽질(꽃삽질 수준을 넘어선)을 하게되긴 했지만.. 그 덕에 또 지식이 늘었다고 위안 삼을 수 밖에. (openwrt 새 판을 설치했다가.. 이 문제를 알아채지 못하고 결국 초기화하는 무식한 짓까지 해버렸다..)


이 기능을 쓴다고 해서 현재 대한민국에서 접속이 막혀있는 사이트에 접근가능하게 되지는 않는다. 그건 또 다른 문제. 그를 위해선 Tor(느리다!)나 Green Tunnel 등을 사용해야한다.

DOT 는 그저, 내 자신이 털릴(?) 가능성을 줄여주는 용도라고 해야할까. Wikipedia 엔 이렇게 나와있다.

The goal of the method is to increase user privacy and security by preventing eavesdropping and manipulation of DNS data via man-in-the-middle attacks.

또한, 현재 DOT 를 Openwrt 에서 구현하는 방법은 두가지인데, Stubby 와 Unbound 중 하나를 선택할 수 있다. 이중 Stubby 를 선택했다. Stubby 는 현재 사용중인 Dnsmasq 와 공존하는 반면, Unbound 는 Dnsmasq 를 삭제해야만 하기에, 기존 설정을 다시 해야 하는 불편과 불안, 번거로움등이 있어 Stubby 를 택했다.
어떤게 더 좋은지는 당연히 모른다.

아무튼, 설정은 간단하다.


설치/설정

기기에 접속한 후, 먼저 Stubby 를 설치하고, 몇가지 설정을 추가한다.
uci 를 사용해서 뭔가 복잡한 작업을 하는 듯 한데, 그 결과는 단 세줄에 불과하다.

# 꾸러미 설치
opkg update
opkg install stubby
 
# DNS 암호화 설정
/etc/init.d/dnsmasq stop

uci set dhcp.@dnsmasq[0].noresolv="1"
uci -q delete dhcp.@dnsmasq[0].server
uci get stubby.global.listen_address \
| sed -e "s/\s/\n/g;s/@/#/g" \
| while read -r STUBBY_SERV
do uci add_list dhcp.@dnsmasq[0].server="${STUBBY_SERV}"
done
uci commit dhcp

/etc/init.d/dnsmasq start

uci 작업으로 추가된 내용은 /etc/config/dhcp 에 있다.

config dnsmasq
        .... 앞부분 생략
        option noresolv '1'
        list server '127.0.0.1#5453'
        list server '0::1#5453'

확인하는 방법도 여러가지라고 하는데, 결과값을 해석하는데 좀 어려움이 있으니(뭔 말인지 잘 모르겠다는!), 그냥 1.1.1.1/help 가 가장 무난한 듯.


Openwrt 판올림 후!

Stubby 를 설치한 상황이라면, Openwrt 를 판올림했을 때 살짝 문제가 있을 수 있다.
판올림한 뒤, 바로 Stubby 를 재설치/설정 해줘야 하는데, 그렇지 못했을 경우 공유기에 연결된 기기(Client)들에서 인터넷 연결이 되지 않는 현상이 나타난다. 엄밀하게 말해서 ‘인터넷’이 안되지는 않고, DNS 서비스가 불가능하다고 말해야 하지만.

다시 말해, IP 로 연결은 된다. 그러나 도메인 이름으로 연결은 불가능해진다.

아무튼, 판올림 후엔 곧바로 stubby 를 재설치 해줘야 원활한 인터넷 생활을 할 수 있다.

되돌리기(Uninstall)

되돌리려면, opkg 로 stubby 를 삭제하고, /etc/config/dhcp 에서 추가된 세 줄도 역시 삭제(또는 주석 처리)해준다.
마지막으로 /etc/config/stubby/etc/stubby(디렉토리) 도 지워주면 깔끔해진다.

opkg remove studdy --autoremove

# /etc/config/dhcp 는 편집

rm /etc/config/stubby
rm -rf /etc/stubby

Hostname 사용 불가?

연결된 클라이언트들에선 이상이 없지만, 정작 Openwrt 가 돌아가고 있는 기기에서는 호스트명으로 기기에 접근할 수가 없다.

예를 들어, nfsserver 라는 기기가 있고, 이 IP 가 192.168.0.5 라고 가정했을때, 클라이언트에서는 호스트명이나 IP 모두로 접근할 수 있지만, 공유기에서는 오로지 IP 로만 접근된다.
아마도 이유는 option noresolv '1' 때문인 듯 한데, 이걸 해결하는 방법은 못찾았다. 꼭 필요한 기능이 아니기도 하고..

임시방편으로, Openwrt 의 /etc/hosts 에 호스트명과 IP 를 넣어주면 해결되긴 하지만.. DNS 서버가 있는 상황에서 이런 방법을 택해야 한다니..? 뭔가 해법이 있을 듯도 한데..?

WAN port 53 막기?

Openwrt 설정에는, 53 포트를 막는게 좋다고 돼 있다.
어떻게 하는지 잘 몰라서 대충 이런 식으로 해보긴 했는데.. (/etc/config/firewall)

config rule
        option name 'Block 53'
        option target 'REJECT'
        option src 'lan'
        option dest 'wan'
        option dest_port '53'

잘 되는 건진 모르겠다.

Author: 아무도안

안녕하세요. 글 남겨주셔서 고맙습니다.