Linux中的DNS客户端配置

//

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中解析域名,当然,我们可以自己设置解析顺序。来看一个例子:

[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的监听规则。这句话很难理解,我们先来看一下例子:

[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域名的解析,这样就免去了查找上游服务的过程。

本文分享自微信公众号 - DBA随笔(gh_acc2bbc0d447)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Urlteam

关于解决ubuntu 无法解析域名问题

分析一:点击新的网址时非常快的显示出来无法链接,这点证明应该不是别人网站的问题,否则不会有这么快的反应速度。同时登陆本机另外一个系统,可以正常上网,则证明是这个...

8110
来自专栏IMWeb前端团队

Node基础:域名解析DNS(ok)

Nodejs学习手册,基础总结之DNS模块。对从事web开发的同学来说,DNS解析再熟悉不过,在nodejs中也有一个模块可以完成dns解析的工作,使用非常简单...

8130
来自专栏小白程序猿

老牌论坛程序Discuz宣布回归了

相信这个消息很多朋友已经知道了,官方于11月13日发布通知,我也是最近才知道的,就赶紧给大家分享出来!

7620
来自专栏前端资源

20180410博客更换服务器步骤

 * Z-Blog的数据库配置文件是 /zb_users/c_option.php

7800
来自专栏Nodejs技术栈

Node.js DNS (域名服务器) 模块

作者简介:五月君,Nodejs Developer,慕课网认证作者,热爱技术、喜欢分享的 90 后青年,欢迎关注 Nodejs技术栈 和 Github 开源项目...

8210
来自专栏IMWeb前端团队

DNS,node以及反向代理的一些知识和应用

域名系统(英文:Domain Name System,缩写:DNS)是因特网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互...

7410
来自专栏python3

H3CNE实验(Vlan/Ftp/DHC

2、SW1的Ethernet1/0/1和 Ethernet1/0/5分别属于Vlan1 和Vlan2

8120
来自专栏漫漫全栈路

DNS/HOST 详解

Hosts文件是一个纯文本文件,用记事本就可以将其打开。这个文件是根据TCP/IP for Windows 的标准来工作的,它的作用是包含IP地址和Host n...

7710
来自专栏云服务器活动

腾讯云服务器搭建网站只需7个步骤(宝塔面板+wordpress)

建网站本身是没有什么难度的,只是配套需要的东西有些繁琐,我们需要提前准备一些软件之类的必备的东西,其中主要包括:

9700

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励