xdays

Bind基于DLZ实现智能DNS

简介

在我看来基于Bind的只能DNS方案主要包括两个部分:Geolocation和Dynamic Record。国内的业界对智能DNS的定位也无非这两点,但是我所理解的智能DNS是建立在这两条基础上的智能调度系统,比如我有三个负载能力不同的数据中心,DNS可以根据数据中心的metrics(这里可能包括带宽,服务能力等)实现流量的调度,限于个人水平个人未在这个方向有所实践,这个话题留作以后讨论,所以本文只针对前两个问题。由于Bind本身的配置可运维性比较差,这就引出本文主要讨论的DLZ。

原理

DLZ实际上就是扩展了Bind,将Zonefle的内容放到外部数据库里,然后给Bind配置查询语句从数据库里查询记录。当修改数据库里的记录信息的时候,无需重启Bind,下次客户请求时直接就能返回新的记录了。另外,DLZ本身不支持缓存,所以需要自己根据实际情况解决查询的问题。

安装

注意: 这里我以CentOS7上安装dlz-mysql模块为例。

安装依赖

yum install mariadb-devel gcc wget patch make

下载源码

Bind9.8之前的版本需要打patch,具体可参考DLZ官方文档,Bind9.8之后(包括9.8)的版本已经集成DLZ:

wget ftp://ftp.isc ...

Bind搭建DNS服务系统

简介

Bind是目前应用最广泛的DNS服务器软件,其主要包括服务器实现,解析器库实现和测试三个部分。

说明

本文仅讨论如何把Bind配置成一台DNS域名服务器,关于DNS协议的说明,请参考DNS协议详解

安装

centos

yum install bind bind-libs bind-utils bind-chroot

其中bind-chroot用于让bind运行于chroot模式下。

ubuntu

apt-get install bind9 dnsutils

配置

概述

bind的配置文件为named.conf,没有chroot时位于/etc/named.conf,chroot时位于/var/named/chroot/etc/named.conf下。配置文件由配置语句和注释组成。关于配置的详细说明可参考BIND 9 Administrator Reference Manual

配置语句列表

  • acl 定义一个IP列表名,用于接入控制
  • controls ...

DNS协议详解

基本概念

树是一种数据结构,用来表达一种一对多的关系,一图胜千言。

tree

注意: 图选自《大话数据结构》

需要对树结构的几点说明:

  • 根节点没有父节点,叶节点没有子节点
  • 节点间不能有交叉
  • 很多应用树结构的应用场景,如linux目录结构等

域名

顾名思义,就是一个域的名字。其格式说明如下:

  • 以点分隔,每个字段最长63个字符,总长度最多255个字符(包括点)
  • 域名中可以使用任意的ASCII字符,但是有些自负需要转义(000到040,177到377和不做分隔符的点)​
  • 域名既可以表示一个域也可以表示一个主机,其实可以表示主机是因为它就是子域的根节点,如hp.com

域命名空间

用树结构表示出来的互联网所有域名数据就是域的命名空间。再来一张图说明下:

domain namespace

需要对命名空间有几点说明:

  • 命名空间的根是root用点来表示,严格来说所有的域名最后都有个点,因为都有所以省略了
  • 每个子树对应一个域
  • 把域名用点拆开 ...