resolv.conf和hosts

less /etc/hosts

1
2
127.0.0.1       localhost
127.0.1.1 PC-UserName

less /etc/resolv.conf

1
2
nameserver 127.0.1.1
nameserver 172.22.0.1

每当任何应用程序在Linux操作系统中执行DNS查找时,它都会在“/ etc / hosts”和“/etc/resovl.conf”配置文件中查找以解析DNS名称。 在Linux的DNS查找顺序中,使用“/etc/nsswitch.conf”文件。 有两个库libc和glibc用于在Linux中执行此操作,方法是定义DNS查找顺序。

/etc/nsswitch.conf file

/etc/nsswitch.conf文件有一个称作 hosts 的 DNS 查找数据库

1
2
$ less /etc/nsswitch.conf | grep 'hosts'
hosts: files mdns4_minimal [NOTFOUND=return] dns

首先,DNS查找将调查 /etc/hosts 文件来解析域名,然后查看 /etc/resolv.conf 文件来解析主机名。

请注意:DNS查找指令(如nslookup和dig)将忽略 /etc/nsswitch.conf 文件,并始终使用 /etc/resolv.conf 引用DNS服务器。

/etc/hosts

一个包含了域名解析的文本文件。每行包含 ip 地址和对应的域名

/etc/resolv.conf

这是Linux操作系统中的另一个重要文件。 它包含帮助计算机将域名转换为IP地址的信息。

1
2
nameserver 127.0.1.1
nameserver 172.22.0.1

也可以使用常见的共用DNS服务器:

1
2
nameserver 8.8.8.8
nameserver 4.4.4.4

只要第一个DNS服务器正在运行并且活动,所有的绑定请求都会发送到它。 您到达第二个DNS服务器的唯一方法是,如果列表中的之前的DNS服务器已经死亡,并且在LONG超时之后。

上面有个系统默认的DNS解析服务地址127.0.1.1

1
2
$ ps -ef | grep 'dnsmasq'
/usr/sbin/dnsmasq --listen-address=127.0.1.1

ubuntu下有一个本地的dns服务叫做dnsmasq,它是由NetworkManager控制。
它监听的本地地址,–listen-address=127.0.1.1 (ubuntu12.04及之前的版本 是 127.0.0.1), 这个地址是一个本地回环地址而真实的dns服务器地址,是被这个服务管理维护着的由一张图表示就是:
local process -> local dnsmasq -> router -> ISP dns

Dnsmasq 提供 DNS 缓存和 DHCP 服务功能。作为域名解析服务器(DNS),dnsmasq可以通过缓存 DNS 请求来提高对访问过的网址的连接速度。作为DHCP 服务器,dnsmasq 可以用于为局域网电脑分配内网ip地址和提供路由。DNS和DHCP两个功能可以同时或分别单独实现。dnsmasq轻量且易配置,适用于个人用户或少于50台主机的网络。此外它还自带了一个 PXE 服务器。

https://wiki.archlinux.org/index.php/Dnsmasq_(简体中文))

比如ISP分配的DNS server是220.250.64.26,则dnsmasq会将客户端向127.0.0.1:53发出的DNS请求,转发到220.250.64.26:53 。


参考:

赏杯咖啡 🍵 Donate