在学习Bind过程中,发现一篇很好的文章,所以把它摘录下来,一方面方便自己日后的配置,另一方面也给大家一起学习学习。我的bind也是参考这篇文章来配置的。(原文地址:)
在linux下提供dns服务的软件用的最多的是bind,在工作中,其实一般公司不会自己建立一个dns服务器,一般解析都交给万网,新网,这些代理商他们做。就等于外包把,减轻自己的工作量。
不过如果你在试验的条件下,比如你要测试邮件,那么你还是要架设一个dns服务器,这样你才能进行完整的测试。还有就是你公司希望dns自己来管理。下面就谈谈整个的过程。我经历过一次公司架设dns服务器的过程。
dns 服务器架设的准备工作
1:注册一个域名,比如test.com,假设是在万网注册的。
2:拿你的机器去托管,比如电信通托管,那么他们会根据你的需要,给你1个ip:192.168.1.168,当然这不是公网的ip,只是举例。
3:找万网,说我要搭建一台dns服务器,dns 的名字是ns1.test.com ip地址是192.168.1.168,名字可以根据你自己喜欢来定,就是大家习惯都是ns1,ns2 这样的主机名。这个是要收费的,好像是每年200左右。万网需要把你注册的ns1.test.com 和对应的ip,提交给域名最高的管理机构,在他那里做解析。
4:如果我没有猜错,过两天三天后,这个时候,你 ping ns1.test.com 就返回ip地址是192.168.1.168,不过由于你没有假设机器,所以显示无法到达。
5:这个时候你就可以在你的机器上假设dns服务器了,你可以选择windows,linux系统,都有相应的软件,在linux下,至少有两个软件可以架设dns服务器,不过最出名的是bind。
6:反向dns解析,这个也是大家经常问的问题,反向,就是通过ip查找域名,不过现在很多都是一个ip对应多个域名,那么反向解析是那个域名呢,为什么要做反向解析呢?我的理解是:如果是web服务,你是不需要做反向解析的。做了反向解析也无所谓,没有什么影响。只有在提供邮件服务的情况下,才需要考虑反向域名解析。
因为现在反垃圾邮件的策略,就是通过查询反向dns解析,你的mx记录,是否是你现在发送的ip,如果不是,就不接受。
做邮件的反向dns解析,不只是你在你的dns上做配置,还需要你服务器托管商,比如电信通,他帮你去注册这个反向dns解析,这在国内也是需要收费的。好像还很贵。有些地方1千一年。
7:假如我现在有注册了一个域名,example.com ,在域名的管理的地方,有一个地方是选择你的dns服务器,这个时候,你就可以选择你刚建好的 ns1.test.com. 如果你希望帮助别人解析域名,也是需要他修改他域名记录,把他的域名解析改为你的服务器,这样你在你的机器上建立相应的记录才会生效。
假如你朋友的域名是 domain.com ,你帮他做dns解析,指向ip是192.168.1.168,但是你朋友并没有修改他域名记录里的dns服务,没有修改成ns1.test.com. 那么这种情况下会出现什么情况呢?假如我的机器的dns是设置为192.168.1.168,也就是你架设dns服务器的ip,那么我访问 domain.com 是没有问题的,但是别人是不会这样做的,他还是无法访问的。不知道我说明白没有。
dns 的功能介绍
缓存dns(dns转发)
这个功能,其实比较简单,也是大家用的最多的,配置也很简单,只需要把所有需要解析的请求转发给另外一台机器就可以了。现在很多router,你的dns都是192.168.1.1,其实就是一个dns转发。
dns解析功能
就是给机器做域名解析,这其实也不算复杂,其实配置bind一个比较麻烦的地方就是修改配置文件的时候比较容易搞错。如果你在现成的配置文件上修改,那是很简单一件事情。
dns的高级功能
这其实也是dns复杂的地方,不同的企业,有不同的需求。比如我们现在的网络的南北互通的问题,怎么才能做到南方的请求,给他南方的ip呢?这其实就是dns的高级功能view。
不过这些也只是了解就可以了。现在很多机房都提供智能dns的服务,
达到的目的
dns server:ns1.test.com ip: 192.168.1.168 192.168.1.168 mail.test.com 192.168.1.168 ns1.test.com 192.168.1.168
配置过程
软件的安装,我们是采用编译的方式,那么编译安装的软件,安装的位置你是可以指定的,这个比rpm包安装灵活的地方,但是也有一个问题,每一个人的习惯是不太一样,放的位置也不一样。所以编译安装,灵活带来的问题。
有人习惯把所有的信息放在一个文件夹里,有人习惯把配置文件放到/etc 的目录下,这样比较方便,因为用rpm包安装,配置文件就是放那里。
不过通过编译安装的软件,如果你不是特意修改,那么他缺省的位置就是 /usr/local ,这个是需要你记住的。
下载软件放的位置,也是一样,每个人的习惯都不一样,我的习惯是都放在/usr/src 里,解压也是在这个文件夹里。
下载软件
由于我们需要用源码包来安装,光盘里的是rpm包,所以我们需要去下载。
目前最新的版本是9.4.2
你可以在windows下下载完,通过winscp上传,不过对于这些不大的软件,还是学习一下怎么在linux下下载。
wget
wget 的用法很多,包括指定下载路径,如果你不会指定下载路径,那么你就转到/usr/src 的目录下再下载。
![](http://blogimg.chinaunix.net/blog/upfile2/080611002808.jpg)
编译安装
把下面的命令直接复制过去运行就可以了,linux会运行完一行再运行第二行,由于这个我已经反复多次,肯定不会出错。大家可以一条一条执行。
安装过程
安装的目录是/usr/local/named, 所有的域名的文件都是放在 /usr/local/named/var下,这个路径需要注意,很多文章是在/var/named这个目录下,不过我觉得把所有的文件放在named的目录下,会更好。
tar zxvf bind-9.4.2.tar.gz cd bind-9.4.2 ./configure --prefix=/usr/local/named && make && make install groupadd bind useradd -g bind -d /usr/local/named -s /sbin/nologin bind cd /usr/local/named/etc /usr/local/named/sbin/rndc-confgen > rndc.conf cat rndc.conf > rndc.key chmod 777 /usr/local/named/var tail -10 rndc.conf | head -9 | sed s/#\ //g > named.conf
vi named.conf 添加下面内容(
#################
options { directory "/usr/local/named/var"; //域名文件存放的绝对路径 pid-file "named.pid"; // 如果bind启动,自动会在/usr/local/named/var目录生成一个named.pid文件,打开文件就是named进程的 ID };
zone "." IN { type hint; //根域名服务器 file "named.root"; // 存放在//usr/local/named/var目录,文件名为 named.root };
zone "localhost" IN { type master; //类型为主域名服务器 file "localhost.zone"; // 本地正向解析的文件 allow-update { none; }; };
zone "0.0.127.in-addr.arpa" IN { type master; //类型为主域名服务器 file "named.local"; // 本地反向解析的文件 allow-update { none; }; };
zone "test.com" IN { //建立test.com域 type master; file "test.com.zone"; //test.com 域映射IP地址可在此文件编写 allow-update { none; }; };
zone "1.168.192.in-addr.arpa" in { // 反向解析 type master; file "test.com.rev"; // 存放反向解析的文件 allow-update { none; }; }; ########################
cd /usr/local/named/var
1: named.root dig @a.root-servers.net . ns > named.root
2: localhost.zone ########## $TTL 86400 $ORIGIN localhost. @ 1D IN SOA @ root ( 42 ; serial (d. adams) 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum
1D IN NS @ 1D IN A 127.0.0.1 #############
3: named.local ############### $TTL 86400 @ IN SOA localhost. root.localhost. ( 1997022700 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS localhost.
1 IN PTR localhost. ####################
4 : test.com.zone ############
$TTL 86400 ; 1 day @ IN SOA ns1.test.com. root.test.com. ( 2008050122 ; serial 28800 ; refresh (8 hours) 7200 ; retry (2 hours) 604800 ; expire (1 week) 86400 ; minimum (1 day) ) NS ns1.test.com. A 192.168.1.168 MX 10 mail.test.com. www A 192.168.1.168 mail A 192.168.1.168 ns1 A 192.168.1.168
######################### 5: test.com.rev ############# $TTL 86400 @ IN SOA ns1.test.com. root.test.com.( 20031001; 7200; 3600; 43200; 86400); @ IN NS ns1.test.com. 168 IN PTR ns1.test.com. ##############
三:启动脚本
vi /etc/rc.d/init.d/named
#!/bin/bash # named a network name service. # chkconfig: 345 35 75 # description: a name server
if [ `id -u` -ne 0 ] then echo "ERROR:For bind to port 53,must run as root." exit 1 fi case "$1" in start) if [ -x /usr/local/named/sbin/named ]; then /usr/local/named/sbin/named -c /usr/local/named/etc/named.conf -u bind && echo . && echo 'BIND9 server started' fi ;; stop) kill `cat /usr/local/named/var/named.pid` && echo . && echo 'BIND9 server stopped' ;; restart) echo . echo "Restart BIND9 server" $0 stop sleep 10 $0 start ;; reload) /usr/local/named/sbin/rndc reload ;; status) /usr/local/named/sbin/rndc status ;; *) echo "$0 start | stop | restart |reload |status" ;; esac
chmod 755 /etc/rc.d/init.d/named
chkconfig --add named
service named start
四:启动测试
/usr/local/named/sbin/named -g
你可以看到启动的过程,如果你的配置文件有错误,所以你可以根据这个排错
启动服务测试一下 /usr/local/named/sbin/named -c /usr/local/named/etc/named.conf -u bind &
查看状态
/usr/local/named/sbin/rndc status
启动服务
service named restart
编辑/etc/resolv.conf
修改这个文件,把本机的dns指向本机168
nslookup就可以测试了。