Linux 阻止DHCP修改 /etc/resolv.conf

时间:2019-11-20 08:53:20  来源:igfitidea点击:

在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文件将不会更新。