[权威教程翻译]resolv.conf from debian wiki

本文介绍了如何在Debian系统中管理/etc/resolv.conf文件,以防止网络服务守护进程如dhclient动态修改。提供了通过resolvconf包、在/etc/network/interfaces中设置dns-nameserver、修改dhclient配置以及使resolv.conf文件不可变等方法来保持管理员的手动配置不变。同时,提到了dhclient使用hook脚本和修改dhclient.conf的选项,以及使resolv.conf文件变为只读状态以防止被覆盖的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文来自debian wiki

Ordinarily, the resolv.conf(5) file is managed dynamically by various network service daemons. This is the default, and is intended for laptops and other highly mobile systems which may connect to different networks. It also works well for many desktop and server systems, so long as the network infrastructure is perfect.

For some systems, on some networks, the system administrator may wish to configure /etc/resolv.conf by hand. This leads to a conflict between the administrator’s changes, and the dynamic changes performed by the network service daemons.

If you edit resolv.conf by hand, and need to stop daemons from overwriting your changes, this page documents some of your options.

Configuring resolvconf

The resolvconf package may be installed. When it is, it includes various configuration files for other package (such as isc-dhcp-client). Specifically, resolvconf includes a file which modifies the make_resolv_conf shell function used by dhclient-script(8).

With resolvconf installed, you can tell it to do nothing whenever some daemon tries to modify resolv.conf, by putting resolvconf=NO in the /etc/resolvconf.conf file. (Note: this is not the /etc/resolv.conf file!)

Alternatively, you can use dns-nameserver entries in the appropriate stanza in /etc/network/interfaces:

iface eth0 inet static
address 192.168.1.3
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameserver 192.168.1.254
dns-nameserver 8.8.8.8
dns-search foo.org bar.com

Configuring dhclient

The most common daemon which overwrites resolv.conf is dhclient(8) (from isc-dhcp-client). In many cases, simply stopping this one daemon from touching the file will suffice.

Stop dhclient from modifying /etc/resolv.conf

Another approach makes use of dhclient-script’s hook scripts. According to dhclient-script(8):

When it starts, the client script first defines a shell function, make_resolv_conf , which is later used to create the /etc/resolv.conf file. To override the default behaviour, redefine this function in the enter hook script. 

Therefore, we can stop dhclient from overwriting resolv.conf by doing the following:

echo ‘make_resolv_conf() { :; }’ > /etc/dhcp/dhclient-enter-hooks.d/leave_my_resolv_conf_alone
chmod 755 /etc/dhcp/dhclient-enter-hooks.d/leave_my_resolv_conf_alone

The execute bit is required because dhclient-script uses run-parts(8) to decide which files to read. For that same reason, the filename must not contain anything but letters, digits, underscores and hyphens.

Modifying /etc/dhcp/dhclient.conf

The /etc/dhcp/dhclient.conf file can be populated with directives that will override the options sent by the DHCP server. For example, these directives will override the domain, search, and nameserver parameters that are placed into /etc/resolv.conf:

supersede domain-name “example.com”;
supersede domain-search “example.com”;
supersede domain-name-servers 127.0.0.1;

Another option is to remove “domain-name, domain-name-servers, domain-search” from the request line. However, this only works on some networks, and not on others. If the DHCP server sends unsolicited domain-name-servers (et al.) responses, dhclient will still heed them, and will still overwrite the resolv.conf file.

Making /etc/resolv.conf immutable

This approach will render /etc/resolv.conf immutable so that it cannot be changed, regardless of what packages are installed or what tries to modify it.

rm -f /etc/resolv.conf
editor /etc/resolv.conf
chattr +i /etc/resolv.conf

Obviously, you will need to put the appropriate content into the file before setting the immutable bit. Any time you wish to change the file, you will have to remove the bit, make your change, and then restore the bit.

A consequence of making /etc/resolv.conf immutable is that if dhclient-script tries to change it and fails, it clutters /etc with temporary files. See 860928 for details. The user/admin may need to periodically clean these files out of /etc until #860928 is fixed.

这是一个用于管理 Linux 系统 `/etc/resolv.conf` 文件的脚本片段,主要用于检查、修改或创建该文件。以下是详细解析: --- ### 脚本功能分析 1. **判断文件是否存在** ```bash if [ -f /etc/resolv.conf ]; then ``` 这行代码会检测系统中是否已经存在 `/etc/resolv.conf` 文件。如果存在,则进入 `then` 分支;若不存在,则跳转至 `else` 分支。 2. **移除文件的只读属性** ```bash sudo chattr -i /etc/resolv.conf ``` 如果文件存在,首先需要解除其不可变属性 (`immutable`),以便对其进行编辑操作。`chattr -i` 表示关闭文件的不可变标志位。 3. **删除指定内容** 下面几行使用了 `sed` 工具逐条匹配并删除特定配置项: ```bash sudo sed -i '/domain huawei.com/d' /etc/resolv.conf sudo sed -i '/search huawei.com/d' /etc/resolv.conf sudo sed -i '/10.129.0.84/d' /etc/resolv.conf sudo sed -i '/10.129.0.148/d' /etc/resolv.conf sudo sed -i '/10.144.90.20/d' /etc/resolv.conf sudo sed -i '/10.98.48.39/d' /etc/resolv.conf ``` 具体作用是通过正则表达式找到包含某些关键字(如 `domain huawei.com`, `search huawei.com` 或者特定 DNS 地址)的行,并将其从文件中删除。 4. **当文件不存在时的操作** 若未发现 `/etc/resolv.conf` 文件,则执行以下动作: ```bash sudo touch /etc/resolv.conf sudo chattr -i /etc/resolv.conf ``` 首先用 `touch` 创建一个新文件,然后再次设置文件为不可变状态。 --- ### 总结 此脚本的核心任务是对 `/etc/resolv.conf` 文件进行维护,包括清理旧有的 DNS 设置以及确保文件的存在性和安全性(防止未经授权的更改)。通常这种场景出现在需要标准化网络配置的企业环境内。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值