BIND-DNS

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/

下载对应的稳定版安装

BIND-1

  • 安装
    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/

    配置完成后会给出汇总信息,说明哪些启用、禁用:

    BIND-2

    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


    BIND-3

    生成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

    BIND-4

    BIND-5

    vim etc/named.conf

    BIND-6
    其它可添加选项:

    • recursive-clients 服务器同时为用户执行的递归查询的最大数量。默认值1000,因为每个递归用户使用许多位内存,一般为20KB,主机上的recursive-clients选项值必须根据实际内存大小调整。
    • max-cache-size 服务器缓冲使用的最大内存量,用比特表示。但在缓存数据的量达到这个界限,服务器将会使记录提早过期这样限制就不会被突破。在多视图的服务器中,限制分别使用于每个视图的缓存。默认值没有限制,意味着只有当总的限制被突破的时候记录才会被缓存清除。
    • cleaning-interval 服务器将在cleaning-interval的每一时间中从缓存中清除过期的资源记录。默认为60分钟,如果设置为0,就不会有周期性清理。

    创建、编辑其它区域信息配置文件

    vim etc/named.rfc1912.zones

    BIND-7
    完成之后,使用named-checkconf检查配置文件,无报错即正常:
    创建区域信息文件

    mkdir -p /var/named
    cd /var/named/
    

    使用dig命令获取根信息、生成根区域配置文件,当然,你也可以从其它机器上拷贝

    dig -t NS . @a.root-servers.net. > named.ca

    BIND-8

    区域文件格式:

    • $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

    BIND-9

    vim named.loopback

    BIND-10

    vim example.com.zone

    BIND-11

    vim 172.16.200.zone


    BIND-12

    使用named-checkzone可检查区域文件配置是否正常

    BIND-13

    修改文件权限,使用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/*

    BIND-14

  • 启动服务
    named -u named -g

    使用-g选项会显示启动详细信息

    BIND-15


    BIND-16

    已经成功启动,使用netstat命令可查看到其已开始监听所有接口的DNS请求

    BIND-17

    防火请开放端口

    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
    

     

发表评论

error: Content is protected !!