DNS bind使用
概念介绍
DNS的分类
- 主DNS:配置管理,不提供服务,只用来编辑配置信息,给从DNS提供同步数据
- 从DNS:从主DNS上同步数据信息,对外提供服务
- 缓存DNS:在主DNS和从DNS之间,用来递归解析
- 转发器:forwarder,本地不存储任何解析信息,转发给其他DNS来做解析
记录类型
- SOA:备注信息
- NS:域名解析服务器,也就是某一个域的名称服务器,存储了该域的所有解析信息
- MX:邮件交换记录,优先值越小,优先级越高
- A:Address,域名和地址的映射关系记录,IPv4,输入域名,解析得到地址
- AAAA:IPv6的A记录
- PTR:反向解析记录,地址和域名的映射关系,输入地址,解析得到域名
- CNAME:别名记录
解析原理
DNS的解析是一个树形结构,根节点是.,在根节点以下,全世界有13个节点服务器,所有其他的域名都是直接或间接归属到.域,比如.com、.cn等域名,世界上后面还有一个.。
DNS的查找原理是递归,当客户端去请求某一个域名的地址时,显示查看本地的缓存(可以是本地hosts),如果本地缓存中有记录,则直接返回IP地址开始请求,如果本地缓存中没有,则会向本地DNS服务器去请求该域名,如果DNS服务器上有,则返回本地,本地进行缓存,然后开始请求;如果DNS服务器上没有,则会通过转发器,向上一级DNS服务器去请求,层层递归,直到解析到,或者超出范围。
DNS的服务递归,最大64层。
常用的工具
dig nslookup host
安装过程
安装dns
DNS在linux上安装的名称为bind,如果是要搭建DNS服务器,需要在服务器上,安装bind应用。
yum install -y bind-utils bind bind-devel bind-chroot
编辑主配置文件/etc/named.conf
在安装过程的时候为bind,而实际的配置文件则成为named,其中主配置文件为/etc/named.conf文件,默认情况下,是将该配置文件备份后,重新编写该配置文件。下面是本机安装时的配置文件示例。
[root@master ~]# cat /etc/named.conf
options {
version "1.1.1";
listen-on port 53 {any;};
directory "/var/named/chroot/etc/";
#pid-file "/var/named/chroot/var/run/named/named.pid";
pid-file "/run/named/named.pid";
allow-query { any; };
Dump-file "/var/named/chroot/var/log/binddump.db";
Statistics-file "/var/named/chroot/var/log/named_stats";
zone-statistics yes;
memstatistics-file "log/mem_stats";
empty-zones-enable no;
forwarders {192.168.64.2; };
}; key "rndc-key" {
algorithm hmac-md5;
secret "Eqw4hClGExUWeDkKBX/pBg==";
}; controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
}; logging {
channel warning {
file "/var/named/chroot/var/log/dns_warning" versions 10 size 10m;
severity warning;
print-category yes;
print-severity yes;
print-time yes;
};
channel general_dns {
file "/var/named/chroot/var/log/dns_log" versions 10 size 100m;
severity info;
print-category yes;
print-severity yes;
print-time yes;
};
category default {
warning;
};
category queries {
general_dns;
};
}; include "/var/named/chroot/etc/view.conf";
其中主要的配置点为:
- 端口:53,默认是TCP和UDP都会监听,通常使用UDP,当出现穿越的时候,使用TCP
- zone 配置文件目录:directory,默认放在/var/named/chroot/etc/下
- pid文件:pid文件,在CentOS 7中,默认的pid文件应该是在/run/named/named.pid,如果不在这个地方,named进程会等到超时,而导致启动失败,原因是该文件不可读。这个问题曾经困扰了我好久,最后还是通过看系统日志,才知道的。
- forwarders:转发器,当本地DNS无法解析到是,上级DNS的地址
- rndc-key:动态加载DNS解析信息,通过rndc进行操作,rndc和named之间的交互,是通过rndc-key来进行认证的
- rndc controls:默认监听本地的953端口
- 日志文件定义和使用
rndc配置
主要是配置rndc.key文件和rndc.conf文件,这两个文件默认是不存在的,直接编辑创建就可以了。
[root@master ~]# cat /etc/rndc.key
key "rndc-key" {
algorithm hmac-md5;
secret "Eqw4hClGExUWeDkKBX/pBg==";
};
[root@master ~]# cat /etc/rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "Eqw4hClGExUWeDkKBX/pBg==";
}; options {
default-key "rndc-key";
default-server 127.0.0.1;
default-port 953;
};
在这里配置的key和options,必须要和主配置文件中的一致。
配置view文件
view文件,就好比是zone配置文件,一个概要文件,在该文件中可以定义zone的文件、主从配置关系等等。这里我们以abc.com为例,配置一个view文件。该文件的位置,就是named.conf的include文件位置。
[root@master ~]# cat /var/named/chroot/etc/view.conf
view "View" {
zone "abc.com" {
type master;
file "abc.com.zone";
allow-transfer {
192.168.64.132;
};
notify yes;
also-notify {
192.168.64.132;
};
};
};
配置zone文件
配置好view文件之后,就可以根据view中的zone信息,创建配置zone文件。
[root@master ~]# cat /var/named/chroot/etc/cnpc.com.zone
$ORIGIN .
$TTL 3600 ; 1 hour
abc.com IN SOA op.abc.com. dns.abc.com. (
2000 ; serial
900 ; refresh (15 minutes)
600 ; retry (10 minutes)
86400 ; expire (1 day)
3600 ; minimum (1 hour)
)
NS op.abc.com.
$ORIGIN abc.com.
op A 192.168.64.131
salt A 192.168.64.131
在这个配置文件中,实际上就是配置zone里面的各种解析的信息,比如SOA、NS、A记录等。
启动服务
上面所有文件配置完成之后,就需要可以启动服务了,默认启动服务是使用named用户,所以需要将/var/下的named目录的归属,改为named.named。然后就可以启动服务了。
cd /var
chown -R named.named named
systemctl start named
解析测试
使用dig命令,可以去解析之前定义的A记录
dig @127.0.0.1 salt.abc.com
@是指定DNS服务器。
解析的时候,可以通过查看访问日志,知道dns的使用情况,/var/named/chroot/var/log/dns_log
主从配置
概述
刚才安装了一个DNS服务器,作为某一个zone 的master服务器,现在要为该zone配置一个slave服务器,实现在master上增加DNS记录信息,主动同步给slave节点。主要需要配置的就是master上指定slave,也就是notify,而在slave上,则必须要制定master,一个slave可以同时拥有多个masters。
安装过程
salve的安装过程,和master类似,前面的/etc/named.conf /etc/rndc.key /etc/rndc.conf都是可以完全一样的,唯一不同的是,salve上的view.conf文件需要注意,而zone file文件可以不用写,直接从master服务器上进行同步即可。
salt-cp '192.168.64.132' /etc/named.conf /etc/named.conf
salt-cp '192.168.64.132' /etc/rndc.key /etc/rndc.key
salt-cp '192.168.64.132' /etc/rndc.conf /etc/rndc.conf
salt-cp '192.168.64.132' /var/named/chroot/etc/view.conf /var/named/chroot/etc/view.conf [root@localhost etc]# cat view.conf
view "View" {
zone "abc.com" {
type slave;
file "abc.com.zone";
masters { 192.168.64.131;
};
};
};
在slave的view配置文件中,与master不同的是,type为slave,而其他都不用写,指定一个masters就可以了。
启动服务
当配置好salve节点之后,就可以直接启动了,在启动之后,会自动生成zone file文件,然后通过dig命令,使用本地进行解析,如果能得到正确的返回,就证明这个时候已经同步了。
[root@localhost etc]# dig @127.0.0.1 salt.abc.com ; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7 <<>> @127.0.0.1 salt.abc.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56444
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2 ;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;salt.abc.com. IN A ;; ANSWER SECTION:
salt.abc.com. 3600 IN A 192.168.64.131 ;; AUTHORITY SECTION:
abc.com. 3600 IN NS op.abc.com. ;; ADDITIONAL SECTION:
op.abc.com. 3600 IN A 192.168.64.131 ;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Apr 20 14:56:41 CST 2019
;; MSG SIZE rcvd: 91
同步设置
在master主机上,增加一条A记录,是要修改master的zone配置文件,除了要添加一条A记录之外,还要修改该zone的serial值,如果不修改,是无法同步给slave的。修改完成之后,需要执行rndc reload,动态加载DNS的解析。然后分别在master和slave上进行解析测试,如果都能正常范围,则表示主从同步是生效的。
增加DNS记录
默认修改DNS配置文件时,要修改zone的serial值,在执行rndc reload之后,能够同步给slave节点。
A记录
在zone文件中添加,直接编辑配置文件,比如在abc.com.zone配置文件中增加一条A记录,格式为 域名 A IP,修改完成后,同步给slave,通过dig host都能进行解析
CNAME记录
CNMAE记录是个别名记录,就是将域名A映射到域名B上,实际上解析到的地址是域名B的地址。格式为:
域名A CNAME 域名B
a A 1.2.3.4
b CNAME a
c A 2.3.4.5
mx mx 5 a
mx mx 10 c
[root@master etc]# host b.abc.com 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases: b.abc.com is an alias for a.abc.com.
a.abc.com has address 1.2.3.4
MX记录
也是在zone文件中增加,格式为:
域名 MX PRIORITY 域名
mx MX 5 mail
实际上MX记录,对应的是一个A记录,然后通过A记录,递归查找到最后MX对应的IP地址。
[root@master etc]# host mx.abc.com 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases: mx.abc.com mail is handled by 5 a.abc.com.
mx.abc.com mail is handled by 10 c.abc.com.
同一个MX域名可以对应多条记录,结果按照优先级排列,优先级值越低,优先级越高,解析出来的排序就越高。
PTR记录
PTR记录不仅仅是需要配置zone文件,是需要在zone配置文件view中,重新创建一个zone,然后创建该zone的目录文件,然后才能进行解析,将IP解析成对应的域名。
zone "168.192.in-addr.arpa" {
type master;
file "192.168.zone";
allow-transfer {
192.168.64.132;
};
notify yes;
also-notify {
192.168.64.132;
};
};
然后创建一个192.168.zone的配置文件,编辑解析记录。
[root@master etc]# cat 192.168.zone $TTL 3600 ; 1 hour
@ IN SOA op.abc.com. dns.abc.com. (
2000 ; serial
900 ; refresh (15 minutes)
600 ; retry (10 minutes)
86400 ; expire (1 day)
3600 ; minimum (1 hour)
)
NS op.abc.com.
131.64 IN PTR master.abc.com
实际上的这条解析记录意思是192.168.64.131 对应解析到的域名是master.abc.com
[root@master etc]# host 192.168.64.131 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases: 131.64.168.192.in-addr.arpa domain name pointer master.abc.com.168.192.in-addr.arpa.
解析的结果131.64.168.192.in-addr.arpa master.abc.com.168.192.in-addr.arpa. 实际上要看的就是zone之前的内容,后面的都是zone的名称
增加了PTR记录之后,slave默认是不会自动同步的,因为修改了view文件,这个时候就需要在slave上手动创建zone,和之前的zone一样,从master上进行同步。
TIPS
- DNS可以做简单的LB,因为DNS对应关系是一个多对多的对应关系,在对同一个域名进行解析的时候,会采用轮询的方式,向客户端返回请求的域名对应的地址,也就是说,在一定程度上,能够实现LB负载。
- 智能DNS:根据客户端的地址,来解析到对应的地址,这个方式和CDN缓存差不多,都是基于客户端来进行判断的,保证解析到的地址,是客户端最快能访问到的。
DNS bind使用的更多相关文章
- 第7章 DNS & bind从基础到深入
本文目录: 7.1 DNS必懂基础 7.1.1 域的分类 7.1.2 主机名.域名.FQDN 7.1.3 域的分层授权 7.1.4 DNS解析流程 7.2 DNS术语 7.2.1 递归查询和迭代查询 ...
- DNS(bind)服务器安装和配置
一.前言 DNS 域名系统(英文:Domain Name System,缩写:DNS)是因特网的一项服务.它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网.DNS使用TCP ...
- DNS bind子域授权安装
失败经验:rhel 6.x bind 9.8,两台做子域授权,最后失败.原因不详. 改用rhel 5.5, bind 9.3,同样的配置,就成功了.具体记录一下9.3的配置. 安装:采用安装RHEL时 ...
- 为linux dns (bind named)服务器配置 单独的笔记
注意: 当在把 named.ca文件下载好13个根dns服务器的 全球记录后, 就不再需要别的 dns服务器来辅助获得了. 只要把所有 本地服务器 不能解析的请求, 都发送到 . 点根去就行了, 所以 ...
- dns bind配置教程
实验环境 三台centos7虚拟机,一台ip为192.168.52.130,一台为192.168.52.131,最后一台为192.168.52.132 安装bind 使用yum -y insall b ...
- DNS Bind服务配置解析
DNS域名解析服务(Domain Name System)是用于解析域名与IP地址对应关系的服务,功能上可以实现正向解析与反向解析: 一.DNS服务器工作模式分类: 1.主服务器:在特定区域内具有唯一 ...
- DNS/BIND in Debian
Debian official document:http://www.debian.org/doc/manuals/network-administrator/ch-bind.html Buildi ...
- DNS BIND之rndc介绍及使用
rndc(Remote Name Domain Controllerr)是一个远程管理bind的工具,通过这个工具可以在本地或者远程了解当前服务器的运行状况,也可以对服务器进行关闭.重载.刷新缓存.增 ...
- DNS BIND之dnssec安全介绍
Domain Name System Security Extensions (DNSSEC)DNS安全扩展,是由IETF提供的一系列DNS安全认证的机制(可参考RFC2535).它提供了一种来源鉴定 ...
- DNS BIND配置 配置基本缓存服务器 DNS正向解析 DNS反向解析
一. 缓存服务器配置 1.DNS:BIND Berkeley Internet Name Domain 版本bind97: RPM服务器端包的名字 安装bind-libs bind ...
随机推荐
- 抛开 Spring ,你知道 MyBatis 加载 Mapper 的底层原理吗?
原文链接:抛开 Spring ,你知道 MyBatis 加载 Mapper 的底层原理吗? 大家都知道,利用 Spring 整合 MyBatis,我们可以直接利用 @MapperScan 注解或者 @ ...
- 一文读懂JAVA多线程
背景渊源 摩尔定律 提到多线程好多书上都会提到摩尔定律,它是由英特尔创始人之一Gordon Moore提出来的.其内容为:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍 ...
- 你确信 X-Forwarded-For 拿到的就是用户真实 IP 吗?
X-Forwarded-For 拿到的就是真实 IP 吗? 1.故事 在这个小节开始前,我先讲一个开发中的小故事,可以加深一下大家对这个字段的理解. 前段时间要做一个和风控相关的需求,需要拿到用户的 ...
- 【C++】变量
注意:以下内容摘自文献[1],修改了部分内容. 1.变量:在程序运行期间其值可以改变的量称为变量.一个变量应该有一个名字,并在内存中占据一定的存储单元,在该存储单元中存放变量的值.变量名代表内存中的一 ...
- secureCRT连接liunx(centos6.5)系统步骤以及碰见的问题
1.首先安装secureCRT以及用vmware安装centos6.5系统,用vmware打开centos6.5系统 2.找到liunx系统的ip,在liunx终端用ifconfig找到ip如下图: ...
- 2019-ICLR-DARTS: Differentiable Architecture Search-论文阅读
DARTS 2019-ICLR-DARTS Differentiable Architecture Search Hanxiao Liu.Karen Simonyan.Yiming Yang GitH ...
- Chisel3 - bind - PortBinding
https://mp.weixin.qq.com/s/NaInHsJgOwG03BLNF-wlxQ 介绍Module输入输出端口如何进行绑定. 1. IO() 在定义一个模块 ...
- Blender如何设置中文界面
废话不多说,上图 bingo!!
- Java实现 LeetCode 831 隐藏个人信息(暴力)
831. 隐藏个人信息 给你一条个人信息字符串 S,它可能是一个 邮箱地址 ,也可能是一串 电话号码 . 我们将隐藏它的隐私信息,通过如下规则: 电子邮箱 定义名称 name 是长度大于等于 2 (l ...
- Java实现 LeetCode 166 分数到小数
166. 分数到小数 给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数. 如果小数部分为循环小数,则将循环的部分括在括号内. 示例 1: 输入 ...