使用BIND系统和Mysql数据库构建智能DNS系统

合集下载

智能dns原理

智能dns原理

智能dns原理
智能DNS原理。

智能DNS(Domain Name System)是一种基于智能算法的域名解析系统,它能够根据用户的需求和网络环境动态地选择最优的解析结果,从而提供更快速、可靠的网络访问体验。

智能DNS的原理主要包括智能解析、负载均衡和智能调度三个方面。

首先,智能DNS的核心在于智能解析。

传统的DNS解析是根据域名的解析记录直接返回对应的IP地址,而智能DNS则会根据用户的地理位置、网络质量、服务器负载等因素动态地选择最优的IP地址。

这样一来,用户可以更快速地访问到最近、最稳定的服务器,从而提高访问速度和稳定性。

其次,智能DNS还包括负载均衡的原理。

在大型网站或服务集群中,可能会有多台服务器提供相同的服务。

智能DNS会根据服务器的负载情况,动态地将用户的请求分发到负载较低的服务器上,从而避免单台服务器过载,保证整个系统的稳定性和可靠性。

最后,智能调度也是智能DNS的重要原理之一。

智能调度会根
据用户的访问需求和网络状况,选择最优的访问路径和服务器,从
而最大程度地提高访问速度和稳定性。

这种智能调度可以使用户在
不同网络环境下都能获得最佳的访问体验,无论是在家、在办公室
还是在旅途中。

总的来说,智能DNS的原理是基于智能算法的域名解析系统,
它通过智能解析、负载均衡和智能调度等方式,为用户提供更快速、可靠的网络访问体验。

通过不断优化和调整,智能DNS能够适应不
同的网络环境和用户需求,为用户带来更好的上网体验。

DNS

DNS
• BIND (Berkeley Internet Name Domain ) – Berkeley University – ISC • 组成 – 域名系统服务器(named) – 域名系统解析库 – 域名系统服务器调试工具 • 版本 – BIND V4 – BIND V8 – BIND V9
4、BIND
DNS的特点
• DNS的特点:
* 树形结构:
* 采用Client/Server工作方式;
* 一个Domain一般是一个工作站群,可有一 个主域名服务器及若干辅域名服务器; * 应用层协议是标准TCP/IP协议的一个组成部 分。
DNS结构与作用机制

DNS树状结构图
root
最高级域名
.
edu ac 163 albert info mit www wisc cs ftp
选项 domaiearch
nameserver
指定域名搜索表(最多六个域名参数)
列出域名服务器的IP地址(最多可以出现三个nameserver指令) 为解析器定义处理方式,常用的选项有: rotate 打开客店端轮询查询选项。当nameserver中定义多个 域名服务器时,进行轮询查询
8、DNS协议的简单分析
1、什么是DNS
什么是DNS
DNS (英文单词的全称是:Domain Name System,域名系统), DNS是因特网的一项核心服务,它作为可以将 域名和IP地址相互映射的一个分布式数据库, 能够使人更方便的访问互联网,而不用去 记住能够被机器直接读取的IP数串
DNS作用
2、区文件
• 定义一个区的域名信息,通常也称域名数 据库文件。每个区由若干资源记录和区文 件指令构成。
9.1 资源记录

Linux运维实战之DNS(bind)服务器的安装与配置

Linux运维实战之DNS(bind)服务器的安装与配置

Linux运维实战之DNS(bind)服务器的安装与配置上次博⽂我们讨论了DNS的基础,本次博⽂我们重点来看看如何配置⼀台DNS服务器。

【本次博⽂的主要内容】bind服务器简介(包括客户端⼯具dig的介绍)配置正向解析DNS服务器配置反向解析DNS服务器配置辅助DNS服务器并在主辅之间实现区域传送⼀、BIND服务器简介:Bind是Berkeley Internet Name Domain Service的简写,它是⼀款实现DNS服务器的开放源码软件。

Bind原本是美国DARPA资助伯克利⼤学(Berkeley)开设的⼀个研究⽣课题,后来经过多年的变化发展,已经成为世界上使⽤最为⼴泛的DNS服务器软件,⽬前Internet上半数以上的DNS服务器有都是⽤Bind来架设的。

【什么是“服务”及服务的特性】1、什么是套接字:套接字socket,简单来说就是IP:port(IP地址端⼝对)。

以电话系统为例,电话的通话双⽅相当于相互通信的两个进程,区号是它的IP地址;区内⼀个单位的交换机相当于⼀台主机,主机分配给每个⽤户的局内号码相当于socket号。

任何⽤户在通话之前,⾸先要使⽤⼀部电话,相当于申请⼀个socket;同时要知道对⽅的号码,相当于对⽅有⼀个固定的socket。

然后向对⽅拨号呼叫,相当于发出连接请求(假如对⽅不在同⼀区内,还要拨对⽅的区号,相当于给出⽹络地址)。

对⽅假如在场并空闲(相当于通信的另⼀主机开机且可以接收连接请求),拿起电话话筒,双⽅就可以正式通话,相当于连接成功。

双⽅通话的过程,是⼀⽅向电话机发出信号和对⽅从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。

通话结束后,⼀⽅挂起电话相当于关闭socket,撤销连接。

端⼝:TCP:0~65535UDP:0~65535⼩于1024的端⼝为知名端⼝;Linux系统中0~1023的端⼝只有root⽤户有开放关闭的权利(服务都是以root⽤户⾝份启动,之后以⼀个系统⽤户的⾝份运⾏。

域名系统中的DNS代理如何配置与使用(二)

域名系统中的DNS代理如何配置与使用(二)

域名系统中的DNS代理如何配置与使用一、什么是DNS代理DNS代理(Domain Name System Proxy)是一种位于用户和DNS 服务器之间的中间服务器,用于转发和缓存DNS查询请求,以提供更快速和可靠的域名解析服务。

DNS代理可以优化网络请求并减少响应时间,让用户可以更快速地访问Internet资源。

二、配置DNS代理的步骤1. 选择DNS代理软件DNS代理软件有多种选择,如Bind、Unbound、Dnsmasq等,根据实际需求选择一个合适的软件进行配置。

2. 安装和配置DNS代理软件安装所选软件后,进入软件的配置文件,进行相应的配置。

大部分的DNS代理软件配置文件都提供了详细的注释和说明,让用户可以根据自身需求进行设置。

一般的配置内容包括:- 绑定监听地址和端口:指定DNS代理监听的IP地址和端口号。

- 设置上游DNS服务器:指定DNS代理将查询请求转发至哪个DNS服务器,可以设置多个上游DNS服务器以提高可靠性。

- 缓存设置:设置DNS缓存的大小、过期时间等参数,以调整缓存的性能和使用。

3. 启动和测试DNS代理配置完成后,启动DNS代理软件,并进行测试以验证配置的正确性。

可以通过使用nslookup或dig等工具,查询指定域名解析的结果是否正确,并确认响应时间是否有所改善。

三、DNS代理的使用场景1. 内网访问互联网某些情况下,内部网络无法直接连接到互联网,而需要通过代理服务器进行访问。

此时,配置一个DNS代理将查询请求转发至外部的DNS服务器,可以为内部网络提供更可靠和高效的域名解析服务。

2. 加速访问速度DNS代理可以缓存查询结果,当用户再次查询同一个域名时,可以直接从缓存中返回结果,避免多次向上游DNS服务器发送请求,从而提高访问速度。

特别是对于一些常访问的域名,缓存机制可以显著减少响应时间。

3. 过滤恶意网站通过配置DNS代理,可以将恶意域名或访问限制的域名转发到特定的页面或拒绝访问,从而起到过滤恶意网站的作用。

DNS(2)--bind服务介绍及配置文件语法格式

DNS(2)--bind服务介绍及配置文件语法格式

DNS(2)--bind服务介绍及配置⽂件语法格式⽬录1. bind服务1.1 bind概述BIND 是由美国加州⼤学开发并且维护的,BIND是⼀个开源、稳定、且应⽤⼴泛的DNS服务。

开源:指 BIND 服务源代码是开放的;稳定:指 BIND 服务运⾏⾮常稳定;⼴泛:政府企业、单位机构、学校、等;BIND提供域名解析服务、权威域名服务、DNS调试⼯具:域名解析服务:将域名解析为IP地址;权威域名服务:能从该服务器查询到完整域名对应的IP地址,则这台服务器就算权威解析;DNS调试⼯具:主要提供DNS客户端调试⼯具,供客户端使⽤;1.2 bind程序包结构安装bind[root@dns01 ~]# yum install bind bind-utils[root@dns01 ~]# rpm -q bindbind-9.11.4-16.P2.el7.x86_64其中:bind-utils:bind客户端程序集,例如dig, host, nslookup等;bind:提供的dns server程序、以及⼏个常⽤的测试程序;bind-libs:被bind和bind-utils包中的程序共同⽤到的库⽂件;bind包⽂件:bind的system的unit⽂件:/usr/lib/systemd/system/named.servicebind主配置⽂件:/etc/named.conf主程序⽂件:/usr/sbin/namedbind⼦配置⽂件:/etc/named.rfc1912.zones区域解析数据库⽂件,也就是IP地址与域名的对应关系存放的⽬录:/var/namedbind的⽇志⽂件默认存放在/var/log/messages⽂件中。

1.3 bind配置⽂件详解1.3.1 bind配置⽂件1.3.1.1 bind主配置⽂件主配置⽂件组成部分::options {} :全局选项(监听端⼝、数据⽂件存储位置、缓存位置、权限等)logging {} :服务⽇志选项zone . {} :⾃定义区域配置include :包含其他的⽂件主配置⽂件注意事项语法⾮常严格;⽂件权限属主 root ,属组 named ,⽂件权限 640;配置⽂件各个字段意义:[root@dns01 ~]# cat /etc/named.confoptions {#监听的地址和端⼝,localhost表⽰监听在本机所有地址上;listen-on port 53 { localhost; };listen-on-v6 port 53 { ::1; };#区域数据库⽂件存放的⽬录;directory "/var/named";#dns解析过内容的缓存⽂件dump-file "/var/named/data/cache_dump.db";#静态解析⽂件(⼏乎不⽤)statistics-file "/var/named/data/named_stats.txt";#内存的统计信息memstatistics-file "/var/named/data/named_mem_stats.txt";recursing-file "/var/named/data/named.recursing";secroots-file "/var/named/data/named.secroots";#允许谁向本台DNS发起查询请求(localhost|ip|any);allow-query { any; };#本DNS是否提供递归请求服务,yes表⽰提供,no表⽰不提供;recursion yes;dnssec-enable yes;dnssec-validation yes;/* Path to ISC DLV key */bindkeys-file "/etc/named.root.key";managed-keys-directory "/var/named/dynamic";pid-file "/run/named/named.pid";session-keyfile "/run/named/session.key";};#控制⽇志输出的级别以及输出的位置logging {channel default_debug {file "data/named.run";severity dynamic;};};#默认可以对任何域名提供解析服务;因为named.ca中存储的是全球根域服务器;zone "." IN {type hint;#区域配置⽂件名称;file "named.ca";};#包含的其他⽂件;include "/etc/named.rfc1912.zones";include "/etc/named.root.key";1.3.1.2 bind区域配置⽂件可以使⽤bind来解析⾃定义的的域名,需要配置⾃定义的区域解析⽂件。

DNS系统建设方案(初稿-西默响应文件)

DNS系统建设方案(初稿-西默响应文件)

DNS系统建设方案(初稿)注:以下内容为通过跟用户进一步沟通之后,了解整理出的需求和技术规范,请认真查看各条内容,并进行解答,是否能够满足。

如果不能满足,请提出来,有更好的建议都可以提出来,我们好及时跟用户沟通,进行修改。

电信目前的内网DNS系统于2008年建成,采用的是2台服务器分别安装BIND 软件提供DNS服务的方式,2台DNS互为备份,统一接入维护公司DMZ区。

自建成至今为门户、OA等少量系统提供DNS服务,而前台对大量其他系统的访问均是采用直接通过IP地址的方式。

2013年以来随着EDC第三机房、云平台的建设,其部门已建立起异地双活双数据中心。

随着大量的IT系统向云平台的迁移,为了保障各系统的稳定、可靠、迁移,为了实现应用的高可用性,有必要将目前直接通过IP地址访问MBOSS系统的方式改成通过域名访问。

而当前的DNS系统无论从组网结构、容量处理能力以及安全防护方面存在诸多问题,因此,亟需建设一套全新的DNS系统,以满足双活双数据中心环境下应用高可用性的需求。

1. 域名系统概述1.1. 域名服务体系概述域名服务是一种互联网应用层资源的寻址服务,是其他互联网络应用服务的基础。

常见的互联网络应用服务有Web服务,电子邮件服务,FTP服务等,它们都是以域名服务为基础,来实现系统内部资源的寻址和定位的。

域名解析服务是以树型拓扑结构来定义的,由不同类别的域名解析服务提供机构负责不同级域名的解析服务。

整个域名服务系统从职能上看,包括两大类服务:即权威域名服务(Authoritative DNS)和递归域名服务(Recursive DNS):(1)权威域名服务是指拥有某个区的域名信息,并为该区提供域名解析的服务。

权威域名服务通常面向的不是终端用户。

提供权威域名服务的设备即权威域名服务器,是指对于某个或者多个域具有授权的服务器,权威服务器保存着其所拥有授权的域的原始域名资源记录信息。

简单来说,权威域名服务器中拥有域名和对应的IP地址之间的原始数据并在接到请求后对外发布。

FreeBSDBIND平台智能DNS服务器架构

FreeBSDBIND平台智能DNS服务器架构本文档基于FreeBSD、BIND平台,Win用户请回避,没有FreeBSD基础的用户请回避。

Linux 或者其他Unix用户可以作为参考文档。

配置步骤:1. 前言2. 软件列表3. 安装BIND 94. 配置BIND 95. 测试BIND 96. 添加一个NS地址7. 添加一个域名8. 测试域名一、前言本文假设你有一定的FreeBSD操作经验,懂得日常的FreeBSD操作,有良好的耐心,可以把文档看完,可以处理突发的问题。

本文再假设你已经有了一个域名,并且已经指向所操作的服务器,服务器的/etc/rc.conf已经正确的设置此域名。

在本文里面,此域名为/doc/d417764321.html,,IP为219.132.1.1。

/etc/rc.conf如下所设置hostname="/doc/d417764321.html," #机器的域名,请酌情修改ifconfig_fxp0="inet 219.132.1.1 netmask 255.255.255.0" #此行可能有所不同,请别照抄。

fxp0为我机器上面的网卡。

二、软件列表本文所用到的软件可从以下地址获取。

连接地址最后更新为2005/12/12BIND 9.3.1ftp:///doc/d417764321.html,/isc/bind9/9.3. 1/bind-9.3.1.tar.gz三、安装BIND 9我们假设你已经把BIND 9使用fetch或者wget到/root/下,并且已经su为root。

# tar zxvf bind-9.3.1.tar.gz# cd bind-9.3.1# ./configure# make# make install# make clean到此,BIND 9已经安装上了。

如果安装过程中出现什么问题,一般不会是你的人品有问题,请分析错误信息,把缺少的包给安装上。

Ubuntu配置DNS服务器--bind

Ubuntu配置DNS服务器--bind3. BIND9 的安装与配置3.1 bind简介BIND (Berkeley Internet Name Domain)是Domain Name System (DNS) 协议的一个实现,提供了DNS主要功能的开放实现,包括* 域名服务器(named)* DNS解析库函数* DNS服务器运行调试所用的工具是一款开放源码的DNS服务器软件,由美国加州大学Berkeley分校开发和维护的,按照ISC的调查报告,BIND是世界上使用最多最广泛的域名服务系统。

不论你的邮件服务器,WEB服务器或者其他的services如何的安全可靠,DNS的故障会给你带来用户根本无法访问这些服务。

BIND,也是我们常说的named,由于多数网络应用程序使用其功能,所以在很多BIND的弱点及时被发现。

主要分为三个版本:v41998年多数UNIX捆绑的是BIND4,已经被多数厂商抛弃了,除了OpenBSD还在使用。

OpenBSD核心人为BIND8过于复杂和不安全,所以继续使用BIND4。

这样一来BIND8/9的很多优点都不包括在v4中。

v8就是如今使用最多最广的版本,其详细内容可以参阅BIND 8+ 域名服务器安全增强v9最新版本的BIND,全部重新写过,免费(但是由商业公司资助),也添加了许多新的功能(但是安全上也可能有更多的问题)。

BIND9在2000年十月份推出,现在稳定版本是9.3.2。

3.2 软件的相关资源官方网站:/最新版本: 9.3.2 /sw/bind/bind9.3.php#download帮助文档:/sw/bind/配置文件样例:/bind.htmlFAQ: /getOpenSourceResource.php?id=6 3.3 配置环境环境:GNU/Linux Debian/testing Linux 2.6.8-2-386版本:bind9 9.3.2-2测试域名:测试ip: 192.168.102.47 主域名服务器192.168.102.48 纯缓存域名服务器192.168.102.49 辅助域名服务器192.168.102.49 测试客户机3.4 配置文件说明安装bind9的命令:~# aptitude update~# aptitude install bind9 bind9-host dnsutils配置文件族:# ls /etc/bind/ -ltotal 44-rw-r--r-- 1 root root 237 Jan 16 2006 db.0-rw-r--r-- 1 root root 271 Jan 16 2006 db.127-rw-r--r-- 1 root root 237 Jan 16 2006 db.255-rw-r--r-- 1 root root 353 Jan 16 2006 db.empty-rw-r--r-- 1 root root 256 Jan 16 2006 db.local-rw-r--r-- 1 root root 1507 Jan 16 2006 db.root-rw-r--r-- 1 root bind 1611 Jan 16 2006 named.conf-rw-r--r-- 1 root bind 165 Jan 16 2006 named.conf.local-rw-r--r-- 1 root bind 672 Jan 16 2006 named.conf.options-rw-r----- 1 bind bind 77 Aug 4 08:41 rndc.key-rw-r--r-- 1 root root 1317 Jan 16 2006 zones.rfc1918配置文件说明:named.conf设置一般的named参数,指向该服务器使用的域数据库的信息源named.conf.optionsdb.root根服务器指向文件,由Internet NIC创建和维护,无需修改,但是需要定期更新db.locallocalhost正向区文件,用于将名字localhost转换为本地回送IP地址(127.0.0.1) db.127localhost反向区文件,用于将本地回送IP地址(127.0.0.1)转换为名字localhost其中,主配置文件/etc/named.conf的配置语句命令用法acl 定义IP地址的访问控制清单control 定义ndc使用的控制通道include 把其他文件包含到配置文件中key 定义授权的安全密钥logging 定义日志写什么,写到哪opitons 定义全局配置选项和缺省值server 定义远程服务器的特征trunsted-keys 为服务器定义DNSSEC加密密钥zone 定义一个区默认情况下,内容如下:include "/etc/bind/named.conf.options";zone "." {type hint;file "/etc/bind/db.root";};zone "localhost" {type master;file "/etc/bind/db.local";};zone "127.in-addr.arpa" {type master;file "/etc/bind/db.127";};zone "0.in-addr.arpa" {file "/etc/bind/db.0";};zone "255.in-addr.arpa" {type master;file "/etc/bind/db.255";};include "/etc/bind/named.conf.local";其中type项的值:master:表示定义的是主域名服务器slave :表示定义的是辅助域名服务器hint:表示是互联网中根域名服务器在Debian环境中,options语句的配置内容,被移至named.conf.options文件中:options {directory "/var/cache/bind";// If there is a firewall between you and nameservers you want// to talk to, you might need to uncomment the query-source// directive below. Previous versions of BIND always asked// questions using port 53, but BIND 8.1 and later use an unprivileged// port by default.// query-source address * port 53;// If your ISP provided one or more IP addresses for stable// nameservers, you probably want to use them as forwarders.// Uncomment the following block, and insert the addresses replacing// the all-0's placeholder.//可以将下面的注释去掉添加原来的dns (可加多个)// forwarders {// 0.0.0.0;// };auth-nxdomain no; # conform to RFC1035};3.5 创建主域名服务器a. 首先, 在在192.168.102.47机器上安全bind9b. 使用编辑器,比如vi,编辑配置文件/etc/bind/named.conf注:在ubuntu中还有一个/etc/bind/named.conf.local (效果相同)加入如下内容zone "" {type master; //定义此区为主服务器file "/etc/bind/db.mydebian"; //指定区资源文件的位置};zone "102.168.192.in-addr.arpa" {type master; //定义此区为主服务器file "/etc/bind/db.192"; //指定区资源文件的位置};c. 创建区资源文件:创建区资源文件/etc/bind/db.mydebian内容如下;; BIND data file for local loopback interface;$TTL 604800$ORIGIN .@ IN SOA . . (2006080401 ; Serial604800 ; Refresh86400 ; Retry2419200 ; Expire604800 ) ; Negative Cache TTL;@ IN NS ns@ IN MX 0 .@ IN A 192.168.102.47ns IN A 192.168.102.47www IN A 192.168.102.47webserver IN CNAME wwwmail IN A 192.168.102.47ftp IN A 192.168.102.48ns2 IN A 192.168.102.48ns3 IN A 192.168.102.49第一行是TTL设定,生存时间记录字段。

bind9用法

bind9用法bind9是一款广泛使用的域名系统(DNS)服务器软件。

它具有强大的功能和灵活的配置选项,适用于个人用户、企业和ISP等各种场景。

下面是关于bind9用法的详细介绍。

bind9可以用于设置本地DNS服务器。

通过将bind9配置为本地DNS服务器,用户可以将域名解析请求直接发送给bind9,而不是向互联网上的公共DNS服务器发出请求。

这样可以提升DNS查询速度,并且可以对域名解析进行自定义配置,例如添加自定义的域名转发规则或屏蔽特定域名。

bind9还可以用于配置区域文件。

在bind9中,每个域名都对应着一个区域文件,其中包含了该域名下所有主机的信息。

通过配置区域文件,用户可以指定域名解析的具体规则,例如将特定的子域名指向特定的IP地址,或者实现反向解析等功能。

通过对区域文件的灵活配置,用户可以精确控制域名解析的行为。

bind9还支持设置DNS转发。

当本地DNS服务器无法解析域名时,bind9可以将解析请求转发给其他的DNS服务器。

用户只需要在bind9的配置中指定转发的DNS服务器IP地址即可。

这样可以充分利用其他DNS服务器的资源,加速域名解析过程。

bind9还提供了安全性配置选项。

用户可以通过设置访问控制列表(ACL)来限制对bind9服务器的访问,防止未经授权的请求。

同时,bind9还支持DNSSEC(DNS安全扩展)协议,可以对域名解析结果进行数字签名,提供数据完整性和身份验证。

bind9是一款功能强大、灵活配置的DNS服务器软件。

无论是设置本地DNS服务器、配置区域文件、进行DNS转发,还是增强安全性,bind9都能提供强大的功能和灵活的选项。

通过合理的配置和使用,bind9能够有效地提升域名解析性能和安全性。

双线智能解析DNS服务器搭建指南

什么是DNSDNS(DomainNameSystem)是"域名系统〞的英文缩写,是一种组织成域层次构造的计算机和网络效劳命名系统,它用于TCP/IP网络,它主要是用来通过用户亲切而友好的名称代替枯燥而难记的IP地址以定位相应的计算机和相应效劳。

因此,要想让亲切而友好的名称能被网络所认识,则需要在名称和IP地址之间有一位"翻译官〞,它能将相关的域名翻译成网络能承受的相应IP地址。

DNS就是这样的一位"翻译官〞。

什么是双线智能DNS解析双线智能解析是针对目前电信与网通互联互通的问题推出的一种DNS解决方案。

具体实现的效果是:把同样的域名如,网通的客户会返回一个指向网通效劳器的IP地址,电信的客户会指向一个电信效劳器的IP地址。

通过这种方式,尽量防止网通的客户去电信的网络,以及电信的客户去网通的网络.对于流量比拟大的,可以通过该功能把流量分配到几台不同的效劳器上,以提高的运行速度。

通过IP表的重新定义,让国外的客户自动英文版的;让国的客户自动中文版的.DNS中几个根本概念域名空间:指internet上所有主机的惟一的和比拟友好的主机名组成的空间,是DSN命名系统在一个层次上的逻辑树构造。

各机可以用它自己的域名空间创立internet上不可见的专用网络。

DNS效劳器:运行DNS效劳程序的计算机,其上有关于DNS域树结果的DNS数据库。

DNS客户端:也称为解析程序,是使用DNS查寻从效劳器查询信息的程序。

解析器可以同远程DNS效劳器通信,也可以同运行DNS效劳器程序的本地计算机通信。

资源记录:DNS数据库中的信息集,可用于出来客户机的查询。

区域:效劳器是其授权的DNS名字空间的连续局部。

一台效劳器可以是一个或多个区域的授权。

区域文件:包含区域资源记录的文件,效劳器是这个区域的授权。

在大局部DNS实现中,用文件实现区域。

Internet域名空间Internet上的DNS域名系统采用树状的层次构造。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使用BIND系统和Mysql数据库构建智能DNS系统运维部吴红星第一,首言目前市场上有F5、Citrix、Radware等智能网络设备厂商提供较为成熟的整体的高可用性的应用交付解决方案,会涉及智能DNS也即全局负载均衡、本地负载均衡,提供了完整的各种负载均衡算法,技术结构复杂,设备成本和管理、维护成本昂贵。

BIND(Berkeley Internet Name Domain)是由互联网软件协会(ISC)开发的开放源码的域名服务器软件,目前互联网上约有超过90%的域名服务器都在使用它提供域名解析服务,几乎所有UNIX族的操作系统都使用它作为其DNS服务的唯一实现。

本文将主要简述如何利用BIND开源系统结合Mysql数据库通过二次开发,实现简单的根据请求源IP地址和应用存活实时探测来智能分配服务器IP的域名解析系统,开发语言为ANSI C。

标准的DNS解析整个流程图示如下:图示1 标准解析流程图第二,智能DNS实现基本思路在BIND服务软件获取源地址后,对比现有的互联网地址库分布,按请求客户端区分不同的运营商或者继续细分到省份、城市等,计算出自定义网络范围ID,然后通过存储在mysql中的资源记录,自定义条件返回解析结果。

在基本分析了bind源码后,确认了几个技术点:1,bind在最终获取解析结果的数据库接口函数中没有传入的客户端源IP地址结构参数,需要解决如何传入客户端IP地址,该函数为dns_sdblookupfunc_t类型;2,互联网拓扑结构分布的IP地址范围也存在数据库中,但是地址匹配的时候不能使用数据库计算返回结果,必须程序使用内存处理,提高效率。

如果地址调整,如何自动载入地址内存中的地址库链表;3,如何监控解析主机IP地址的应用存活性。

第三,智能DNS各个实现细节阶段简述1,传入clientaddr指针到dns_sdblookupfunc函数原函数typedef isc_result_t (*dns_sdblookupfunc_t)(const char *zone, const char *name, void *dbdata,dns_sdblookup_t *)调整为:typedef isc_result_t (*dns_sdblookupfunc_t)(const char *zone, const char *name, void *dbdata, dns_sdblookup_t *, isc_sockaddr_t *client_addr) 调整后加入client_addr地址参数,该函数被dns_dbmethods_t类型结构体中某些函数调用,需要在这些函数中传入含有client_addr相关信息的参数。

原isc_result_t (*findnode)(dns_db_t *db, dns_name_t *name,isc_boolean_t create,dns_dbnode_t **nodep);调整为:isc_result_t (*findnode)(dns_db_t *db, dns_name_t *name, isc_boolean_t create,dns_dbnode_t **nodep, ns_client_t *client);原isc_result_t (*find)(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,dns_rdatatype_t type, unsigned int options, isc_stdtime_t now, dns_dbnode_t **nodep, dns_name_t *foundname, dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset);调整为:isc_result_t (*find)(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,dns_rdatatype_t type, unsigned int options, isc_stdtime_t now, dns_dbnode_t **nodep, dns_name_t *foundname, dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset, ns_client_t *client);最终ns_client_t类型的客户端地址信息由调用函数query_find(ns_client_t*client, dns_fetchevent_t *event, dns_rdatatype_t qtype)传入。

2,实现内存存储地址结构链表,并实现遍历查询定义地址信息结构体链表类型:typedef struct subnet_id_link {struct sockaddr_in subnet_num;struct sockaddr_in subnet_mask;int ispzoneid;struct subnet_id_link *next;} subnet_id_link_t;用于存储现有的互联网地址链表,并约定ID号,如中国电信区域ID为1,中国网通为2,浙江电信为3等等,该链表头指针为全局变量,启动BIND时候读入mysql数据库中的IP库信息初始化该数据段,并实现IP段更新后,使用BIND管理工具rndc在服务不停止的情况下重加载IP库信息。

定义一个域名解析客户端可能属于的网络ID号链表结构:typedef struct ispzoneid_link {int ispzoneid;struct ispzoneid_link *next;} ispzoneid_link_t;该结构用于存储匹配客户从属于区域系列ID链,如一个浙江电信的client既属于中国电信也属于浙江电信甚至属于杭州电信(如果定位细分到市级别)。

其他定义:extern subnet_id_link_t *subnet_id_link_table; --定义全局链表指针void free_subnetidlink(subnet_id_link_t *subnetlink);--退出或者重启时候释放地址链表内存static int insert_subnetidlink(subnet_id_link_t **subnetlink, char *subnet, int ispzoneid); --插入自定义地址链表,初始化地地址库结构和所属IDstatic int insert_ispzoneidlink(ispzoneid_link_t **ispzoneidlink, intispzoneid); --匹配地址后插入id链表static void free_ispzoneidlink(ispzoneid_link_t *ispzoneidlink);--生成查询语句后释放id链内存static ispzoneid_link_t *lookup_ispzoneid(subnet_id_link_t *subnetlink, isc_sockaddr_t *client_addr);--匹配id,并生成id链数据,返回id链表指针static void make_str_query(char *querystr, ispzoneid_link_t*ispzoneidlink);--生成sql查询语句,查询mysql数据库static isc_result_t db_connect(struct dbinfo *dbi); --mysql数据库连接函数static isc_result_t mysqldb_lookup(const char *zone, const char *rname, void *dbdata, dns_sdblookup_t *lookup, isc_sockaddr_t *client_addr); --通过mysql获取解析最终结果函数定义注册函数方法,并注册mysql查询模块:static dns_sdbmethods_t mysqldb_methods = {mysqldb_lookup,NULL,mysqldb_allnodes,mysqldb_create,mysqldb_destroy};isc_result_t mysqldb_init(void){unsigned int flags;flags = 0;return (dns_sdb_register("mysqldb", &mysqldb_methods, NULL, flags, ns_g_mctx, &mysqldb));}3,mysql数据库设计A.网络IP库表CREATE TABLE `IspNetZone_Table` (`subnet_num` varchar(20) default NULL, --网络地址段,如192.168.1.0/24`ispzoneid` int(4) default '0' --运营商所属ID,如中国电信1,浙江电信2,中国联通3)B.DNS rddata存储表CREATE TABLE [domain_table] (name varchar(255) default NULL, --资源记录名,如ttl int(11) default 1800, --记录解析生存周期rdtype varchar(255) default NULL, --记录类型,A,CNAME,MX等rdata varchar(255) default NULL, --记录数据,IP或者Aliasesispzoneid int(4) default 0, --解析目标区域id如中国电信那么存值为1weight int(4) default 100, --权值,解析优先值iflive int(4) default 1, --监控主机是否存活,如果0值排除该条解析记录disable int(4) default 0 --手工禁用,1为禁用,排除该条解析记录);c. 使用BIND配置文件的zone参数配置数据库链接信息:zone "domain_name" {type master;notify no;allow-update { none; };database "mysqldb dns_db_name domain_table_name db_host_ip dbuser dbpassword";};D,服务器应用存活探测配置表CREATE TABLE `monitor_table` (`id` int(11) NOT NULL auto_increment,`hostip` varchar(255) default NULL, --监控服务器主机IP`port` int(11) default '80', --监控服务器数据TCP端口`domainname` varchar(255) default NULL, --监控域名`hostdes` varchar(255) default NULL, --用途描述`dnstablename` varchar(255) default NULL, --所在解析表表名,同配置文件对应`monitortype` int(11) default '0', --0 MOHTTP_REQ_GET, 1 MOHTTP_REQ_POST,2 MOHTTP_REQ_HEAD`httpurl` varchar(255) NOT NULL, --监控URL`return_v` varchar(255) default NULL, --匹配返回值,如为空,则判断返回HTTP状态码`content` varchar(2048) default NULL, --POST方式监控时提交的的数据`monitor_interval` int(11) default 30, --发送服务器轮训监控的时间间隔`phone` varchar(2048) default NULL, --服务器存活监控失效后短信通知对象PRIMARY KEY (`id`))第四阶段,主机和应用监控实现使用外部Daemon进程监控主机,服务启动后根据监控配置表加载监控配置,根据配置中轮训时间和请求方式间隔发起监控请求,如果监控主机失败,直接条件性修改domain_table,置符合条件的记录iflive字段值为0,排除解析记录。

相关文档
最新文档