이 설치 지침은 더 이상 동작하지 않습니다!
현재 시점에서, 이는 더이상 동작하지 않습니다. technitium dns 가 .NET Framework 를 더 이상 사용하지 않고 .net 5로 이동했기 때문입니다.
따라서, mono 를 이용한 설치 방법은 더 이상 유효하지 않으며, freebsd 12 에는 정식으로 포팅된 .net 5가 없기 때문에 동작하지 않습니다.
이를 해결하기 위해서는 .net 5를 freebsd12 에 빌드해야 하는데, 이것이 불가능하지는 않으나, 번거롭고 복잡해 장기적인 유지 보수의 측면에 있어 그다지 효율적이지 않다고 판단했습니다.
TrueNAS 위에서 VM 을 동작시킬 수 있습니다. (엔터프라이즈 어쩌고 하는데 무시하셔도 됩니다. TrueNAS Core 에서도 정상적으로 잘 돌아갑니다.) 알파인 리눅스 혹은 CentOS 등을 설치해 그 위에서 PiHole 또는 technitium dns 를 구동하는 방향으로 이동하는 것이 옳다고 생각합니다.
이 포스팅은 사용 방법 설명과 레거시를 위해 남겨둘 것입니다만, 설치 과정은 더 이상 동작하지 않습니다.
technitium dns 는 DNS 수준의 애드블록 입니다. 흔히 DNS 싱크홀이라 부르죠. WebUI 를 가지고 있어서 설정이 편리하고, 그래프로 현재 상태와 통계 자료를 보여 주기 때문에 관리하기도 쉽습니다. 광고 차단 뿐만 아니라, 특정 zone (도메인) 의 레코드를 직접 설정할 수도 있어서 로컬 네트워크에서 nas.lan 와 같은 도매인을 만들 수도 있고, 또한, dns-over-https 와 같은 dns 암호화 프로토콜을 지원하기 때문에 개인 정보 보호와 보안에도 좋습니다. 마지막으로, .net 기반이라서 freebsd 에서도 mono를 이용해 실행할 수 있습니다.
technitium dns 이 광고를 차단하는 원리는 이러합니다.
- 어떠한 사이트에 접속할 때, advertise.example.com 에서 광고를 보여 줍니다 .
- 이 때, technitium dns 를 주 DNS 로 사용할 경우, 클라이언트가 advertise.example.com 의 주소를 요청했을 때, 0.0.0.0 이라는 주소를 응답합니다.
- 그러면 클라이언트는 advertise.example.com 의 주소를 찾지 못한 셈이 됨으로, 광고를 받아 올 수가 없어서 광고가 차단됩니다.
Jail 만들기
jail 의 이름은 technitium_dns
네트워크 설정 잡아주시고 자동 시작 설정 해 주세요.
설치 과정
iocage console technitium_dns
감옥으로 들어가 줍니다.
레포 최신으로 변경
‘pkg 와 port – 레포 바꾸기‘ 를 참고하여 레포를 최신으로 바꿔 주세요.
Mono 설치
FreeBSD 에 mono 5.20 설치 를 따라 mono 를 설치해 주세요.
technitium dns 설치
mkdir -p /usr/local/technitiumdns
technitium dns 가 설치될 디렉토리를 만들었습니다.
fetch https://download.technitium.com/dns/DnsServerPortable.zip -o /tmp/technitiumdnsdns.zip
technitium dns 를 /tmp/technitiumdnsdns.zip 라는 이름으로 다운로드 받습니다. technitium dns 홈페이지 에서 다운로드 받으시려면 Windows (Standalone) 버전을 받으시면 됩니다.
unzip /tmp/technitiumdnsdns.zip -d /usr/local/technitiumdns
technitium dns 의 압축을 /usr/local/technitiumdns 아래에 풉니다.
rm /tmp/technitiumdnsdns.zip
다운로드 받은 압축 파일은 지워 줍니다.
시작 스크립트 만들기
mkdir -p /usr/local/etc/rc.d
rc.d 디렉토리를 만들고
vi /usr/local/etc/rc.d/technitiumdns
technitium dns 실행 스크립트를 만듭니다.
#!/bin/sh # # Author : Admion! # https://admion.net/ # # PROVIDE: technitiumdns # REQUIRE: DAEMON # KEYWORD: shutdown . /etc/rc.subr name=technitiumdns rcvar="${name}_enable" stop_precmd=${name}_stop_precmd stop_postcmd=${name}_stop_postcmd : ${technitiumdns_enable="NO"} load_rc_config $name pidfile="/usr/local/technitiumdns/dns.pid" procname="/usr/local/bin/mono" command="/usr/sbin/daemon" command_args="-f -p ${pidfile} ${procname} /usr/local/technitiumdns/DnsServerApp.exe" technitiumdns_stop_precmd() { if [ -r ${pidfile} ]; then export _DNSPID=$(check_pidfile ${pidfile} ${procname}) fi } technitiumdns_stop_postcmd() { _DNS_CHILDREN=$(pgrep -g ${_DNSPID}) if [ -n "${_DNS_CHILDREN}" ];then echo "Cleaning up leftover processes." kill -9 ${_DNS_CHILDREN} fi wait_for_pids ${_DNS_CHILDREN} } run_rc_command "$1"
저장하고 나온 다음
chmod 555 /usr/local/etc/rc.d/technitiumdns
스크립트를 실행 가능하게 만들어 줍니다.
technitium dns 실행
sysrc technitiumdns_enable="YES"
jail 시작시 자동 시작되도록 해 준 다음
service technitiumdns start
technitium dns 을 시작합니다.
technitium dns 의 web ui 는 http://jail.ip:5380 입니다.
technitium dns WebUI
아래는 필자가 굴리고 있는 technitium dns 의 WebUI를 캡쳐한 것입니다.
WebUI 참 깔쌈합니다.
Dashboard
대시보드는 현재 서버의 상태나 dns 쿼리의 통계 등을 보여줍니다. 통계의 경우 1년 단위까지 저장됩니다.
Zones
존은 도메인 이름 영역을 뜻합니다. 여기서 도메인을 추가할 수 있습니다.
예를 들어 lan 이라는 영역을 추가하고, nas 라는 도메인의 A 레코드가 192.168.1.1 을 가르키도록 추가하면 Technitium DNS 을 사용하는 클라이언트는 http://nas.lan 이라는 도메인으로 192.168.1.1 으로 접속할 수 있습니다.
Cache
캐시는 쿼리를 캐시한 것을 보여 주는 공간입니다. 현재 어떤 쿼리가 캐시되어 있는지 표시합니다.
Allowed Zone
특정 도메인을 허용하는 것입니다. 만약 어떠한 블랙리스트 목록에 의해 example.com 이 차단되었다면, Aloowed Zone 에 example.com 을 추가해 차단을 해제할 수 있습니다.
Blocked Zone
현재 차단되어 있는 도메인을 보여 주고, 차단할 도메인을 추가할 수 있습니다. 와일드카드 도메인도 지원하기 때문에 *.example.com 을 추가하게 되면 example.com과 그 서브 도메인이 모두 차단됩니다.
DNS Client
DNS 클라이언트에서는 dns 쿼리를 테스트 해 볼 수 있습니다. dig 명령을 WebUI로 할 수 있다고 생각하시면 됩니다.
Setting
이곳에서 technitium dns 의 설정을 할 수 있습니다.
DHCP
technitium dns 는 DHCP 서버의 역할을 할 수 있습니다.
Log
로그 파일의 목록을 확인하고 열어 볼 수 있습니다.
technitium dns 설정
Settings
Settings 탭으로 들어가 technitium dns 의 설정을 해 주도록 하겠습니다.
DNS Server Domain 은 이 technitium dns 의 이름을 의미합니다. 기본값은 Jail 의 이름 (Hostname) 입니다. 원하는 대로 설정해 주시면 됩니다.
Dns Server Local Adresses 는 어떤 주소를 청취할 지 설정하는 것입니다. 0.0.0.0 은 모든 주소를 청취하겠다는 의미입니다. DNS 서버로 쓰기 위해서는 기본값으로 두거나, Jail 의 IP 로 설정해 주시면 됩니다.
Web Service Port 는 WebUI 의 포트입니다.
Optional DNS Server Protocols 는 이 서버가 DOH 와 같은 프로토콜을 청취할지 설정하는 것입니다. 만약 technitium dns가 DoH 서버로 동작하길 원한다면 옵션을 활성화하고, 인증서를 입력하면 됩니다.
IPv6 Support 는 IPv6 지원입니다. IPv6를 사용하시려면 켜 주시면 됩니다.
Logging 에서 Log All Queries 를 선택하게 되면 쿼리가 로그 파일에 기록됩니다. 로그 파일의 크기가 커지게 됨으로 필요하지 않다면 꺼 두시는게 좋습니다.
Recursive Resolver 는 재귀를 허용할지 설정하는 것입니다. 기본값으로 두시면 됩니다.
Prefetch 섹션은 캐싱에 관한 것입니다. 값을 변경한 경우 테스트를 해 주시길 바랍니다.
Block List URLs 는 블랙리스트의 목록이 저장된 URL입니다. 필자의 경우는 아래 주소를 사용합니다.
https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts https://mirror1.malwaredomains.com/files/justdomains http://sysctl.org/cameleon/hosts https://zeustracker.abuse.ch/blocklist.php?download=domainblocklist https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt https://hosts-file.net/ad_servers.txt https://adaway.org/hosts.txt https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=0&mimetype=plaintext
Quick Add 를 눌러 미리 구성된 목록을 추가할 수도 있습니다.
Network Proxy 는 technitium dns 서버가 프록시를 사용할 경우 설정해 주시면 됩니다.
Forwarder 는 어떤 DNS 서버를 사용할지 설정하는 것입니다. 아래 Quick Select 를 이용해 빠르게 추가할 수 있습니다. 예를 들어, https://cloudflare-dns.com/dns-query 를 Forwarder 로 사용하고, Forwarder Protocol 은 DNS-over-HTTPS 로 설정하게 되면 Cloudflare DNS 와 DoH를 통해 통신하게 됩니다.
Quick Select 을 통해 미리 구성된 전달자를 추가할 수 있습니다.
여러 개의 전달자를 설정해 줄 수도 있습니다. https://cloudflare-dns.com/dns-query 와 https://dns.google/dns-query 를 추가해 주면, 둘 다 사용하게 됩니다.
Zone 설정
Blocked Zones
검색창에 검색하고자 하는 도메인을 입력한 후, Browse 을 누르면, 해당 도메인이 블락된 상태일 경우 검색 결과가 표시됩니다.
Block 을 누르게 되면 해당 도메인을 차단할 수 있습니다.
와일드카드 도메인을 지원함으로 *.example.com 을 입력하면 example.com 과 서브 도메인이 모두 차단됩니다.
필자는 아래 도메인을 차단하였습니다.
ads.moot.us *.widerplanet.com *.nrb.footprintdns.com *.keywordsconnect.com www.googleadservices.com ad.danawa.com naver-smr.smartmediarep.com *.trafficsan.com adc.naver.com adcreative.naver.com lcs.naver.com castbox.shopping.naver.com ams.rmcnmv.naver.com *.ad.naver.com ia.www.naver.com wrd.naver.com nv.veta.naver.com ad.news.naver.com *.googlesyndication.com tpc.googlesyndication.com analytics.ad.daum.net vads-api.ad.daum.net kyson.ad.daum.net smr.tvpot.daum.net g-plug.pstatic.net *.dreamsearch.or.kr adservice.google.co.kr click.clickmon.co.kr *.clickmon.co.kr realdmp.realclick.co.kr *.realclick.co.kr *.mapy.co.kr
일일히 하나씩 입력하셔야 합니다.
Allowed Zones
Blocked Zones 과 사용방법이 동일합니다. 이건 허용이라는 점만 다를 뿐이죠. 어떠한 블랙리스트 목록으로 인해 example.com 이라는 도메인이 차단되었다면 이곳에 입력하여 허용해 줄 수 있습니다. 당연히 와일드카드 도메인도 지원합니다.
Zones
도메인 이름 영역을 추가하고 관리할 수 있습니다.
Add Zone 을 눌러 영역을 추가할 수 있습니다.
직접 해보겠습니다. lan 을 추가합니다.
lan 이라는 영역이 추가되었습니다.
수정하고자 하는 영역의 Edit 을 누르면 레코드를 수정할 수 있습니다.
lan 영역을 수정하도록 하겠습니다.
Add Record 를 눌러 레코드를 추가할 수 있습니다. nas.lan 을 추가해 보도록 하겠습니다.
- Name 은 nas
- Type 은 A
- TTL 은 기본값 (3600) 으로 놔두고
- 값 (IPv4 Address) 에는 192.168.1.1 을 입력합니다.
그리고 Save 를 눌러 저장하면 nas라는 레코드가 등록됩니다.
technitium dns 을 이용하는 클라이언트는 nas.lan 이라는 도메인으로 192.168.1.1 에 접속할 수 있습니다.
←Back 버튼을 누르면 Zone 목록으로 돌아갑니다.
technitium dns 를 메인 DNS 로 설정
technitium dns 을 메인 DNS 로 쓰기 위해선 라우터 (공유기) 의 DHCP 서버 메뉴로 이동하여 주 DNS 와 보조 DNS 를 모두 technitium dns 의 주소로 설정해 줍니다.
아수스 라우터의 경우는 위와 같습니다.
주기적 재시작
vi /etc/crontab
맨 아래에 다음과 같이 입력합니다.
0 4 * * * root service technitiumdns restart
매일 새벽 4시에 technitium-dns 가 재시작 됩니다.
만약 jail 내부 cron 에 등록한 작업이 정상적으로 실행되지 않는다면, FreeNAS WebUI 의 cron 에
iocage exec technitium_dns service technitiumdns restart
명령을 등록해도 동일하게 작동합니다.
업데이트 하기
technitium dns 를 업데이트 하기 위해선 technitium dns 의 최신 버전을 받아와서 설치하면 됩니다.
service technitiumdns stop
technitium dns 서버를 중지하고
cp -r /usr/local/technitiumdns/config /tmp/
설정 파일을 백업하고
fetch https://download.technitium.com/dns/DnsServerPortable.zip -o /tmp/technitiumdnsdns.zip
최신 파일을 받은 다음
unzip /tmp/technitiumdnsdns.zip -o -d /usr/local/technitiumdns
압축을 풀어 줍니다.
service technitiumdns start
다시 서비스를 시작해 줍니다.
DNS 서버가 정상적으로 업데이트 되었다면 백업한 설정 파일과 다운로드 받은 파일을 삭제합니다.
rm -r /tmp/config/ /tmp/technitiumdnsdns.zip
마치면서
Technitium DNS 서버의 도움말 페이지가 있으니 한번 읽어 보시길 바랍니다.
https://technitium.com/dns/help.html
technitium dns 를 설치하고 설정하는 방법과 업데이트 하는 방법을 알아보았습니다. 또한, nas.lan 이라는 도메인이 FreeNAS 를 가리키도록 설정하였습니다.
다음 포스팅에서는 사설 인증서 발급 방법을 다룰 것입니다.