7 phút đọc
Insights / DNS

Tại sao sửa DNS trong /etc/resolv.conf rồi mà khởi động lại vẫn mất

Sơn Bùi Sỹ
Sơn Bùi Sỹ Tác giả
Đăng ngày 15/10/2026
Tại sao sửa DNS trong /etc/resolv.conf rồi mà khởi động lại vẫn mất

Khi setup một con server Linux mới chạy Ubuntu hay CentOS, thông thường việc đầu tiên anh em làm khi server không phân giải được tên miền là mở file /etc/resolv.conf ra cấu hình.

Anh em thường dùng lệnh này để thêm DNS của Google:

nameserver 8.8.8.8

Sau khi lưu file, chạy thử lệnh ping google.com thấy nhận ngay lập tức. Mọi thứ hoạt động hoàn toàn bình thường.

Thế nhưng, vấn đề xuất hiện sau khi anh em reboot lại server hoặc chỉ đơn giản là restart lại card mạng. Server lại mất kết nối internet. Mở lại file /etc/resolv.conf thì thấy dòng nameserver 8.8.8.8 vừa thêm đã biến mất, thay vào đó là một dòng ghi chú dạng:

# Generated by systemd-resolved

hoặc:

# Generated by NetworkManager

Tại sao file cấu hình DNS lại tự động bị ghi đè sau mỗi lần khởi động lại? Cùng làm rõ nguyên nhân và cách xử lý triệt để ngay dưới đây.

Tại sao resolv.conf bị tự động ghi đè?

Nguyên nhân là do các bản phân phối Linux hiện đại (như Ubuntu 18.04 trở lên hoặc CentOS 8 trở lên) đã thay đổi cách quản lý cấu hình mạng. Thay vì để người dùng quản lý file tĩnh, hệ thống sử dụng các trình quản lý mạng động để tự động cấu hình DNS dựa trên thông tin nhận được từ DHCP hoặc cấu hình của card mạng.

Khi hệ thống khởi động hoặc thay đổi trạng thái mạng:

  1. systemd-resolved hoặc NetworkManager sẽ tự động chạy.
  2. Các dịch vụ này sẽ đọc cấu hình từ card mạng (như Netplan trên Ubuntu hoặc ifcfg trên CentOS) hoặc nhận thông tin từ DHCP Server.
  3. Sau đó, chúng tự động sinh lại nội dung cho file /etc/resolv.conf và ghi đè lên những gì anh em đã viết tay trước đó.

Thực chất, trên Ubuntu, file /etc/resolv.conf không còn là một file text thông thường mà là một đường dẫn liên kết (symbolic link) trỏ đến file cấu hình tạm thời của systemd-resolved. Anh em có thể kiểm tra bằng lệnh:

ls -l /etc/resolv.conf

Kết quả hiển thị thường trỏ đến:

lrwxrwxrwx 1 root root 39 Jul 10 22:00 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

Mọi thay đổi thủ công trên file này chỉ có tác dụng tạm thời và sẽ bị xóa sạch khi dịch vụ sinh lại file.

Cách cấu hình DNS tĩnh đúng chuẩn cho từng trường hợp

Trường hợp 1: Đối với Ubuntu Server (sử dụng Netplan)

Kể từ Ubuntu 18.04, Netplan là trình quản lý cấu hình mạng mặc định. Để thay đổi DNS vĩnh viễn, anh em cần cấu hình trực tiếp thông qua Netplan thay vì sửa resolv.conf.

Bước 1: Tìm file cấu hình Netplan trong thư mục /etc/netplan/ (thường có đuôi .yaml).

ls /etc/netplan/

Ví dụ file tìm thấy là 01-netcfg.yaml.

Bước 2: Mở file và thêm cấu hình nameservers vào dưới card mạng đang sử dụng (ví dụ eth0 hoặc enp0s3):

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: true
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]

Bước 3: Áp dụng cấu hình mới:

sudo netplan apply

Lúc này hệ thống sẽ tự động cập nhật DNS vào file resolv.conf mà không bị mất khi reboot.

Trường hợp 2: Đối với CentOS / RHEL (sử dụng NetworkManager)

Trên CentOS hoặc RedHat, NetworkManager mặc định sẽ tự động cập nhật /etc/resolv.conf từ cấu hình card mạng.

Cách 1: Khai báo DNS trực tiếp vào file cấu hình card mạng

Mở file cấu hình card mạng tương ứng, ví dụ /etc/sysconfig/network-scripts/ifcfg-eth0, thêm hoặc sửa các dòng sau:

DNS1=8.8.8.8
DNS2=8.8.4.4
PEERDNS=no

Lưu ý: PEERDNS=no là tham số bắt buộc để báo cho hệ thống bỏ qua DNS nhận về từ DHCP Server, chỉ sử dụng DNS tĩnh do anh em cấu hình ở trên.

Sau đó restart lại dịch vụ mạng:

sudo systemctl restart network

Cách 2: Cấm NetworkManager tự động ghi đè resolv.conf

Nếu anh em muốn tự quản lý file resolv.conf thủ công như cách truyền thống, hãy cấu hình để NetworkManager bỏ qua file này.

Mở file /etc/NetworkManager/NetworkManager.conf và thêm cấu hình sau vào phần [main]:

[main]
dns=none

Sau đó restart lại NetworkManager:

sudo systemctl restart NetworkManager

Từ lúc này, anh em có thể tự do chỉnh sửa /etc/resolv.conf mà không lo bị ghi đè.

Trường hợp 3: Sử dụng resolvconf (giải pháp quản lý DNS độc lập)

Nếu hệ thống không dùng Netplan hay NetworkManager nhưng vẫn bị ghi đè, anh em có thể sử dụng gói tiện ích resolvconf để quản lý DNS tĩnh.

Bước 1: Cài đặt tiện ích:

sudo apt install resolvconf

Bước 2: Mở file cấu hình DNS tĩnh của resolvconf tại /etc/resolvconf/resolv.conf.d/head:

sudo nano /etc/resolvconf/resolv.conf.d/head

Thêm dòng DNS của anh em vào file này:

nameserver 8.8.8.8
nameserver 8.8.4.4

Bước 3: Cập nhật lại cấu hình:

sudo resolvconf -u

Nội dung trong file head sẽ luôn được tự động chèn vào đầu file /etc/resolv.conf mỗi khi hệ thống cập nhật.

Trường hợp 4: Giải pháp khóa file bằng thuộc tính ghi (chữa cháy nhanh)

Có những trường hợp anh em đang cần sửa gấp DNS để chạy công việc và không muốn tìm hiểu sâu xem hệ thống đang dùng trình quản lý mạng nào. Anh em có thể ép hệ điều hành khóa quyền ghi đối với file /etc/resolv.conf.

Lưu ý quan trọng: Vì /etc/resolv.conf thường là một symbolic link trỏ vào /run/systemd/resolve/stub-resolv.conf (nằm trên phân vùng ảo tmpfs – hệ thống file không hỗ trợ thuộc tính khóa file của Linux), lệnh chattr sẽ báo lỗi Operation not supported.

Để thực hiện khóa thành công, anh em bắt buộc phải xóa liên kết động và tạo lại file vật lý tĩnh theo các bước sau:

Bước 1: Xóa đường dẫn liên kết (symlink) hiện tại:

sudo rm -f /etc/resolv.conf

Bước 2: Tạo lại file /etc/resolv.conf dưới dạng file vật lý thông thường và cấu hình nameserver:

sudo nano /etc/resolv.conf

Thêm nội dung:

nameserver 8.8.8.8
nameserver 8.8.4.4

Bước 3: Chạy lệnh khóa thuộc tính ghi (immutable) của file:

sudo chattr +i /etc/resolv.conf

Sau khi chạy lệnh này, kể cả root hay các tiến trình hệ thống như NetworkManager cũng không thể chỉnh sửa, ghi đè hay xóa file này.

Mở khóa khi cần: Nếu sau này cần chỉnh sửa lại DNS, anh em phải mở khóa file trước bằng lệnh:

sudo chattr -i /etc/resolv.conf

Đây là phương án chữa cháy nhanh nhưng không được khuyến khích sử dụng lâu dài vì nó có thể khiến các service mạng hoạt động không đúng thiết kế của hệ điều hành.

Kết luận

Việc file /etc/resolv.conf bị ghi đè không phải là lỗi của hệ điều hành, mà là tính năng hoạt động của các trình quản lý mạng động hiện đại. Thay vì cố gắng sửa thô file này, anh em nên cấu hình thông qua các công cụ quản lý tương ứng của từng bản phân phối Linux như Netplan hoặc NetworkManager để giữ cho hệ thống luôn hoạt động ổn định và nhất quán.

Chia sẻ bài viết

Theo dõi
Thông báo của
0 Bình luận
Phù hợp nhất
Mới nhất Cũ nhất
Đã sao chép liên kết vào bộ nhớ tạm!