Linux域名解析 – nsswitch.conf、hosts、resolv.conf和ifcfg-eth0的区别
Table of Contents
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
其中的N是正整数,一般只有一个网卡时,这个N就是0,也就是ifcfg-eth0
,如果有多个网卡(多个网卡就可以设置多个ip),就有ifcfg-eth1
、ifcfg-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)
修改“ifcfg-eth0”后,要重启网卡才能生效:
service network restart
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的。