etchosts 和etcresolv.conf

etchosts 和etcresolv.conf,第1张

两个文件的作用都是根据域名快速找到对应的IP,这就是DNS的基本功能。

hosts文件的作用相当如DNS,提供IP地址到hostname的对应。早期的互联网计算机少,单机hosts文握念滑件里足够存放所有联网计算机。不过随着互联网的发展,这就远远不够了。于是就出现了分布式的DNS系统。由DNS服务器来提供类似的IP地址到域名的对应。具体可以man hosts。/etc/hosts中包含了IP地址和主机名之间的映射,还包括主机名的别名。

hosts文件的配置格式是: IP FQDN alias,其中全 域名 (FQDN,Fully Qualified Domain Name)是指 主机 名加上全 路径段腊 ,全路径中列出了 序列 中所有域成员。全域名可以从逻辑上准确地表示出主机在什么地方,也可以说全域名是主机名的一种完全表示形式。从全域名中包含的信息可以看出主机在域名树中的位置。

Linux系统在向DNS服务器发出域名解析请求之前会查询/etc/hosts文件,如果里面有相应的记录,就会使用hosts里面的记录。

下面是一个例子文件:

[NSOS1.1 ~]# cat /etc/hosts

127.0.0.1               NS localhost.localdomainlocalhost

192.168.1.13            NS

172.16.2.250            NS liveupdate.netentsec.com

一旦配置完机器的网络配置文件,应该重新启动网络以使修改生效,使用下面的命令来重新启动网络:

/etc/rc.d/init.d/networkrestart

/etc/hosts文件通常含有主机名、localhost和系统管理员经常使用的系统别名,有时候telnet到linux机器要等待很长时间,可以通过在"/etc/hosts"加入客户的机器的IP地址和主机名的匹配项,就可以减少登录等待时间。在没有域名服务器情况下,系统上的所有网络程序都通过查询该文件来解析对应于某个主机名的IP地址,否则,其他的主机名通常使用DNS来解决,DNS客户部分的配置在文件/etc/resolv.conf中。

文件/etc/resolv.conf用来配置DNS,它包含了主机的域名搜索顺序和DNS服务器的地址,每一行应包含一个关键字和一个或多个的由空格隔开的参数,用于设置DNS服务器的IP地址及DNS域名。计算机使用配置好的DNS 服务器将域名解析为对应的IP 地址。

文件格式:

domainname 域名

search 域名

nameserverPrimary_DNS_Server_IP_address

nameserverSecond_DNS_Server_IP_address

合法的参数及其意义如下:

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

最主要是nameserver关键字,如果没指定nameserver就找不到DNS服务器,其它关键字是可选的。

domain 声明主机的域名。很多程序用到它,如邮件系统;当 为没有高轮域名的主机进行 DNS查询时,默认附加这个域名后缀。

search 它的多个参数指明域名查询顺序。当要查询没有域名的主机,主机将在由search声明的域中分别查找。domain和search不能共存;如果同时存在,后面出现的将会被使用。

下面是一个例子文件:

[root@toor~]# cat /etc/resolv.conf

nameserver114.114.114.114

nameserver202.106.0.20

nameserver8.8.8.8

searchlocaldomain

[root@toor ~]#

这几天在调整Openshift Node域名锋山解析的过程中,发现了与DNS相关的一些配置,花了2天时间,终于理出了一个头绪。

首先我们知道,在Linux中,DNS的配置文件位于/etc/resolv.conf,里面主要有三个字段,分别是nameserver, domain, search

我们简单看一下以下例子:

# Generated by NetworkManager

domain example.com

search example.com

nameserver 192.168.1.100

这里domain和search是一个作用,在俩这同时存在时,前者失效。

当访问的域名不能被DNS解析时,resolver会将该域名加上search指定的参数,重新请求DNS,直到被正确解析或试完search指定的列表为止喊神。

这里需要注意一点,在NetworkManager开启的时候,/etc/resolv.conf文件郑基亏在每次NetworkManager服务重启的过程中会被重写。并且当ifcfg-eth0中proto为dhcp是,peerdns默认为yes,所以每次NetworkManager进行重写时,都会获取dhcp client抓到的dns信息对nameserver和search字段进行重写。

peerdns字段的作用域分两种情况:

简单解释一下:

为yes时:1 如果在网卡(ifcfg-eth0)中设置了DNS地址,或者开启了dhcp client,此项默认为yes

为no时: 不会对/etc/resolv.conf进行重写

下面我们来做两个实验:

我建立了一个RHEL7.7的虚拟机和一台WINDOWS2019 DNS server,以下时两台server的基本信息:

RHEL7.7:

hostname: redhat.eubrmb.com

ip address: 192.168.199.130

WIN2019 server:

ip address: 192.168.199.100

当我把RHEL7的网卡设置为如下时,我们先把resolv.conf文件清空,然后再重启NetworkManager,然后再次观察resolv.conf文件的信息:

# echo >/etc/resolv.conf

# systemctl restart NetworkManager

# cat /etc/resolv.conf

现在我们修改一下网卡配置,然后再次清空resolv.conf,并重启NetworkManager后重新查看:

# echo >/etc/resolv.conf

# systemctl restart NetworkManager

# cat /etc/resolv.conf

由此可见,再开启了dhcp之后,无论我们加不加DNS字段,或者加不加PEERNDS=yes,resolv.conf都会被重写

# echo >/etc/resolv.conf

# systemctl restart NetworkManager

# cat /etc/resolv.conf

这里我们看到,在网卡协议为static,DNS字段存在时,就算PEERNDS=no,resolv.conf也会被重写

当我们去掉DNS字段后,重新测试,发现resolv.conf这回未被重写

细心的人会发现,这里search里面和上面用dhcp测试时不太一样,这里少了一个localdomain。之前被这个问题纠结了一天,最后发现,当为dhcp时,search中的字段会带入dhcp client中拿到的一些信息,因为我用的是VMware workstation,所以这里带入了一个localdoamin。在阿里云ECS上并为发现这个问题,这个search domain会截取主机名第一个点之后的名字当作FQDN的suffix。

总结:

当我们需要手动添加DNS server记录,并不希望重启网络后被重写,我们需要把我们的网卡设置调整为static,并设置PEERNDS=no,最后在/etc/resolv.conf中添加nameserver,这样才能达到我们想要的效果


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12228754.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存