Total Pageviews

Sunday 19 January 2020

域名解析 – nsswitch.conf、hosts、resolv.conf和ifcfg-eth0的区别

nsswitch.conf

我们知道计算机之间的通讯是通过ip地址进行的,而对于域名,最终其实是要转成ip的,于是就有了DNS(Domain Name System,即域名系统启动),对于CentOS系统(其他Linux应该也是如此),当它请求一个域名时,它会去查找/etc/hosts/etc/resolv.conf两个文件,hosts文件对应的是直接指定的DNS记录,而resolv.conf文件对应的是域名服务器ip地址,先查找哪个文件,后查找哪个文件,是由/etc/nsswitch.conf决定的,但默认情况下,/etc/nsswitch.conf文件指定的是先查看/etc/hosts文件:
#hosts:     db files nisplus nis dns
hosts:      files dns
其中的files就是指/etc/hosts文件,而“DNS”就是指DNS服务器(而DNS服务器是要从/etc/resolv.conf中查找的),而files放在dns前面,就代表先从/etc/hosts文件中搜索。
如果hosts文件中不存在这个域名,它才会去resolv.conf查找域名服务器地址,然后再去请求域名服务器,最终由域名服务器把请求的域名对应的实际ip返回给Linux系统。

hosts

hosts文件路径是/etc/hosts,它其实是最早的用于实现“域名”这个概念的文件,就纯粹为了方便,在hosts文件中写了一个名称与ip的对应列表,比如我们最熟悉的localhost就在hosts文件中被指向了回本的127.0.0.1ip:
127.0.0.1   localhost

ifcfg-eth0

在Linux服务器中,设置ip地址是在以下文件中设置的:
/etc/sysconfig/network-scripts/ifcfg-ethN
Bash
其中的N是正整数,一般只有一个网卡时,这个N就是0,也就是ifcfg-eth0,如果有多个网卡(多个网卡就可以设置多个ip),就有ifcfg-eth1ifcfg-eth2、……。
但是ifcfg-eth0除了可以设置ip信息,还能设置DNS(毕竟ip跟域名本身就有对应关系),一般是设置两个域名“DNS1”和“DNS2”:
DEVICE=eth0         #表示该配置用于eth0网卡
ONBOOT=yes          #表示系统启动时启用该文件
IPADDR=10.37.129.5 #静态ip
NETMASK=255.255.255.O #子网掩码
DNS1=223.5.5.5      #DNS1(主用DNS)
DNS2=180.76.76.76   #DNS2(备用DNS)
Ini
修改“ifcfg-eth0”后,要重启网卡才能生效:
service network restart
Bash

resolv.conf

刚开始讲nsswitch.conf时就说到,域名服务器ip就是从“resolv.conf”文件中读取的,那我们设置Linux的DNS,在“resolv.conf”中设置就好了吗?
答:是可以在“resolv.conf”中设置,但不提倡。因为“resolv.conf”文件经常是根据“ifcfg-eth0”中的配置的DNS1/DNS2自动生成的(重启网卡时就会生成),格式是这样的:
# Generated by SolusVM
nameserver 8.8.8.8
nameserver 8.8.4.4
如果你手动修改这个文件,修改后马上生效,不需要重启网卡。
如果你不想“resolv.conf”被覆盖,那么把“ifcfg-eth0”中的“PEERDNS”的值修改为“no”即可,当你设置使用DHCP的时候,PEERDNS默认值是yes的。