Cài đặt Technitium DNS Server trên Linux: ‘Lá chắn’ bảo mật và chặn quảng cáo cho DevOps

Security tutorial - IT technology blog
Security tutorial - IT technology blog

Tại sao mình chọn Technitium DNS Server cho hạ tầng nội bộ?

Sau khi audit bảo mật cho hơn 10 dự án, mình nhận thấy một lỗ hổng mà anh em thường bỏ qua: DNS. Đa số chúng ta vẫn để mặc định DNS của nhà mạng hoặc dùng các DNS công cộng như 8.8.8.8. Tuy nhiên, các truy vấn DNS thuần túy qua cổng UDP 53 hoàn toàn không được mã hóa. Điều này giống như việc bạn gửi bưu thiếp mà ai cũng có thể đọc trộm nội dung trên đường đi, dẫn đến nguy cơ bị tấn công Man-in-the-Middle (MitM) hoặc bị nhà mạng theo dõi lịch sử truy cập.

Mình từng dùng qua Pi-hole và AdGuard Home. Dù chúng rất tốt, nhưng khi hệ thống phức tạp hơn, mình cần một DNS Server thực thụ với khả năng quản lý Zone chuyên sâu như BIND nhưng phải dễ dùng. Technitium DNS Server là câu trả lời. Đây là giải pháp mã nguồn mở chạy trên .NET, hỗ trợ tận răng các giao thức hiện đại như DNS-over-HTTPS (DoH) và DNS-over-TLS (DoT).

Tự triển khai DNS Server riêng mang lại hai lợi ích sát sườn. Thứ nhất, tốc độ phân giải tên miền cực nhanh nhờ cơ chế caching cục bộ. Thứ hai, bạn có thể chặn đứng quảng cáo và tracker ngay từ ‘cửa ngõ’ network. Thay vì cài app chặn quảng cáo cho từng máy, bạn chỉ cần cấu hình một lần cho toàn bộ thiết bị trong nhà hoặc văn phòng.

Cài đặt Technitium DNS Server trên Linux

Technitium có thể chạy mượt mà trên Docker, nhưng để đạt hiệu năng cao nhất và độ trễ thấp nhất trong môi trường production, mình ưu tiên cài trực tiếp lên Ubuntu Server 22.04 hoặc 24.04.

Bước 1: Chuẩn bị hệ thống

Hãy bắt đầu bằng việc dọn dẹp và cập nhật các gói phần mềm cơ bản:

sudo apt update && sudo apt upgrade -y
sudo apt install curl wget apt-transport-https -y

Bước 2: Triển khai bằng Script tự động

Đội ngũ phát triển Technitium cung cấp một script cài đặt rất ‘xịn’. Nó tự động lo liệu từ việc cấu hình .NET runtime đến thiết lập service:

curl -sSL https://download.technitium.com/dns/install.sh | sudo bash

Quá trình này thường mất chưa đầy 2 phút. Sau khi hoàn tất, hệ thống sẽ thông báo Web UI đang lắng nghe tại port 5380.

Bước 3: Giải phóng Port 53

Trên các bản distro Linux mới, systemd-resolved thường ‘chiếm dụng’ port 53, khiến DNS Server không thể hoạt động. Bạn cần giải phóng nó bằng cách sửa file cấu hình:

sudo sed -i 's/#DNSStubListener=yes/DNSStubListener=no/' /etc/systemd/resolved.conf
sudo systemctl restart systemd-resolved

Mẹo nhỏ: Sau khi tắt Stub Listener, file /etc/resolv.conf có thể bị mất liên kết. Hãy trỏ nó về localhost để chính server cũng được hưởng lợi từ Technitium:

sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

Cấu hình thực tế: Bảo mật và Chặn quảng cáo

Truy cập vào http://<IP-Server>:5380 để bắt đầu. Việc đầu tiên bạn phải làm là đặt mật khẩu admin. Đừng chủ quan, giao diện quản lý DNS là nơi cực kỳ nhạy cảm.

Mã hóa truy vấn với DNS-over-HTTPS (DoH)

Đây là bước then chốt để bảo vệ quyền riêng tư. Thay vì gửi yêu cầu dạng text thô, chúng ta sẽ bọc chúng trong tunnel HTTPS.

  1. Mở tab Settings -> Proxy.
  2. Tại Forwarders, hãy nhập các DoH server uy tín để tối ưu tốc độ:
https://dns.cloudflare.com/dns-query
https://dns.google/dns-query

Chọn ProtocolDNS-over-HTTPS. Lúc này, mọi yêu cầu DNS từ mạng của bạn sẽ ‘tàng hình’ trước sự giám sát của nhà mạng.

Thiết lập bộ lọc chặn quảng cáo

Technitium cho phép bạn nạp các danh sách blocklist khổng lồ. Để kích hoạt:

  • Vào Settings -> Blocking.
  • Nhấn Add Block List và dán link từ các nguồn uy tín.
  • Ví dụ, list của StevenBlack chứa hơn 100,000 domain độc hại: https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts

Kinh nghiệm của mình: Đừng ‘tham’ thêm quá nhiều list trùng lặp. Việc này chỉ làm nặng RAM và dễ gây lỗi ‘false positive’ khiến bạn không vào được các trang web bình thường.

Quản lý tên miền nội bộ (Local DNS)

Nếu bạn mệt mỏi vì phải nhớ IP của các dịch vụ như 192.168.1.50, hãy tận dụng tính năng Zone:

  • Vào Zones -> Create Zone (ví dụ: homelab.local).
  • Thêm bản ghi A record trỏ dev.homelab.local về IP mong muốn.

Giờ đây, việc truy cập các service nội bộ trở nên chuyên nghiệp và nhanh chóng hơn bao giờ hết.

Kiểm tra và Tối ưu hiệu năng

Hãy thử đổi DNS trên máy tính cá nhân về IP của server Technitium. Sử dụng lệnh dig để kiểm tra:

dig @<IP-Server-Technitium> vnexpress.net

Nếu bạn thấy Query time giảm từ 50ms xuống còn 0-1ms trong lần truy vấn thứ hai, chúc mừng bạn, cache đã hoạt động hoàn hảo.

Theo dõi sức khỏe hệ thống

Dashboard của Technitium không chỉ để cho đẹp. Hãy chú ý đến Cache Hit Ratio. Tỷ lệ này càng cao, trải nghiệm lướt web của người dùng trong mạng càng mượt mà. Ngoài ra, mục Blocked Queries sẽ cho bạn thấy con số giật mình về lượng rác mà hệ thống đã lọc giúp bạn.

Một lưu ý cho anh em dùng Raspberry Pi hoặc VPS yếu: Hãy tăng Cache TTL trong phần Settings. Việc này giúp giảm tải cho CPU vì server không phải đi hỏi lại các domain phổ biến quá nhiều lần.

Tự xây dựng DNS Server có thể mất 15 phút thiết lập, nhưng giá trị về bảo mật và sự sạch sẽ của môi trường mạng là không thể đong đếm.

Share: