Lỗ hổng “hở sườn” của DNS truyền thống
Sau hơn 6 năm quản trị các hệ thống Linux từ lab đến production, mình nhận ra một lỗi sơ đẳng: 90% anh em thường bỏ quên giao thức DNS. Mặc định, DNS chạy trên port 53 và gửi dữ liệu dạng văn bản thuần túy (plaintext). Điều này giúp ISP hoặc bất kỳ ai “ngồi giữa” dễ dàng soi thấy bạn đang vào trang web nào. Dù website đó dùng HTTPS thì cái tên miền vẫn hiện ra lộ liễu.
Tệ hơn, nhà mạng có thể dùng kỹ thuật DNS Hijacking để điều hướng bạn sang trang quảng cáo hoặc chặn truy cập. Đó là lý do mình đã chuyển toàn bộ hạ tầng sang DNS over TLS (DoT) và DNS over HTTPS (DoH) hơn nửa năm qua. Kết quả rất khả quan: không còn lo bị theo dõi và tốc độ phân giải thậm chí còn ổn định hơn nhờ cơ chế cache thông minh.
Lên đời DoT sau 5 phút với systemd-resolved
Nếu bạn đang dùng Ubuntu, Debian hoặc CentOS bản mới, systemd-resolved là con đường ngắn nhất. Bạn có thể triển khai DoT ngay mà không cần cài thêm software bên thứ ba nào phức tạp.
Bước 1: Chỉnh sửa file cấu hình
sudo nano /etc/systemd/resolved.conf
Hãy tìm và sửa các dòng sau (nhớ bỏ dấu comment # ở đầu dòng nhé):
[Resolve]
DNS=1.1.1.1 8.8.8.8
# Sử dụng IP của Cloudflare hoặc Google
DNSOverTLS=yes
DNSStubListener=yes
Bước 2: Kích hoạt và kiểm tra
sudo systemctl restart systemd-resolved
sudo resolvectl status
Tại phần thông tin interface, nếu bạn thấy dòng DNS over TLS: yes nghĩa là đã thành công. Từ giờ, mọi truy vấn DNS của bạn đều được bọc trong lớp TLS mã hóa trên port 853 cực kỳ an toàn.
DoT vs DoH: Đâu là lựa chọn tối ưu cho server?
Thực tế khi chạy production, mỗi giao thức lại có một ưu điểm riêng:
- DNS over TLS (DoT): Chạy trên port 853 riêng biệt. Nó sạch sẽ và dễ quản lý về mặt network. Tuy nhiên, nếu firewall của công ty quá gắt gao, port 853 rất dễ bị “trảm”.
- DNS over HTTPS (DoH): Chạy chung port 443 với traffic web thông thường. DoH cực kỳ khó bị chặn vì nếu chặn nó thì web cũng sập theo. Đổi lại, bạn thường cần một proxy nội bộ như
cloudflaredđể cấu hình.
Để tính toán nhanh các dải IP cho cụm DNS server này, mình thường dùng toolcraft.app/vi/tools/developer/ip-subnet-calculator. Chỉ cần nhập CIDR là có ngay dải network, broadcast và số host khả dụng, giúp việc chia VLAN hay cấu hình firewall chính xác hơn hẳn.
Nâng cao: Cài đặt DoH Proxy với Cloudflared
Cloudflared là lựa chọn số 1 nếu bạn cần độ bảo mật cao nhất hoặc muốn “vượt rào” nhà mạng hiệu quả. Mình đã test trên các hệ thống mail server và thấy nó chạy cực kỳ lỳ lợm.
1. Cài đặt nhanh
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb
2. Thiết lập Service
Tạo file cấu hình tại /etc/default/cloudflared với nội dung sau:
CLOUDFLARED_OPTS=--proxy-dns=true --proxy-dns-port=5053 --proxy-dns-upstream https://1.1.1.1/dns-query --proxy-dns-upstream https://8.8.8.8/dns-query
Lưu ý: Mình để port 5053 để tránh xung đột với các dịch vụ DNS mặc định trên máy.
3. Chạy tự động khi khởi động
sudo cloudflared service install
Cuối cùng, bạn chỉ cần trỏ DNS của hệ thống về 127.0.0.1#5053 là toàn bộ traffic đã được bảo vệ bởi DoH.
Kiểm chứng traffic: Đừng chỉ tin vào lý thuyết
Dân kỹ thuật thì phải soi tận mắt. Mình hay dùng tcpdump để kiểm tra gói tin. Với DNS truyền thống, tên miền bạn truy cập hiện rõ mồn một. Còn với DoT/DoH, mọi thứ chỉ là những chuỗi ký tự đã mã hóa.
Thử bắt gói tin trên port 53 (DNS thường):
sudo tcpdump -ni any port 53
Nếu màn hình im lìm khi bạn lướt web, nghĩa là cấu hình đã chuẩn. Sau đó, hãy thử soi port 853:
sudo tcpdump -ni any port 853
Dữ liệu sẽ đổ về liên tục dưới dạng TLS (Encrypted Application Data) — đây chính là thành quả của bạn.
Kinh nghiệm thực tế sau 6 tháng sử dụng
Đừng quá lo về độ trễ (Latency)
Nhiều anh em sợ mã hóa làm chậm web. Thực tế, query đầu tiên chỉ chậm hơn khoảng 15ms. Những lần sau đó, nhờ bộ nhớ cache của systemd-resolved, tốc độ gần như tức thì. Trừ khi bạn làm High Frequency Trading, còn lại người dùng bình thường sẽ không cảm nhận thấy khác biệt.
Xử lý tên miền nội bộ (Local Domains)
Một lỗi “dở khóc dở cười” mình từng gặp là không vào được các server nội bộ (như gitlab.local) sau khi bật DoT. Lý do là query bị đẩy hết lên Cloudflare. Giải pháp là dùng Split DNS: chỉ mã hóa traffic đi ra internet, còn local domain thì để internal DNS xử lý như cũ.
Lời kết
Chuyển sang DoH/DoT không chỉ là bảo mật, mà còn là cách để thoát khỏi các kịch bản chèn quảng cáo khó chịu của ISP. Nếu đang quản trị server Linux, mình khuyên bạn nên bật DoT ngay hôm nay. Chỉ mất chưa đầy 5 phút cấu hình nhưng giá trị về quyền riêng tư mang lại là cực lớn.

