Bind
域名系统(英文:Domain Name System,DNS)是因特网的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。DNS 使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
DNS最早于1983年由保罗·莫卡派乔斯(Paul Mockapetris)发明;原始的技术规范在882号因特网标准草案(RFC 882)中发布。1987年发布的第1034和1035号草案修正了DNS技术规范,并废除了之前的第882和883号草案。在此之后对因特网标准草案的修改基本上没有涉及到DNS技术规范部分的改动。
早期的域名必须以英文句号“.”结尾,当用户访问 www.7dark.com 的HTTP服务时必须在址栏中输入:http://www.7dark.com.,这样DNS才能够进行域名解析。如今DNS服务器已经可以自动补上结尾的句号。
Bind是Berkeley Internet Name Domain Service的简写,它是一款实现DNS服务器的开放源码软件。Bind原本是美国DARPA资助伯克利大学(Berkeley)开设的一个研究生课题,后来经过多年的变化发展,已经成为世界上使用最为广泛的DNS服务器软件,目前Internet上半数以上的DNS服务器有都是用Bind来架设的。
官方下载地址:https://www.isc.org/downloads/
下载对应的稳定版安装
- 安装
wget https://www.isc.org/downloads/file/bind-9-9-8/?version=tar-gz tar zxf bind-9.9.8.tar.gz -C /usr/local/src/ cd /usr/local/src/bind-9.9.8/ CFLAGS="-fPIC -O3" ./configure --prefix=/usr/local/bind9 --enable-largefile --enable-threads --enable-rrl --enable-fetchlimit --enable-fixed-rrset --enable-querytrace --with-openssl=/usr/local/openssl/
make;make install
配置不同于RPM安装,源码安装出来需要自己建立配置文件和用户Tips:创建运行用户,早期Linux服务都是以root权限启动和运行的,随着技术的发展,各种服务变得越来越复杂,导致BUG和漏洞越来越多。黑客利用服务的漏洞入侵系统,能获得root级别的权限,从而控制整个系统。为了减缓这种攻击所带来的负面影响,现在服务器软件通常设计为以root权限启动,然后服务器进程自行放弃root,再以某个低权限的系统账号(named)来运行进程。这种方式的好处在于该服务被攻击者利用漏洞入侵时,由于进程权限很低,攻击者得到的访问权限又是基于这个较低权限。
groupadd -g 25 named useradd -g named -u 25 -s /sbin/nologin -M named echo 'export PATH=/usr/local/bind9/bin/:/usr/local/bind9/sbin:$PATH' > /etc/profile.d/bind9.sh source /etc/profile
生成rndc配置文件
rndc-confgen > /usr/local/bind9/etc/rndc.conf cd /usr/local/bind9/
创建、编辑主配置文件named.conf
sed -n 15,23s/"# "//p etc/rndc.conf >> etc/named.conf
vim etc/named.conf
- recursive-clients 服务器同时为用户执行的递归查询的最大数量。默认值1000,因为每个递归用户使用许多位内存,一般为20KB,主机上的recursive-clients选项值必须根据实际内存大小调整。
- max-cache-size 服务器缓冲使用的最大内存量,用比特表示。但在缓存数据的量达到这个界限,服务器将会使记录提早过期这样限制就不会被突破。在多视图的服务器中,限制分别使用于每个视图的缓存。默认值没有限制,意味着只有当总的限制被突破的时候记录才会被缓存清除。
- cleaning-interval 服务器将在cleaning-interval的每一时间中从缓存中清除过期的资源记录。默认为60分钟,如果设置为0,就不会有周期性清理。
创建、编辑其它区域信息配置文件
vim etc/named.rfc1912.zones
完成之后,使用named-checkconf检查配置文件,无报错即正常:
创建区域信息文件mkdir -p /var/named cd /var/named/
使用dig命令获取根信息、生成根区域配置文件,当然,你也可以从其它机器上拷贝
dig -t NS . @a.root-servers.net. > named.ca
区域文件格式:
- $TTL 当有外部DNS服务器对你的DNS的这个领域进行查询时,这个记录会放置在对方DNS服务器的时间。
- [zone] IN SOA [主机名] [管理员email] ([五组更新时间参数])
SOA:起始授权机构,此记录用于识别该区域的主要来源DNS服务器,这个标志代表着master/slave相关的认证、授权资料。不论有没有设定master/slave的架构,都需要设定好。
主机名:Master DNS的主机名称,注意后面的小数点。
管理员Email:本来应该是“root@localhost”,不过因为@以及被作为特殊代码(zone),所以就用小数点来取代,因此email就成为”root.localhost.”
五组数字:Serial、refresh、retry、expire、minimum
serial:该序号作为slave与master更新的依据,一般利用日期来设定。
Refresh:命令slave多久进行一次主动更新。
Retry:如果到了refresh的时间,但是slave却无法连接master时,那么多久之后,slave会再次的主动尝试与主机连线。
Expire:如果slave一直无法与master连接上,那么经过多久的时间后,则命令slave不要在连接master了。
Minimum:没有指定生存期的数据,可以保存在数据库中的时间,即TTL。 - [zone] IN NS [主机名称]
NS:名称服务器,此记录包含了此区域的权威DNS服务器列表
NS后面接的一定是主机名称,代表:这个zone的查询请向后面这部主机要求。所以如果你这个zone有两部以上的DNS服务器负责时,就必须写两个NS,而NS后面接的主机名称必须要有相应的A标记。 - [hostname] IN A [IP]
正向解析的标记,主机对应的ip地址。 - [hostname] IN MX [顺序] [主机名称]
MX:Mail exchanger的简写;MX与MAIL SERVER有关,其用途是邮件转发,MX后面的数值越小越优先,而接的主机名称必须有A记录才可以。 - [hostname] IN CNAME [主机名称]
CNAME:主机别名 - [IP] IN PTR [主机名称]
反向解析配置,PTR: Pointer的简写,后面主机使用完整FQDN(Fully Qualified Domain Name),亦即加上小数点“.”
vim localhost.zone
vim named.loopback
vim example.com.zone
vim 172.16.200.zone
使用named-checkzone可检查区域文件配置是否正常
修改文件权限,使用named用户可读即可
chmod -R 640 /usr/local/bind9/etc/* chgrp -R named /usr/local/bind9/etc/* chmod -R 640 /var/named/* chgrp -R named /var/named/*
- 启动服务
named -u named -g
使用-g选项会显示启动详细信息
已经成功启动,使用netstat命令可查看到其已开始监听所有接口的DNS请求
防火请开放端口
RHEL7之前系统使用iptables
iptables -A INPUT -p tcp --dport 53 -j ACCEPT iptables -A INPUT -p udp --dport 53 -j ACCEPT
7之后系统使用firewall-cmd
firewall-cmd --permanent --add-service=dns firewall-cmd --reload