前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux中的DNS客户端配置

Linux中的DNS客户端配置

作者头像
AsiaYe
发布2019-12-04 11:58:21
18K0
发布2019-12-04 11:58:21
举报
文章被收录于专栏:DBA随笔

//

Linux中的DNS客户端配置

//

最近在搞MGR+Consul的MySQL高可用,在使用Consul域名服务的时候,会用到Linux操作系统中的DNS客户端配置,这块儿的知识之前只是在用,今天简单整理一下,希望能有一点点用。

我们知道,DNS服务器是将域名解析成IP的地方,例如我们输入www.baidu.com,它会给我们解析出来一个地址。Linux中,DNS进行解析的过程大概是下面这样的:

首先,我们拿到一个域名aaa.mysql.consul.cn,然后在Linux系统中先去找/etc/nsswitch.conf文件去确定这个域名的解析顺序,该文件决定的是域名解析到底从/etc/hosts文件中开始解析还是从/etc/resolv.conf文件中开始解析,一般情况下是先从/etc/hosts中解析域名,当然,我们可以自己设置解析顺序。来看一个例子:

代码语言:javascript
复制
[root@]#cat /etc/nsswitch.conf |grep hosts
#hosts:     db files nisplus nis dns
hosts:      files dns

我们可以看到,files就是使用/etc/hosts,而dns则是使用/etc/resolv.conf的dns服务器来进行搜寻的。当然,如果我们调换files和dns的位置,就可以先使用/etc/resolv.conf来解析域名,然后再使用/etc/hosts来解析域名。

这里主要说明两个重要的文件,其中一个是/etc/resolv.conf文件,另外一个是/etc/dnsmasq.conf文件,先来看第一个文件/etc/resolv.conf.

/etc/resolv.conf文件是linux系统的dns配置文件,它的配置格式比较简单,其中只有四种情况:

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

其中,nameserver是最重要的,其他的都是可选的,nameserver可以设置多个,当第一个nameserver无法解析域名的时候,才会用到第二个nameserver,例如我们进行如下配置:

nameserver 1.1.1.1

nameserver 2.2.2.2

那么当我们拿到一个域名的时候,DNS解析的顺序将会是先将域名发送到1.1.1.1上进行解析,如果解析不出来,那么再发送到2.2.2.2上进行解析,一般情况,nameserver的指定不要超过3个。

为什么nameserver的设置最好不要超过3个?

因为如果超过3个,那么如果是我们所在的网络区域发生问题,导致无法练级到DNS服务器,那么我们的主机还是会向每一个DNS服务器发出联机的要求,每次联机都有timeout时间的等待,这会导致非常多的时间浪费。

第二个文件是/etc/dnsmasq.conf,要想了解这个文件的内容,首先需要知道DNSmasq的作用。DNSmasq是一个轻量级的网络基础服务,它可以用来配置Linux服务器的DNS和DHCP。关于DNSmasq的配置,一般都存在于两个地方:

/etc/dnsmasq.d/ 文件夹(自定义配置)

/etc/dnsmasq.conf 文件

当我们应用程序传入一个域名的时候,这两个文件加载顺序为先加载/etc/dnsmasq.d/*.conf来获取相关IP地址,如果没有相关文件,则使用/etc/dnsmasq.conf文件来获取相关的IP地址。

DNSmasq的原理如下:

当我们的本机应用访问主机的/etc/resolv.conf中的nameserver来获取DNSServer,该文件会将该请求指向DNSmasq中配置的server,前提是配置了dnsmasq的监听规则。这句话很难理解,我们先来看一下例子:

代码语言:javascript
复制
[root@  ~]# cat /etc/resolv.conf 
# file get from config server
nameserver 127.0.0.1
nameserver 1.1.1.1

[root@  ~]# cat /etc/dnsmasq.conf
#resolve-file=/etc/resolv.dnsmasq.conf
listen-address=127.0.0.1
strict-order
cache-size=2048
server=10.10.10.10

我们先解释下dnsmasq.conf文件中的内容:

resolve-file

定义dnsmasq从哪里获取上游DNS服务器的地址, 默认是从/etc/resolv.conf获取,上面配置的文件是/etc/resolv.dnsmasq.conf

listen-address

定义dnsmasq监听的地址,默认是监控本机的所有网卡上,可以配置为127.0.0.1,默认端口是53

strict-order  

表示严格按照resolv-file文件中的顺序从上到下进行DNS解析

server

指定dnsmasq程序使用哪个DNS服务器进行解析,我们设置的是10.10.10.10

对于这些参数,有个概念即可,可以看到,/etc/resolv.conf中配置了nameserver为127.0.0.1,则在收到域名的时候,会先从本地地址127.0.0.1尝试解析域名,而我们的dnsmasq监听的就是本地地址127.0.0.1的53这个默认端口,所以,发给/etc/resolv.conf的域名解析请求,会从dnsmasq中去解析,如果dnsmasq解析不了,但是配置了resolve-file参数,则会使用上面的配置参数中的文件/etc/resolv.dnsmasq.conf去尝试解析,我们把该文件中配置的DNS称之为上游DNS。

本机情况下DNS的解析规则图如下:

局域网内的DNS解析规则图如下:

可以看到,本地和局域网内的DNS解析规则唯一的不同是局域网内的DNS解析可以绕过/etc/resolv.conf文件而直接从DNSmasq中进行解析。

跟consul有什么关系?

因为我们在做基于MGR+consul的高可用改造的时候,会用到consul的域名服务,consul的域名服务是在MySQL服务器上的,我们的应用服务器一般和MySQL服务器是处于同一个机房的,所以可以直接配置DNSmasq配置文件中的server来实现对consul域名的解析,这样就免去了查找上游服务的过程。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档