Nỗi ám ảnh kinh điển: Sửa DNS xong… reboot lại mất sạch
Hãy tưởng tượng bạn đang quản lý một cụm 20 máy chủ Ubuntu cho dự án Web. Bạn hí hửng mở file /etc/resolv.conf, thêm dòng nameserver 8.8.8.8, lưu lại và thấy ping google.com phản hồi trong 20ms. Thế nhưng, chỉ cần một lần reboot định kỳ hoặc restart service network, mọi công sức đổ sông đổ bể. File resolv.conf tự động quay về trạng thái ban đầu như chưa từng có cuộc chia ly.
Tại sao Linux lại “cứng đầu” như vậy? Trên các bản phân phối hiện đại như Ubuntu 20.04/22.04, Fedora hay CentOS 8, /etc/resolv.conf không còn là file tĩnh. Nó được quản lý tự động bởi systemd-resolved hoặc NetworkManager. Nếu cứ sửa tay, bạn sẽ mãi kẹt trong vòng lặp “sửa – mất – sửa” đầy ức chế.
Cách cấu hình DNS chuẩn (Áp dụng cho Ubuntu/Debian)
Thay vì sửa file tạm, chúng ta cần can thiệp vào các công cụ quản lý mạng ở tầng cao hơn. Dưới đây là hai cách phổ biến nhất.
1. Sử dụng Netplan (Dành cho Server)
Hầu hết Ubuntu Server hiện nay dùng Netplan để quản lý network. Bạn hãy tìm file cấu hình trong /etc/netplan/. Thường nó sẽ có tên là 00-installer-config.yaml hoặc tương tự.
sudo nano /etc/netplan/00-installer-config.yaml
Sửa nội dung phần nameservers. Lưu ý: YAML cực kỳ nhạy cảm với khoảng trắng (indentation). Hãy dùng đúng 2 hoặc 4 space.
network:
version: 2
ethernets:
eth0:
dhcp4: true
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
Áp dụng thay đổi ngay lập tức bằng lệnh:
sudo netplan apply
2. Sử dụng nmcli (Cho Desktop hoặc RHEL/CentOS)
Nếu dùng giao diện dòng lệnh trên các máy có cài NetworkManager, nmcli là công cụ nhanh nhất.
# Tìm tên kết nối (thường là 'Wired connection 1' hoặc 'ens33')
nmcli connection show
# Cấu hình DNS mới
nmcli con mod "Wired connection 1" ipv4.dns "8.8.8.8 1.1.1.1"
# Kích hoạt thay đổi
nmcli con up "Wired connection 1"
Bản chất: Mối quan hệ giữa systemd-resolved và resolv.conf
Để trở thành pro, bạn cần hiểu cơ chế bên dưới thay vì chỉ học thuộc lệnh.
systemd-resolved đóng vai trò gì?
Nó là một DNS proxy nội bộ. Thay vì các app chạy thẳng ra ngoài Internet hỏi IP, chúng sẽ hỏi systemd-resolved ở địa chỉ 127.0.0.53. Service này giúp cache kết quả, giảm độ trễ cho các lần truy cập sau và xử lý thông minh khi bạn dùng VPN hoặc chuyển đổi giữa Wifi/Lan.
Sự thật về file /etc/resolv.conf
Hãy thử kiểm tra bằng lệnh ls -l /etc/resolv.conf. Bạn sẽ thấy một mũi tên trỏ đến: ../run/systemd/resolve/stub-resolv.conf.
Đây là một symbolic link. Mọi thay đổi thủ công vào file này đều vô nghĩa vì nó chỉ là file tạm do hệ thống sinh ra. Khi máy khởi động, service sẽ ghi đè nội dung mới, xóa sạch các dòng nameserver bạn đã thêm trước đó.
Tùy biến sâu: Cấu hình Global DNS
Nếu bạn muốn áp dụng DNS chung cho toàn bộ hệ thống mà không quan tâm interface nào đang chạy, hãy sửa trực tiếp file config của service.
sudo nano /etc/systemd/resolved.conf
Tìm dòng [Resolve] và thêm DNS của bạn vào:
[Resolve]
DNS=8.8.8.8 1.1.1.1
FallbackDNS=8.8.4.4
# DNSOverTLS=yes # Bật nếu muốn bảo mật, tránh bị ISP soi nội dung truy cập
Restart service để áp dụng:
sudo systemctl restart systemd-resolved
Kinh nghiệm thực tế và xử lý sự cố
Sau nhiều năm vận hành hệ thống, mình rút ra vài lưu ý quan trọng để anh em đỡ mất thời gian:
- Đừng tin vào mắt, hãy tin vào lệnh: Đừng mở file
resolv.confđể kiểm tra. Hãy dùngresolvectl status. Lệnh này cho biết chính xác DNS server nào đang hoạt động trên từng interface (eth0, wlan0). - Lỗi “Temporary failure in name resolution”: Thường do file
/etc/resolv.confbị mất link hoặc bị hỏng. Hãy xóa nó đi và tạo lại link chuẩn bằng lệnh:sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf - Công cụ chẩn đoán: Luôn cài
dnsutilsđể dùng lệnhdig. Khi gõdig google.com, hãy nhìn dòng SERVER ở cuối. Nếu nó hiện127.0.0.53, nghĩa là proxy nội bộ đang chạy tốt. - Chọn DNS nào? Tại Việt Nam, Google (8.8.8.8) rất ổn định nhưng Cloudflare (1.1.1.1) thường có tốc độ phân giải nhanh hơn khoảng 5-10ms. Tốt nhất là kết hợp cả hai.
Quản lý DNS trên Linux không khó nếu bạn nắm được gốc rễ vấn đề. Thay vì sửa ngọn ở file resolv.conf, hãy tập trung vào systemd-resolved hoặc các tool quản lý mạng. Nếu gặp lỗi lạ hoặc bị xung đột với Docker/VPN, hãy để lại bình luận bên dưới nhé!
