Linux域名解析配置文件resolv.conf详解

本文详细介绍了Linux中resolv.conf文件的作用及配置方法。重点解释了nameserver、domain、search和sortlist等关键字的功能,以及它们如何帮助实现DNS域名解析。

/etc/resolv.conf

该文件是Linux中的DNS域名解析的配置文件,它的格式很简单,每行以一个关键字开头,后接配置参数。

resolv.conf的关键字主要有四个,分别是:

nameserver #定义DNS服务器的IP地址
domain #定义本地域名
search #定义域名的搜索列表
sortlist #对返回的域名进行排序

详解:

nameserver 表明DNS服务器的IP地址。可以有很多行的nameserver,每一个带一个IP地址。在查询时就按nameserver在本文件中的顺序进行,且只有当第一个nameserver没有反应时才查询下面的nameserver。

domain  这个用来指定本地的域名,在没有设置search的情况下,search默认为domain的值。这个值可以随便配,目前在我看来,domain除了当search的默认值外,没有其它用途。也就说一旦配置search,那domain就没用了。

search   该选项可以用来指定多个域名,中间用空格或tab键隔开。它是干嘛的呢?
如:在没有配置该选项时,执行
ping news
ping: unknown host news
配置search google.com baidu.com后,再执行
ping news
PING news.google.com (74.125.128.101) 56(84) bytes of data.
64 bytes from hg-in-f101.1e100.net (74.125.128.101): icmp_req=1 ttl=47 time=78.9 ms
64 bytes from hg-in-f101.1e100.net (74.125.128.101): icmp_req=2 ttl=47 time=63.6 ms

   它就去ping news.google.com了。原来当访问的域名不能被DNS解析时,resolver会将该域名加上search指定的参数,重新请求DNS,直到被正确解析或试完search指定的列表为止。
   由于news不能被DNS解析,所以去尝试news.google.com,被正常解析。如果没有被解析还会去尝试news.baidu.com。

sortlist   允许将得到域名结果进行特定的排序。它的参数为网络/掩码对,允许任意的排列顺序。

### 解决 Linux 中 `/etc/resolv.conf` 文件只读无法修改的问题 在 Linux 系统中,`/etc/resolv.conf` 是域名解析器的配置文件,用于指定 DNS 服务器地址。由于系统网络管理工具(如 `NetworkManager`、`systemd-resolved`、`resolvconf` 或 `dhclient`)会动态更新该文件的内容,因此直接修改可能会被覆盖。为了避免这种情况,系统可能会将 `/etc/resolv.conf` 设置为只读文件,从而导致无法直接编辑。 #### 1. **临时修改权限进行编辑** 可以通过更改文件权限,使其可写,以便手动编辑 DNS 配置: ```bash sudo chattr -i /etc/resolv.conf sudo chmod 644 /etc/resolv.conf ``` 修改完成后,可以将文件恢复为只读状态以防止被覆盖: ```bash sudo chattr +i /etc/resolv.conf ``` 该方法适用于临时修改 DNS 配置的场景 [^1]。 #### 2. **禁用自动管理工具** 为了避免 `/etc/resolv.conf` 被自动覆盖,可以禁用相关服务,例如: - 对于 `systemd-resolved`: ```bash sudo systemctl stop systemd-resolved sudo systemctl disable systemd-resolved ``` - 对于 `NetworkManager`: ```bash sudo systemctl stop NetworkManager sudo systemctl disable NetworkManager ``` 禁用后,可手动管理 `/etc/resolv.conf` 文件内容 。 #### 3. **使用 `resolvconf` 工具管理 DNS** 在 Debian/Ubuntu 系统中,`resolvconf` 是一个用于管理 DNS 的工具。可以通过以下方式更新 DNS 配置: ```bash echo "nameserver 8.8.8.8" | sudo resolvconf -a eth0 sudo resolvconf -u ``` 若需永久禁用 `resolvconf` 对 `/etc/resolv.conf` 的更新,可以执行: ```bash sudo resolvconf --disable-updates ``` 这种方式确保了 DNS 配置的动态管理,同时避免了手动编辑被覆盖的问题 [^4]。 #### 4. **修改网络接口配置文件** 在某些发行版(如 CentOS/RHEL)中,网络接口的配置文件(如 `/etc/sysconfig/network-scripts/ifcfg-eth0`)中指定的 DNS 信息会在重启网络服务时更新 `/etc/resolv.conf`。可以通过在接口配置文件中添加 `PEERDNS=no` 来阻止自动更新: ```bash sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0 ``` 添加以下内容: ```bash PEERDNS=no ``` 保存后重启网络服务: ```bash sudo systemctl restart network ``` 该方法适用于基于 Red Hat 的系统 [^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值