Linux 阻止DHCP修改 /etc/resolv.conf
在Linux上如何阻止DHCP客户端更改resolv.conf?
/etc/resolv.conf文件
有关DNS服务器的信息存储在/etc/resolv.conf文件中。
$ cat /etc/resolv.conf
通过编辑/etc/resolv.conf文件可以设置DNS服务器。
如何防止DHCP修改resolv.conf文件?
将/etc/resolv.conf文件写保护
使用chattr命令将文件写保护。
语法为:
# chattr +i /etc/resolv.conf
+ i选项对/etc/resolv.conf文件进行写保护,因此没有人可以修改它,包括root用户。
如果是FreeBSD系统,可以使用chflags命令。
创建dhclient-script钩子
dhclient会不时调用DHCP客户端网络配置脚本。
创建脚本防止/etc/resolv.conf文件被更新
创建/etc/dhcp/dhclient-enter-hooks.d/nodnsupdate文件:
# vi /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate
代码如下:
#!/bin/sh make_resolv_conf(){ : }
使用chmod命令设置权限:
# chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate
该脚本将用我们自己的函数替换make_resolv_conf()
。此功能不执行任何操作,因此不会将IP地址添加到/etc/resolv.conf文件中。
关于Debian?Ubuntu上的resolvconf程序的说明
如果安装了resolvconf程序,则不应在基于Debian或Ubuntu的系统上手动编辑resolv.conf配置文件,因为它将由系统中的程序动态更改。如果需要手动定义名称服务器(与静态接口一样),请在/etc/network/interfaces文件的interfaces配置文件中添加以下行:
##Place the line indented within an iface stanza, e.g., right after the gateway line.## dns-nameservers 8.8.8.8 127.0.0.1
关于RHEL/CentOS/Fedora Linux的说明
将以下代码放在/etc/dhclient-enter-hooks文件中:
# vi /etc/dhclient-enter-hooks
代码如下:
make_resolv_conf(){ : }
另一种方法是修改您的接口配置文件,例如/etc/sysconfig/network-scripts/ifcfg-eth0文件:
# do not overwrite /etc/resolv.conf ## PEERDNS=no
或者
## use the following nameservers in /etc/resolv.conf ## PEERDNS=no DNS1=8.8.8.8 DNS2=1.2.3.4
其中
- PEERDNS = yes | no如果对等方使用msdns扩展名(仅PPP)或DNS {1,2},或者使用dhclient,则修改/etc/resolv.conf。默认为是。
- DNS {1,2} = ip地址 如果PEERDNS未设置为no,则提供放置到resolv.conf文件中的DNS地址。
配置dhclient.conf文件
/etc/dhclient.conf或/etc/dhcp/dhclient.conf文件包含dhclient的配置信息。
您可以使用此文件为特定接口或所有接口打开或关闭DNS更新和其他选项。
在dhclient.conf中,添加以下内容:
supersede domain-name-servers 202.54.1.2, 199.2.3.4;
或者
prepend domain-name-servers 1.2.3.4, 1.2.3.5;
dhclient.conf示例:
timeout 60; retry 60; reboot 10; select-timeout 5; initial-interval 2; reject 192.33.137.209; interface "eth0" { send host-name "laptop-area51.theitroad.net.in.home"; send dhcp-client-identifier 00:30:48:33:BC:32; send dhcp-lease-time 3600; supersede domain-search "net.in.home", "theitroad.local", "vpx.theitroad.net.in"; prepend domain-name-servers 8.8.8.8, 127.0.0.1; request subnet-mask, broadcast-address, time-offset, routers, domain-search, domain-name, domain-name-servers, host-name; require subnet-mask, domain-name-servers; }
如何在Linux上禁止network-manger更新/etc/resolv.conf
编辑/etc/NetworkManager/NetworkManager.conf文件:
$ sudo vi /etc/NetworkManager/NetworkManager.conf
在[main]
中修改如下行
dns=none
这是完整的配置:
[main] plugins=ifupdown,keyfile dns=none [ifupdown] managed=false [device] wifi.scan-rand-mac-address=no
下次重启Linux机器时,在Linux上使用nm(network-manager)时/etc/resolv.conf文件将不会更新。