Technitium DNS를 docker로 올리기
내부망 DNS를 Technitium으로 세웠다. 공식 compose를 그대로 쓰면 되는데 두 가지가 걸렸다.
services:
dns-server:
container_name: dns-server
hostname: dns-server
image: technitium/dns-server:latest
network_mode: "host"
environment:
- DNS_SERVER_DOMAIN=dns01
- DNS_SERVER_WEB_SERVICE_ENABLE_HTTPS=true
- DNS_SERVER_WEB_SERVICE_USE_SELF_SIGNED_CERT=true
- DNS_SERVER_WEB_SERVICE_HTTP_TO_TLS_REDIRECT=true
- DNS_SERVER_RECURSION=AllowOnlyForPrivateNetworks
- DNS_SERVER_FORWARDERS=1.1.1.1, 1.0.0.1
volumes:
- ./config:/etc/dns
restart: unless-stopped
DHCP를 쓰려면 host 네트워크여야 한다
network_mode: "host" 로 두고 포트 매핑을 전부 지웠다. DHCP는 브로드캐스트로 오가는데, 브릿지 네트워크 안에 있으면 그 브로드캐스트가 컨테이너까지 닿지 않는다. 포트를 매핑해도 안 된다.
DNS만 쓸 거라면 브릿지에 두고 53번만 매핑해도 된다.
env로 되는 것과 안 되는 것
환경변수로 잡을 수 있는 건 초기 설정 일부뿐이다. zone이나 DNS record는 web GUI에서 만들어야 한다. env에 있는 것만 먼저 넣고 나머지는 GUI에서 하는 순서가 된다.
DNS_SERVER_RECURSION=AllowOnlyForPrivateNetworks 는 중요하다. 내부망에서 온 질의만 재귀 조회를 해준다. 열어두면 open resolver가 되어 DNS 증폭 공격에 쓰인다.
DNS_SERVER_FORWARDERS 는 직접 루트부터 훑지 않고 넘길 상위 서버다.
인증서는 self-signed로 뒀다. 내부에서만 접근하는 관리 화면이라 그걸로 충분하다.
cluster 이름이 서버 이름을 바꾼다
cluster를 만들 때 주의할 점이 하나 있다. cluster를 초기화하면 기존 DNS 서버의 도메인 이름이 cluster 도메인의 하위로 바뀐다.
예를 들어 현재 DNS Server Domain Name이
ns1.mydomain.tld이거나 그냥ns1이면, 새 이름은ns1.mycluster.tld가 된다.
이름이 바뀌면 그 이름을 참조하던 설정도 같이 손봐야 하므로, cluster 도메인 이름을 처음부터 정해두고 만드는 편이 낫다.