Hướng dẫn cài đặt và cấu hình Technitium DNS Server trên docker

  • Người khởi tạo Người khởi tạo anhptt
  • Ngày bắt đầu Ngày bắt đầu
Chào anh em, nếu anh em đang tìm kiếm một giải pháp DNS Server tự lưu trữ (Self-host) để chặn quảng cáo, bảo mật mạng gia đình/công ty thì Technitium DNS Server là một trong những ứng cử viên sáng giá nhất hiện nay. Nó không chỉ chặn quảng cáo cực tốt (giống Pi-Hole/AdGuard Home) mà còn hỗ trợ mạnh mẽ các giao thức mã hóa DNS hiện đại nhất (DoH, DoT, DoQ) và tích hợp sẵn DHCP Server.
Bài viết này mình sẽ hướng dẫn anh em triển khai Technitium qua Docker bằng file docker-compose.yml đầy đủ nhất từ chính chủ, đồng thời giải thích cặn kẽ các thông số để anh em tùy biến theo nhu cầu.
1787624897388.png
1. Chuẩn bị hệ thống

  • []Máy chủ (VPS / NAS / Mini PC / Raspberry Pi) đã cài đặt sẵn Docker và Docker Compose.[]Xử lý xung đột cổng 53: Trên Linux (đặc biệt Ubuntu), cổng 53 thường bị dịch vụ mạng của hệ điều hành chiếm dụng. Anh em cần tắt nó đi bằng các lệnh sau:
Bash:
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
sudo rm /etc/resolv.conf
echo "nameserver 1.1.1.1" | sudo tee /etc/resolv.conf
2. Cấu hình Docker Compose chuyên sâu
Tạo một thư mục làm việc và tạo file docker-compose.yml:
Bash:
mkdir -p /opt/technitium-dns
cd /opt/technitium-dns
nano docker-compose.yml
Copy toàn bộ nội dung dưới đây dán vào. Mặc định mình giữ nguyên các dòng comment (#) của nhà phát triển, anh em cần dùng tính năng nào thì xóa dấu # ở đầu dòng đó đi.
YAML:
services:
dns-server:
container_name: dns-server
hostname: dns-server
image: docker.io/technitium/dns-server:latest
# Nếu muốn dùng tính năng DHCP, hãy bỏ comment dòng dưới đây (dùng mạng host) và comment (thêm #) vào TẤT CẢ phần "ports:" và "sysctls:"
# network_mode: "host"
ports:
- "5380:5380/tcp" # Giao diện Web console (HTTP)
# - "53443:53443/tcp" # Giao diện Web console (HTTPS)
- "53:53/udp" # Dịch vụ DNS chuẩn
- "53:53/tcp" # Dịch vụ DNS chuẩn
# - "853:853/udp" # Dịch vụ DNS-over-QUIC
# - "853:853/tcp" # Dịch vụ DNS-over-TLS
# - "443:443/udp" # Dịch vụ DNS-over-HTTPS (HTTP/3)
# - "443:443/tcp" # Dịch vụ DNS-over-HTTPS (HTTP/1.1, HTTP/2)
# - "80:80/tcp" # DNS-over-HTTP (Dùng khi chạy qua Nginx Proxy hoặc tự gia hạn chứng chỉ Certbot)
# - "8053:8053/tcp" # DNS-over-HTTP (Dùng khi chạy qua Reverse Proxy)
# - "67:67/udp" # Dịch vụ DHCP
environment:
- DNS_SERVER_DOMAIN=dns-server # Tên miền định danh của DNS Server
# - DNS_SERVER_ADMIN_PASSWORD=password # Đặt sẵn mật khẩu cho Admin Web UI
# - DNS_SERVER_ADMIN_PASSWORD_FILE=password.txt # Đọc mật khẩu admin từ file text (Bảo mật hơn)
# - DNS_SERVER_PREFER_IPV6=false # Bật true nếu muốn ưu tiên truy vấn IPv6
# - DNS_SERVER_WEB_SERVICE_LOCAL_ADDRESSES=172.17.0.1,127.0.0.1 # Chỉ cho phép truy cập Web UI từ các IP nhất định (Chỉ dùng khi network_mode: "host")
# - DNS_SERVER_WEB_SERVICE_HTTP_PORT=5380 # Đổi cổng HTTP mặc định
# - DNS_SERVER_WEB_SERVICE_HTTPS_PORT=53443 # Đổi cổng HTTPS mặc định
# - DNS_SERVER_WEB_SERVICE_ENABLE_HTTPS=false # Bật HTTPS cho giao diện Web
# - DNS_SERVER_WEB_SERVICE_USE_SELF_SIGNED_CERT=false # Dùng chứng chỉ SSL tự ký
# - DNS_SERVER_WEB_SERVICE_TLS_CERTIFICATE_PATH=/etc/dns/tls/cert.pfx # Đường dẫn file SSL
# - DNS_SERVER_WEB_SERVICE_TLS_CERTIFICATE_PASSWORD=password # Mật khẩu của file SSL
# - DNS_SERVER_WEB_SERVICE_HTTP_TO_TLS_REDIRECT=false # Tự động chuyển hướng HTTP sang HTTPS
# - DNS_SERVER_OPTIONAL_PROTOCOL_DNS_OVER_HTTP=false # Bật port 8053 để kết hợp với Nginx Proxy
# - DNS_SERVER_RECURSION=AllowOnlyForPrivateNetworks # Tùy chọn quyền phân giải đệ quy: Allow, Deny, AllowOnlyForPrivateNetworks, UseSpecifiedNetworkACL
# - DNS_SERVER_RECURSION_NETWORK_ACL=192.168.10.0/24, !192.168.10.2 # Giới hạn IP/Subnet được phép dùng DNS (thêm ! để chặn). Cần set Recursion = UseSpecifiedNetworkACL.
# - DNS_SERVER_ENABLE_BLOCKING=false # Tự động bật tính năng chặn tên miền/quảng cáo
# - DNS_SERVER_ALLOW_TXT_BLOCKING_REPORT=false # Trả về báo cáo chặn qua bản ghi TXT
# - DNS_SERVER_BLOCK_LIST_URLS= # Khai báo sẵn các link Blocklist (ngăn cách bằng dấu phẩy)
# - DNS_SERVER_FORWARDERS=1.1.1.1, 8.8.8.8 # Khai báo sẵn máy chủ chuyển tiếp (Forwarder)
# - DNS_SERVER_FORWARDER_PROTOCOL=Tcp # Giao thức Forwarder: Udp, Tcp, Tls, Https, HttpsJson
# - DNS_SERVER_LOG_USING_LOCAL_TIME=true # Dùng giờ địa phương thay vì giờ UTC cho log
- DNS_SERVER_LOG_FOLDER_PATH=/var/log/technitium/dns # Thư mục lưu log
# - DNS_SERVER_LOG_MAX_LOG_FILE_DAYS=365 # Số ngày lưu file log tối đa
# - DNS_SERVER_STATS_ENABLE_IN_MEMORY_STATS=false # Bật thống kê trên RAM (không lưu ổ cứng, giảm hao mòn ổ đĩa, chỉ xem được 1 giờ gần nhất)
# - DNS_SERVER_STATS_MAX_STAT_FILE_DAYS=365 # Số ngày lưu trữ dữ liệu biểu đồ
volumes:
- config:/etc/dns
- logs:/var/log/technitium/dns
restart: unless-stopped
sysctls:
- net.ipv4.ip_local_port_range=1024 65535 # Xóa dòng này nếu dùng network_mode: "host"
volumes:
config:
logs:
3. Giải thích các cấu hình quan trọng (Dành cho anh em thích vọc vạch)
3.1. Nếu anh em muốn dùng Technitium cấp IP (DHCP Server):
Docker theo mặc định sẽ cô lập mạng. Để DHCP hoạt động, container phải giao tiếp trực tiếp với mạng vật lý.
Cách làm:
  1. Bỏ comment dòng network_mode: "host".
  2. Thêm dấu # vào dòng ports: và toàn bộ các dòng mapping port (5380:5380...).
  3. Thêm dấu # vào 2 dòng sysctls: ở cuối.
3.2. Cấu hình mã hóa DNS (DoH, DoT, DoQ):
Nếu anh em muốn tự làm một máy chủ DNS mã hóa để đi cà phê dùng 4G/Wifi công cộng không bị theo dõi:
  1. Mở mapping các port 853 (cho DoT/DoQ) và 443 (cho DoH).
  2. Khai báo SSL ở phần Environment: Bỏ comment và trỏ đường dẫn ở DNS_SERVER_WEB_SERVICE_TLS_CERTIFICATE_PATH.
3.3. Tự động hóa thiết lập bằng Environment Variables:
Thay vì cài xong phải vào Web UI lạch cạch chỉnh tay, anh em có thể khai báo thẳng vào file compose, khởi động lên là xài luôn:

  • []Chặn quảng cáo tự động: Bỏ comment DNS_SERVER_ENABLE_BLOCKING=true và khai báo link blocklist tại DNS_SERVER_BLOCK_LIST_URLS=[https://raw.githubusercontent.com/S...ercontent.com/StevenBlack/hosts/master/hosts)[]Forwarder: Bỏ comment DNS_SERVER_FORWARDERS=1.1.1.1, 1.0.0.1 và ép dùng DNS-over-TLS với DNS_SERVER_FORWARDER_PROTOCOL=Tls
  • Bảo vệ thẻ nhớ/ổ cứng (Dành cho Raspberry Pi): Bỏ comment DNS_SERVER_STATS_ENABLE_IN_MEMORY_STATS=true. Lúc này log sẽ chỉ lưu trên RAM, giảm tác vụ Ghi (Write) giúp tăng tuổi thọ thẻ nhớ đáng kể.
4. Khởi chạy và Quản trị
Sau khi đã chỉnh sửa file compose ưng ý, anh em chạy lệnh:
Bash:
docker-compose up -d
Truy cập giao diện Web Console tại địa chỉ: http://[IP-MAY-CHU]:5380

  • []Nếu anh em chưa khai báo biến DNS_SERVER_ADMIN_PASSWORD trong file compose, hệ thống sẽ yêu cầu anh em tạo mật khẩu mới trong lần đầu truy cập.[]Mọi dữ liệu cấu hình và log sẽ được quản lý bởi Docker Volumes (config và logs).
Bước cuối cùng: Đổi DNS trên Router hoặc thiết bị cá nhân của anh em trỏ về IP của máy chủ này và tận hưởng một hệ thống mạng sạch sẽ, siêu tốc độ.
Chúc anh em vọc vạch vui vẻ. Ai cấu hình DoH hay DHCP gặp vướng mắc gì cứ quăng log lên đây mình hỗ trợ nhé!
Nguồn tham khảo: Github Technitium DNS Server
 

Đính kèm

  • 68747470733a2f2f746563686e697469756d2e636f6d2f646e732f53637265656e53686f74312e706e67.png
    68747470733a2f2f746563686e697469756d2e636f6d2f646e732f53637265656e53686f74312e706e67.png
    301.2 KB · Lượt xem: 2
Back
Top Dưới