Trong một network cấu hình điạ chỉ động (DHCP), việc bạn muốn thay đổi file /etc/resolv.conf để sử dụng DNS server khác hay thông tin truy vấn domain name khác với mặc định sẽ gặp khó khăn. Khó khăn ở chỗ file resolve.conf của bạn đã chỉnh sửa sẽ bị ghi đè khi chương trình dhclient trên máy bạn chạy để cập nhật địa chỉ IP theo chu kỳ. Để ngăn chặn việc này xảy ra, ta có thể dùng một trong các cách sau đây:
Chặn quyền ghi lên file /etc/resolve.conf
Dùng lệnh chattr để bảo vệ file khỏi bị ghi đè:
# chattr +i /etc/resolv.conf
Hook dhcp-client script
Tạo một hook script để ngăn chặn việc cập nhật file resolv.conf theo đường dẫn sau (Debian/Ubuntu)
# vi /etc/dhcp3/dhclient-enter-hooks.d/nodnsupdate
Thêm nội dung sau vào:
#!/bin/sh
make_resolv_conf(){
:
}
Lưu và đóng file lại sau đó cho file được quyền execute
# chmod +x /etc/dhcp3/dhclient-enter-hooks.d/nodnsupdate
Script này sẽ thay thế chức năng make_resolv_conf() bằng một hàm do ta định nghĩa lại, nhưng hàm này không làm gì cả (:) nên resolv.conf sẽ không bị update.
Lưu ý với Red Hat và CentOS: đặt script vào thư mục :/etc/dhclient-enter-hooks
Tham khảo:
cp resolv.conf resolv.conf.bk coi bộ gọn hơn không bác? dùng hook vậy mỗi khi hệ thống nâng cấp lại chỉnh sửa lại à
Mỗi lần hệ thống nâng cấp thì chỉnh sửa với năm phút chỉnh một lần bạn chọn cái nào :). BTW, dùng script hook vào dhcp-client là một cơ chế khá hay mà ta có thể dùng với nhiều mục đích khác nữa.
Mình chợt nghĩ là nếu dhcpclient thực thi việc ghi đè resolv.conf thì ắt hẳn có option để tắt/mở. Không biết option trong dhcpclient.conf là
no-client-updates [ flag ] ;
có thực hiện được như trên không nhỉ?
trên trang chủ của opendns có hướng dẫn:
To avoid having your settings get revoked after reboots, or after periods of inactivity you may need to make the following changes via the command line:
$ sudo cp /etc/resolv.conf /etc/resolv.conf.auto
$ gksudo gedit /etc/dhcp3/dhclient.conf
# append the following line to the document
prepend domain-name-servers 208.67.222.222,208.67.220.220;
# save and exit
$ sudo ifdown eth0 && sudo ifup eth0
You may be required to change eth0 to your own network device’s name if it uses a non-standard name.