Profile picture

[Docker] Technitium DNS Server

JaehyoJJAng2024년 06월 10일

Technitium DNS


리눅스 서버에서 DNS를 구축할 때 bind9을 바이너리로 설치하여 사용하고는 했는데, 이번에 technitium/dns-server라는 오픈소스 기반 DNS 프로젝트를 찾게 되어 홈서버에 한번 도입해보려고 한다.

복잡한 설치 없이 간단하게 도커로만 구축이 가능하고, 웹 UI를 통해 DNS 설정도 가능하다보니 매우 편리하다.

앞으로 nginx proxy manager와 함께 유용하게 사용이 가능할 것 같다.



Technitium github 번역본

Technitium DNS 서버는 개인 정보 보호 및 보안을 위해 DNS 서버를 자체 호스팅하는 데 사용할 수 있는 신뢰할 수 있는 오픈 소스 재귀 DNS 서버입니다. 구성 없이 또는 최소한의 구성 없이 즉시 사용할 수 있으며 모든 최신 웹 브라우저를 사용하여 액세스할 수 있는 사용자 친화적인 웹 콘솔을 제공합니다.


도메인 이름 확인은 배후에서 자동으로 작동하고 이해하기 복잡하기 때문에 아무도 신경 쓰지 않습니다. 대부분의 컴퓨터 소프트웨어는 일반적으로 UDP 프로토콜을 사용하여 구성된 ISP의 DNS 서버를 쿼리하는 운영 체제의 DNS 확인자를 사용합니다. 이 방법은 대부분의 사람들에게 잘 작동하지만 웹 사이트에서 HTTPS 보안을 사용하는 경우에도 ISP는 사용자가 방문할 수 있는 웹 사이트를 보고 제어할 수 있습니다. 뿐만 아니라 일부 ISP는 Google DNS 또는 Cloudflare DNS와 같은 다른 DNS 공급자를 사용하는 경우에도 방문하는 웹 사이트에 콘텐츠를 리디렉션, 차단 또는 삽입할 수 있습니다. DNS-over-TLS, DNS-over-HTTPS 또는 DNS-over-QUIC 전달자를 사용하도록 Technitium DNS 서버를 구성하면 이러한 개인 정보 보호 및 보안 문제를 매우 효과적으로 완화할 수 있습니다.


홈 네트워크든 조직의 네트워크든 로컬에서 실행되는 DNS 서버가 있으면 네트워크에 대한 더 많은 통찰력을 얻을 수 있으며 DNS 로그 및 통계를 사용하여 네트워크를 더 잘 이해하는 데 도움이 됩니다. 대부분의 쿼리가 DNS 캐시에서 제공되므로 전반적인 성능이 향상되어 빈번한 DNS 확인을 기다릴 필요가 없으므로 웹 사이트를 더 빠르게 로드할 수 있습니다. 또한 네트워크에 대한 추가 제어 기능을 제공하여 네트워크 전체에서 도메인 이름을 차단하고 암호화된 DNS 프로토콜을 사용하여 DNS 트래픽을 안전하게 라우팅할 수 있습니다.


기능

  • Windows, Linux, macOS 및 Raspberry Pi에서 작동합니다.
  • Docker Hub에서 사용할 수 있는 Docker 이미지입니다.
  • 단 1분 만에 설치되며 별도의 구성으로 즉시 사용할 수 있습니다.
  • 하나 이상의 차단 목록 URL을 사용하여 광고 및 맬웨어를 차단합니다.
  • 상용 데스크톱 PC 하드웨어에서도 분당 수백만 개의 요청을 처리할 수 있는 비동기 IO 기반의 고성능 DNS 서버(기가비트 이더넷을 통해 초당 100,000개 이상의 요청으로 Intel i7-8700 CPU에서 부하 테스트됨).
  • 네트워크에서 DNS-over-TLS, DNS-over-HTTPS 및 DNS-over-QUIC DNS 서비스를 자체 호스팅합니다.
  • DNS-over-HTTPS 구현은 HTTP/1.1, HTTP/2 및 HTTP/3 전송 프로토콜을 지원합니다.
  • UDP 및 TCP 전송 모두에 대해 DNS over PROXY 프로토콜 버전 1 및 2를 지원합니다.
  • Cloudflare, Google, Quad9 및 AdGuard와 같은 공용 DNS 확인자를 DNS-over-TLS, DNS-over-HTTPS 또는 DNS-over-QUIC 프로토콜과 함께 전달자로 사용하세요.
  • serve stale, prefetching 및 auto prefetching과 같은 기능을 갖춘 고급 캐싱.
  • DNS 서버가 다시 시작될 때 캐시를 디스크에 저장하는 영구 캐싱 기능입니다.
  • DNS 리바인딩 보호 앱에서 사용할 수 있는 DNS 리바인딩 공격 보호 기능.
  • 신뢰할 수 있는 DNS 서버와 재귀 DNS 서버로서의 작업을 지원합니다.
  • NSEC 및 NSEC3를 지원하는 재귀 확인자, 전달자 및 조건부 전달자에 대한 RSA 및 ECDSA 알고리즘을 통한 DNSSEC 유효성 검사 지원.
  • 암호화된 DNS 프로토콜을 포함하여 지원되는 모든 DNS 전송 프로토콜에 대한 DNSSEC 지원.
  • DANE TLSA RFC 6698 레코드 유형 지원. 여기에는 PEM 형식의 인증서를 사용하여 해시 값을 자동으로 생성하는 지원이 포함됩니다.
  • SVCB 및 HTTPS draft-ietf-dnsop-svcb-https 레코드 유형 지원.
  • URI RFC 7553 레코드 유형 지원.
  • SSHFP RFC 4255 레코드 유형 지원.
  • 차단된 CNAME으로 확인되는 도메인 이름을 차단하는 CNAME 클로킹 기능.
  • 재귀 확인자 RFC 9156에서 QNAME 최소화 지원.
  • UDP 전송 프로토콜 draft-vixie-dnsext-dns0x20-00에 대한 QNAME 대/소문자 임의 설정 지원.
  • DNAME 레코드 RFC 6672 지원.
  • 영역 루트에서 CNAME과 같은 기능을 사용할 수 있도록 ANAME 독점 레코드 지원(CNAME 평면화). zone apex 및 sub 도메인 모두에서 여러 ANAME 레코드를 지원합니다.
  • 사용자 지정 DNS 앱이 DNS 요청을 직접 처리하고 모든 비즈니스 논리를 기반으로 사용자 지정 DNS 응답을 반환할 수 있도록 하는 APP 독점 레코드 지원.

DN- S 앱 기능을 사용하여 Split Horizon 및 지리적 위치 기반 응답과 같은 기능을 지원합니다.

  • 고급 차단 DNS 앱을 사용하여 서로 다른 클라이언트 IP 주소 또는 서브넷에 대해 서로 다른 차단 목록이 있는 REGEX 기반 차단 목록을 지원합니다.
  • 기본, 보조, 스텁 및 조건부 전달자 영역 지원.
  • NS 레코드를 사용하여 지정된 이름 서버를 통해 도메인 이름을 확인하도록 강제하기 위해 조건부 전달자 영역에 구현된 정적 스텁 영역 지원입니다.
  • Advanced Forwarding DNS App을 사용한 대량 조건부 전달 지원.
  • DNSSEC 서명 영역은 RSA 및 ECDSA 알고리즘을 통해 지원됩니다.
  • NSEC 및 NSEC3 모두에 대한 DNSSEC 지원.
  • AXFR 및 IXFR RFC 1995 및 DNS NOTIFY RFC 1996 지원을 통한 영역 전송.
  • TLS를 통한 영역 전송(XFR-over-TLS) RFC 9103 지원.
  • QUIC를 통한 영역 전송(XFR-over-QUIC) RFC 9250 지원.
  • 동적 DNS는 보안 정책으로 RFC 2136 지원을 업데이트합니다.
  • 영역 전송에 대한 TSIG(비밀 키 트랜잭션 인증) RFC 8945 지원.
  • EDNS(0) RFC6891 지원합니다.
  • 재귀 확인 및 전달을 위한 EDNS 클라이언트 서브넷(ECS) RFC 7871 지원.
  • 확장 DNS 오류 RFC 8914 지원.
  • DNS64 기능 RFC 6147은 DNS64 앱을 사용하는 IPv6 전용 클라이언트에서 사용할 수 있도록 지원합니다.
  • DNSBL/RBL 차단 목록 RFC 5782 호스팅을 지원합니다.
  • 만료되지 않는 API 토큰을 지원하는 다중 사용자 역할 기반 액세스Multi-user role based access with non-expiring API token support.
  • 자체 DNS 서버에서 도메인 이름을 자체 호스팅합니다.
  • 와일드카드 하위 도메인 지원.
  • 영역 및 레코드를 활성화/비활성화하여 쉽게 테스트할 수 있습니다.
  • 로컬 영역으로 응답을 가져오는 옵션이 있는 내장 DNS 클라이언트.
  • DNS-over-TCP 및 DNS-over-TLS 프로토콜 RFC 7766에 대한 비순차적 DNS 요청 처리를 지원합니다.
  • 여러 네트워크에서 작동할 수 있는 내장 DHCP 서버.
  • DNS 서버 코어에서 IPv6 지원.
  • Tor 네트워크를 통해 DNS를 라우팅하거나 Cloudflare의 숨겨진 DNS 확인자를 사용하도록 구성할 수 있는 HTTP 및 SOCKS5 프록시 지원.
  • 모든 웹 브라우저를 사용하여 쉽게 구성할 수 있는 웹 콘솔 포털입니다.
  • 제3자 앱이 DNS 서버를 제어하고 구성할 수 있도록 HTTP API가 내장되어 있습니다.
  • 기본 제공 시스템 로깅 및 쿼리 로깅Built-in system logging and query logging.
  • GitHub에서 호스트되는 오픈 소스 플랫폼 간 .NET 8 구현입니다.

설치


docker-compose.yaml 다운로드

curl -o docker-compose.yaml https://raw.githubusercontent.com/TechnitiumSoftware/DnsServer/master/docker-compose.yml

컨테이너 상태 출력

docker-compose ps

NAME         IMAGE                          COMMAND                   SERVICE      CREATED          STATUS          PORTS
dns-server   technitium/dns-server:latest   "/usr/bin/dotnet /op…"   dns-server   39 minutes ago   Up 31 minutes   80/tcp, 67/udp, 443/tcp, 443/udp, 0.0.0.0:53->53/tcp, :::53->53/tcp, 853/tcp, 8053/tcp, 0.0.0.0:5380->5380/tcp, 0.0.0.0:53->53/udp, :::5380->5380/tcp, :::53->53/udp, 853/udp, 53443/tcp

설정

정상적으로 컨테이너가 생성되었다면 http://<서버주소>:5380으로 접속해보도록 하자
image
처음 접속 시 패스워드를 지정하는 창이 하나 뜰 것이다. 본인의 경우 이미 지정했기에 위와 같은 로그인 창이 뜬다.


로그인을 하면 메인 페이지로 리다이렉트되고 여러 설정을 할 수 있는 탭이 존재한다.
image
테스트를 위해 arch-home.com 이라는 zone을 만들었고


아래와 같은 레코드가 지정되어 있다.
image


테스트를 위해 서버의 /etc/resolv.conf 파일에 dns 서버 주소를 추가해주자.

sudo sh -c 'echo "nameserver 192.168.219.113" >> /etc/resolv.conf'

그리고 서버를 재부팅하자.

sudo reboot

다시 서버에 접속하여 nslookup으로 도메인을 테스트해보면

nslookup technitium.arch-home.com

image
정상적으로 응답이 오는 것을 볼 수 있다.


Loading script...