Archive for 十月, 2010

Start of Authority 的意思。 這個標誌代表著 master/slave 相關的認證、授權資料。 不論你的 DNS 系統有沒有設定 master/slave 的架構,都需要含有這個設定才好。 SOA 後面共帶有三個參數,所以該行為:

    [zone] IN SOA [主機名] [管理員 email] ([五組更新時間參數])

每個設定項目你可以這樣看:

  • 主機名:就是 master DNS 的主機名稱,通常填寫本身主機名即可。還是要注意那個小數點的存在與否喔!非常重要!
  • 管理員 email:本來應該是 "root@localhost." 的,不過因為 @ 已經被作為特殊代號 (zone), 所以就用小數點來取代,因此 email 就成為 "root.localhost." 囉!
  • (五組數字):這五個數字分別代表 serial, refresh, retry, expire, ttl。

至於那五個數字的意義是這樣的:

  1. Serial :只是一個序號,但這個序號可被用來作為 slave 與 master 更新的依據。 舉例來說, master 序號為 100 但 slave 序號為 90 時,那麼這個 zone file 的資料就會被傳送到 slave 來更新了。 由於這個序號代表新舊資料,通常我們建議你可以利用日期來設定!舉例來說,上面的資料是鳥哥在 2006/10/20 所寫的第一次,所以鳥哥用 2006102001 作為序號代表!
  2. Refresh :除了根據 Serial 來判斷新舊之外,我們可以利用這個 refresh(更新) 命令 slave 多久進行一次主動更新;
  3. Retry :如果到了 Refresh 的時間,但是 slave 卻無法連接到 master 時, 那麼在多久之後,slave 會再次的主動嘗試與主機連線;
  4. Expire :如果 slave 一直無法與 master 連接上,那麼經過多久的時間之後, 則命令 slave 不要再連接 master 了! 也就是說,此時我們假設 master DNS 可能遇到重大問題而無法上線,則等待系統管理員處理完畢後, 再重新來到 slave DNS 重新啟動 bind 吧!
  5. Minimun :這個就有點像是 TTL 啦!

另外,這幾個數字的大小是有限制的!你必需要瞭解喔:

  • Serial <= 2^32 = 4294967296
  • Refresh >= Retry * 2
  • Refresh + Retry < Expire
  • Expire >= Retry * 10
  • Expire >= 7Days

 

转自:鸟哥的Linux私房菜

在Ubuntu开发者峰会上,Canonical宣布Ubuntu Natty Narwhal(11.04)桌面版的默认界面不使用GNOME Shell,而是选择Unity。Unity是Canonical资助的项目,最初设计用于上网本版本的Ubuntu Netbook Remix,而GNOME Shell是为GNOME 3.0开发的界面,GNOME 3.0已经推迟到明年春天发布。Mark Shuttleworth表示,Ubuntu仍然是基于GNOME,Unity是GNOME的一个外壳(shell),尽管它不是GNOME Shell。

UserAgent的历史变迁

感谢ItStrike的投递
新闻来源:译言
Google推出的Chrome让大家热议纷纷,只有专业用户才会注意到用Chrome访问网页时发出的“Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13”UserAgent字符串,貌似天书,它到底是怎么回事儿代表什么呢?我们来看看吧.

最早的时候有一个浏览器叫NCSA Mosaic,把自己标称为NCSA_Mosaic/2.0 (Windows 3.1),它支持文字显示的同时还支持图片,于是Web开始好玩起来。

然后出现了一个新的网页浏览器,“Mozilla”,其实就是“Mosaic终结者”的意思,这搞的Mosaic很不爽,(毕竟Mosaic出道早,江湖老),新浏览器最后正式公布的名称是Netscape,它把自己标称为Mozilla/1.0 (Win3.1),更好玩了。Netscape支持框架显示,后来框架在大家中间流行起来了,但Mosaic不支持框架啊,于是伟大的“用户代理人探测”技术出现了,如果是“Mozilla”,那就发给支持框架的页面,至于其他的浏览器,则发给不含框架的页面。

Netscape想逗Microsoft玩儿,把Windows叫做“几乎不曾做过调试的设备驱动器”,后者很恼火。Microsoft于是推出了自己的 网页浏览器,叫做Internet Explorer,希望它能成为“Netscape终结者”。Internet Explorer也支持框架,但它不是Mozilla啊,所以没人给它发送带有框架的页面。Microsoft慢慢烦躁起来,不再寄希望于网站管理员逐渐 认识IE并给它发框架,而是宣称自己是“兼容Mozilla”的,开始模仿Netscape,把自己标称为Mozilla/1.22 (compatible; MSIE 2.0; Windows 95),这样Internet Explorer也能收到框架了,整个Microsoft狂喜,但网站管理员开始有点被搞糊涂了。

Microsoft把IE和Windows一起卖,并且把产品也弄得比Netscape更好了,拉开了第一场浏览器之战。结果和大家知道的一样,Netscape被干掉了,Microsoft大胜、大喜。但是后来Netscape以Mozilla的新名称重生了,构造了Gecko,标称其为Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826,Gecko属于渲染引擎,表现优异。Mozilla开发了Firefox,标称为Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.7.5) Gecko/20041108 Firefox/1.0,并且Firefox表现也非常优秀。Gecko扩张迅速,一些浏览器使用了它的代码并标称为Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.2) Gecko/20040825 Camino/0.8.1 ,这是一个,还有Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.8) Gecko/20071008 SeaMonkey/1.0,另一个,它们都伪装成Mozilla,同时也都是基于Gecko支持的。

Gecko表现优秀,IE则很差劲,于是身份甄别再次发生,输送给Gecko的是设计良好的网页代码,其他浏览器就没有这个待遇了。Linux的跟随者很伤心,因为他们创建了基于KHTML引擎支持的Konqueror,但却不会被输送好代码,虽然他们自己认为KHTML和Gecko一样优秀,于是Konquerer开始伪装自己“像Gecko”那样以得到好的网页,并标称自己为Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko),这个世界更让人困惑了.

后来出现了Opera这样的主儿,宣称“允许用户自己决定让浏览器装成谁”,它的菜单中提供了Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.51, Mozilla/5.0 (Windows NT 6.0; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.51,Opera/9.51 (Windows NT 5.1; U; en) 供大家来选择,选谁是谁。

Apple开发了Safari,使用了KHTML,同时也增加了很多新特性,后来干脆一锅煮,另起炉灶叫了WebKit,但是它有希望能够得到那些为KHTML编写的网页,于是Safari标称自己为Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5,这个世界更混乱了。

Microsoft越来越担心Firefox的发展,重新启动了Internet Explorer的开发,标称自己为Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ,可以很好的渲染代码,但那要看网站管理员是否指示它这么做。

Google也开发了自己的浏览器Chrome, 使用了Webkit,有点像Safari,希望能得到为Safari编写的网页,于是决定装成Safari。这样啊,Chrome使用了WebKit渲染 引擎,想装成Safari,而WebKit呢又伪装自己是KHTML,KHTML呢又是伪装成Gecko的,同时所有的浏览器又都宣称自己是 Mozilla,于是,Chrome宣称自己是Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13,,UserAgent字符串彻底混乱了,也几乎不再发挥任何作用,每个人都宣称自己是别人,混乱充斥人间啊。

apt-cache search # ——(package 搜索包)
apt-cache show #——(package 获取包的相关信息,如说明、大小、版本等)
apt-get install # ——(package 安装包)
apt-get install # —–(package –reinstall 重新安装包)
apt-get -f install # —–(强制安装, “-f = –fix-missing”当是修复安装吧…)
apt-get remove #—–(package 删除包)
apt-get remove –purge # ——(package 删除包,包括删除配置文件等)
apt-get autoremove –purge # —-(package 删除包及其依赖的软件包+配置文件等(只对6.10有效,强烈推荐))
apt-get update #——更新源
apt-get upgrade #——更新已安装的包
apt-get dist-upgrade # ———升级系统
apt-get dselect-upgrade #——使用 dselect 升级
apt-cache depends #——-(package 了解使用依赖)
apt-cache rdepends # ——(package 了解某个具体的依赖,当是查看该包被哪些包依赖吧…)
apt-get build-dep # ——(package 安装相关的编译环境)
apt-get source #——(package 下载该包的源代码)
apt-get clean && apt-get autoclean # ——–清理下载文件的存档 && 只清理过时的包
apt-get check #——-检查是否有损坏的依赖
dpkg -S filename —–查找filename属于哪个软件包
apt-file search filename —–查找filename属于哪个软件包
apt-file list packagename —–列出软件包的内容
apt-file update –更新apt-file的数据库

dpkg –info “软件包名” –列出软件包解包后的包名称.
dpkg -l –列出当前系统中所有的包.可以和参数less一起使用在分屏查看. (类似于rpm -qa)
dpkg -l |grep -i “软件包名” –查看系统中与”软件包名”相关联的包.
dpkg -s 查询已安装的包的详细信息.
dpkg -L 查询系统中已安装的软件包所安装的位置. (类似于rpm -ql)
dpkg -S 查询系统中某个文件属于哪个软件包. (类似于rpm -qf)
dpkg -I 查询deb包的详细信息,在一个软件包下载到本地之后看看用不用安装(看一下呗).
dpkg -i 手动安装软件包(这个命令并不能解决软件包之前的依赖性问题),如果在安装某一个软件包的时候遇到了软件依赖的问题,可以用apt-get -f install在解决信赖性这个问题.
dpkg -r 卸载软件包.不是完全的卸载,它的配置文件还存在.
dpkg -P 全部卸载(但是还是不能解决软件包的依赖性的问题)
dpkg -reconfigure 重新配置

apt-get install
下载软件包,以及所有依赖的包,同时进行包的安装或升级。如果某个包被设置了 hold (停止标志,就会被搁在一边(即不会被升级)。更多 hold 细节请看下面。
apt-get remove [--purge]
移除 以及任何依赖这个包的其它包。
–purge 指明这个包应该被完全清除 (purged) ,更多信息请看 dpkg -P。

apt-get update
升级来自 Debian 镜像的包列表,如果你想安装当天的任何软件,至少每天运行一次,而且每次修改了
/etc/apt/sources.list 後,必须执行。

apt-get upgrade [-u]
升级所有已经安装的包为最新可用版本。不会安装新的或移除老的包。如果一个包改变了依赖关系而需要安装一个新的包,那么它将不会被升级,而是标志为 hold。apt-get update 不会升级被标志为 hold 的包 (这个也就是 hold 的意思)。请看下文如何手动设置包为 hold。我建议同时使用 ‘-u’ 选项,因为这样你就能看到哪些包将会被升级。

apt-get dist-upgrade [-u]
和 apt-get upgrade 类似,除了 dist-upgrade 会安装和移除包来满足依赖关系。因此具有一定的危险性。

apt-cache search
在软件包名称和描述中,搜索包含xxx的软件包。

apt-cache show
显示某个软件包的完整的描述。

apt-cache showpkg
显示软件包更多细节,以及和其它包的关系。

dselect
console-apt
aptitude
gnome-apt
APT 的几个图形前端(其中一些在使用前得先安装)。这里 dselect 无疑是最强大的,也是最古老,最难驾驭。

普通 Dpkg 用法
dpkg -i
安装一个 Debian 包文件,如你手动下载的文件。

dpkg -c
列出 的内容。

dpkg -I
从 中提取包信息。

dpkg -r
移除一个已安装的包。

dpkg -P
完全清除一个已安装的包。和 remove 不同的是,remove 只是删掉数据和可执行文件,purge 另外还删除所有的配制文件。

dpkg -L
列出 安装的所有文件清单。同时请看 dpkg -c 来检查一个 .deb 文件的内容。

dpkg -s
显示已安装包的信息。同时请看 apt-cache 显示 Debian 存档中的包信息,以及 dpkg -I 来显示从一个 .deb 文件中提取的包信息。

dpkg-reconfigure
重新配制一个已经安装的包,如果它使用的是 debconf (debconf 为包安装提供了一个统一的配制界面)。你能够重新配制 debconf 它本身,如你想改变它的前端或提问的优先权。例如,重新配制 debconf,使用一个 dialog 前端,简单运行:

dpkg-reconfigure –frontend=dialog debconf (如果你安装时选错了,这里可以改回来哟:)

echo ” hold” | dpkg –set-selections
设置 的状态为 hlod (命令行方式)

dpkg –get-selections “”
取的 的当前状态 (命令行方式)

支持通配符,如:
Debian:~# dpkg –get-selections *wine*
libwine hold
libwine-alsa hold
libwine-arts hold
libwine-dev hold
libwine-nas hold
libwine-print hold
libwine-twain hold
wine hold
wine+ hold
wine-doc hold
wine-utils hold

3. 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的弱点及时被发现。主要分为三个版本:

v4

1998年多数UNIX捆绑的是BIND4,已经被多数厂商抛弃了,除了OpenBSD还在使用。OpenBSD核心人为BIND8过于复杂和不安全,所以继续使用BIND4。这样一来BIND8/9的很多优点都不包括在v4中。

v8

就是如今使用最多最广的版本,其详细内容可以参阅 BIND 8+ 域名服务器安全增强

v9

最新版本的BIND,全部重新写过,免费(但是由商业公司资助),也添加了许多新的功能(但是安全上也可能有更多的问题)。BIND9在2000年十月份推出,现在稳定版本是9.3.2。

3.2 软件的相关资源

官方网站: http://www.bind.com/

最新版本: 9.3.2 http://www.isc.org/sw/bind/bind9.3.php#download

帮助文档: http://www.isc.org/sw/bind/

配置文件样例: http://www.bind.com/bind.html

FAQ: http://www.nominum.com/getOpenSourceResource.php?id=6

3.3 配置环境

        环境:GNU/Linux Debian/testing Linux 2.6.8-2-386

        版本:bind9  9.3.2-2

        测试域名:mydebian.org

        测试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/ -l
        total 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.options

全局选项

db.root

根服务器指向文件, 由Internet NIC创建和维护, 无需修改, 但是需要定期更新

db.local

localhost正向区文件,用于将名字localhost转换为本地回送IP地址 (127.0.0.1)

db.127

localhost反向区文件,用于将本地回送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" {
                type master;
                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.

                // forwarders {
                //      0.0.0.0;
                // };

                auth-nxdomain no;    # conform to RFC1035

        };

3.5 创建主域名服务器

a. 首先, 在在192.168.102.47机器上安全bind9

b. 使用编辑器,比如vi, 编辑配置文件/etc/bind/named.conf

加入如下内容

        zone "mydebian.org" {
                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 mydebian.org.
        @       IN      SOA     mydebian.org. root.mydebian.org. (
                                2006080401      ; Serial
                                 604800         ; Refresh
                                  86400         ; Retry
                                2419200         ; Expire
                                 604800 )       ; Negative Cache TTL
        ;

                IN      NS      ns
                IN      MX      0       mail.mydebian.org.
        @       IN      A       192.168.102.47
        ns      IN      A       192.168.102.47
        www     IN      A       192.168.102.47
        webserver       IN      CNAME   www
        mail    IN      A       192.168.102.47
        ftp     IN      A       192.168.102.48
        ns2     IN      A       192.168.102.48
        ns3     IN      A       192.168.102.49

第一行是TTL设定,生存时间记录字段。它以秒为单位定义该资源记录中的信息存放在高速缓存中的时间长度。这里定义为604800秒,也就是1周.

第二行是$ORIGIN设定,说明下面的记录出自何处.请您加倍留意最后的一个小小数点"."

然后,第三行,是一个 SOA 记录的设定,在这里我们看到一个特殊字符 @ ,它就是 ORIGIN 的意思,也就是刚刚所定义的$ ORIGIN mydebian.org. 的内容,您可以写成 mydebian.org. 也可以用 @ 来代替。

假如这个文件前面没有定义 $ ORIGIN 的话, 那這个 @ 的值就以 named.conf 里的 zone .

接着 SOA 后面,指定了这个区域的授权主机和管理者的信箱,这里分别是"mydebian.org." 和"root.mydebian.org."。我们平时使用的信箱通常是“user@host”这样的格式,但因为@在 DNS 记录中是个保留字符,所以在 SOA 中就用“.”来代替了@。目前这个信箱是 "root@mydebian.org."。

接下来的 SOA 设置,是被括在“( )”之间的 5 组数字,主要作为和 slave 服务器同步 DNS 资料所使用的资料:

Serial:其格式通常会是“年月日+修改次序”(但也不一定如此,您自己能够记得就行)。当 slave 要进行资料同步的时候,会比较这个号码。如果发现在这里的号码比它那边的数值“大”,就进行更新,否则忽略。不过设 serial 有一个地方您要留意:不能超过 10 位数字!

Refresh:这里是是告诉 slave 要隔多久要进行资料同步(是否同步要看 Serial 的比较结果)。

Retry:如果 slave 在进行更新失败后,要隔多久再进行重试。

Expire:这是记录逾期时间:当 slave 一直未能成功与 master 取得联系,那到这里就放弃 retry,同时这里的资料也将标识为过期(

expired )。

Minimum:这是最小默认 TTL 值,如果您在前面没有用“$TTL”来定义,就会以此值为准。

请注意:SOA 记录中这对 “ ( ) ”符号之第一个 “ (”括号一定要和 SOA 写在同一行,而不能用 Enter 断行到下一行去,而且其左边最好有一个空格键或 tab 建。而最后一个 “ )”括号也不能写在注解符号 “ ;”的右边。 置 DNS 的 RR 记录档,其格式要求非常严格,我们丝毫不能掉以轻心。比方说:如果句子不是以空格键、Tab 键、 或注解符号 ( ; )开头,也不在 SOA 的 “ ( ) ”之内, 则表示要定义一个“新记录项 (Entry) ”;如果句子是以空格键或 tab 键开始的话,其设置被视为上一个“记录项”的内容。所以,如果您要为“同一个记录项”定义多个记录设置,而不想重复打字,您倒可以偷懒:在接着它的后面几行用空白或 Tab 来缩排就可以了。

NS表明负责mydebian.org.这个域的Name Server是mydebian.org这台主机

MX记录标明发往mydebian.org域的邮件由mail.mydebian.org这台服务器接收

A记录标明了IP地址和域名之间的对应关系

接下来创建该区的反向映射资源文件

/etc/bind/db.192内容如下:

        ;
        ; BIND reverse data file for local loopback interface
        ;
        $TTL    604800
        @       IN      SOA     mydebian.org. root.mydebian.org. (
                                2006080401      ; Serial
                                 604800         ; Refresh
                                  86400         ; Retry
                                2419200         ; Expire
                                 604800 )       ; Negative Cache TTL
        ;
        @       IN      NS      mydebian.org.
        47      IN      PTR     mail.mydebian.org.
        47      IN      PTR     www.mydebian.org.
        47      IN      PTR     ns.mydebian.org.
        48      IN      PTR     ftp.mydebian.org.
        48      IN      PTR     ns2.mydebian.org.
        49      IN      PTR     ns3.mydebian.org.

其中PTR记录用来解析IP地址对应的域名

d. 重启DNS服务

        /etc/init.d/bind9 restart

此时查看系统日志,可了解BIND的启动情况,比如如下输出,则说明引导正常

        tonybox:~# tail /var/log/syslog
        Aug 14 08:36:45 localhost named[2792]: zone 127.in-addr.arpa/IN: loaded serial 1
        Aug 14 08:36:45 localhost named[2792]: zone 102.168.192.in-addr.arpa/IN: loaded serial 2006080801
        Aug 14 08:36:45 localhost named[2792]: zone 255.in-addr.arpa/IN: loaded serial 1
        Aug 14 08:36:45 localhost named[2792]: zone localhost/IN: loaded serial 1
        Aug 14 08:36:45 localhost named[2792]: zone mydebian.org/IN: loaded serial 2006080801
        Aug 14 08:36:45 localhost named[2792]: running
        Aug 14 08:36:45 localhost named[2792]: zone mydebian.org/IN: sending notifies (serial 2006080801)
        Aug 14 08:36:45 localhost named[2792]: zone 102.168.192.in-addr.arpa/IN: sending notifies (serial 2006080801)
        Aug 14 08:36:45 localhost named[2792]: client 192.168.102.47#1030: received notify for zone 'mydebian.org'
        Aug 14 08:36:45 localhost named[2792]: client 192.168.102.47#1030: received notify for zone '102.168.192.in-addr.arpa'

e. 在客户机上的设置

        # cat /etc/resolv.conf
        search mydebian.org
        nameserver 192.168.102.47

f. 测试:

使用nslookup 测试

        tonybox2:~# nslookup
        > set type=any
        > mydebian.org
        Server:         192.168.102.47
        Address:        192.168.102.47#53

        mydebian.org
                origin = mydebian.org
                mail addr = root.mydebian.org
                serial = 2006080801
                refresh = 604800
                retry = 86400
                expire = 2419200
                minimum = 604800
        mydebian.org    nameserver = ns.mydebian.org.
        mydebian.org    mail exchanger = 0 mail.mydebian.org.
        Name:   mydebian.org
        Address: 192.168.102.47

使用dig测试

        tonybox2:~# dig @192.168.102.47 mydebian.org

        ; <<>> DiG 9.3.2 <<>> @192.168.102.47 mydebian.org
        ; (1 server found)
        ;; global options:  printcmd
        ;; Got answer:
        ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41793
        ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

        ;; QUESTION SECTION:
        ;mydebian.org.                  IN      A

        ;; ANSWER SECTION:
        mydebian.org.           604800  IN      A       192.168.102.47

        ;; AUTHORITY SECTION:
        mydebian.org.           604800  IN      NS      ns.mydebian.org.

        ;; ADDITIONAL SECTION:
        ns.mydebian.org.        604800  IN      A       192.168.102.47

        ;; Query time: 31 msec
        ;; SERVER: 192.168.102.47#53(192.168.102.47)
        ;; WHEN: Mon Aug 14 09:16:27 2006
        ;; MSG SIZE  rcvd: 79

        tonybox2:~# dig @192.168.102.47 ftp.mydebian.org

        ; <<>> DiG 9.3.2 <<>> @192.168.102.47 ftp.mydebian.org
        ; (1 server found)
        ;; global options:  printcmd
        ;; Got answer:
        ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63890
        ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

        ;; QUESTION SECTION:
        ;ftp.mydebian.org.              IN      A

        ;; ANSWER SECTION:
        ftp.mydebian.org.       604800  IN      A       192.168.102.48

        ;; AUTHORITY SECTION:
        mydebian.org.           604800  IN      NS      ns.mydebian.org.

        ;; ADDITIONAL SECTION:
        ns.mydebian.org.        604800  IN      A       192.168.102.47

        ;; Query time: 22 msec
        ;; SERVER: 192.168.102.47#53(192.168.102.47)
        ;; WHEN: Mon Aug 14 09:16:41 2006
        ;; MSG SIZE  rcvd: 83

反向查询

        tonybox2:~# dig @192.168.102.47 -x 192.168.102.47

        ; <<>> DiG 9.3.2 <<>> @192.168.102.47 -x 192.168.102.47
        ; (1 server found)
        ;; global options:  printcmd
        ;; Got answer:
        ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21885
        ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 1, ADDITIONAL: 1

        ;; QUESTION SECTION:
        ;47.102.168.192.in-addr.arpa.   IN      PTR

        ;; ANSWER SECTION:
        47.102.168.192.in-addr.arpa. 604800 IN  PTR     www.mydebian.org.
        47.102.168.192.in-addr.arpa. 604800 IN  PTR     mail.mydebian.org.
        47.102.168.192.in-addr.arpa. 604800 IN  PTR     mydebian.org.

        ;; AUTHORITY SECTION:
        102.168.192.in-addr.arpa. 604800 IN     NS      mydebian.org.

        ;; ADDITIONAL SECTION:
        mydebian.org.           604800  IN      A       192.168.102.47

        ;; Query time: 33 msec
        ;; SERVER: 192.168.102.47#53(192.168.102.47)
        ;; WHEN: Mon Aug 14 09:17:00 2006
        ;; MSG SIZE  rcvd: 138

3.6 纯缓存域名服务器

192.168.102.48 为我们的dns 缓存服务器,首先, 在在192.168.102.48 机器上安全bind9, 在配置前我们用dig 进行测试

        tonybox2:/etc/bind# dig @192.168.102.48 www.mydebian.org

        ; <<>> DiG 9.3.2 <<>> @192.168.102.48 www.mydebian.org
        ; (1 server found)
        ;; global options:  printcmd
        ;; Got answer:
        ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 34137
        ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

        ;; QUESTION SECTION:
        ;www.mydebian.org.              IN      A

        ;; Query time: 1844 msec
        ;; SERVER: 192.168.102.48#53(192.168.102.48)
        ;; WHEN: Tue Aug  8 12:05:17 2006
        ;; MSG SIZE  rcvd: 34

修改named.conf.options文件

        tonybox2:/etc/bind# cat 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.

                 forwarders {
                        192.168.102.47;  //主域名服务器的IP地址
                 };

                auth-nxdomain no;    # conform to RFC1035

        };

然后再进行测试

        tonybox2:/etc/bind# dig @192.168.102.48 www.mydebian.org

        ; <<>> DiG 9.3.2 <<>> @192.168.102.48 www.mydebian.org
        ; (1 server found)
        ;; global options:  printcmd
        ;; Got answer:
        ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54332
        ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

        ;; QUESTION SECTION:
        ;www.mydebian.org.              IN      A

        ;; ANSWER SECTION:
        www.mydebian.org.       604800  IN      A       192.168.102.47

        ;; AUTHORITY SECTION:
        mydebian.org.           604800  IN      NS      mydebian.org.

        ;; ADDITIONAL SECTION:
        mydebian.org.           604800  IN      A       192.168.102.47

        ;; Query time: 44 msec
        ;; SERVER: 192.168.102.48#53(192.168.102.48)
        ;; WHEN: Tue Aug  8 12:05:47 2006
        ;; MSG SIZE  rcvd: 80

所谓的 forwarder,就是当某一台 NS 主机遇到非本机负责的 zone ( slave zone 也属于本机负责的范围) 查询请求的时候,将不直接向 "." zone 查询而把请求转交给指定的 forwarder (一台或多台) 主机代为查询。

我们知道,当DNS服务器接到客户端主机的查询请求时,首先会检查这个查询是否属于本机管辖,否则将转向 "." zone 再逐级的查询下去,最后再把查询结果告诉客户端。

在这个过程之中,DNS服务器还会将查询到的结果存放到缓存中。只要缓存中的 TTL 没过期,在下次遇到同样查询的时候,就可以直接将结果响应给客户端,而无需再重复上次的查询流程。

如果DNS服务器上指定了forwarder,那这个DNS发现缓存中没有记录时,将不向 "." 查询,而是向 forwarder 送出同样的请求(转发),然后等待查询结果,即把逐级往下查询这个耗费精力的动作,交给 forwarder 负责。但无论这个结果是自己直接查询得来的,还是 forwarder 送回来的,DNS服务器都会保存一份数据在缓存中。

这样,以后的相同查询就快多了,这对于DNS所服务的 客户端而言查询效率会提高很多。

        /var/named/named.ca
        dig @a.root-servers.net . ns > /var/named/named.ca

3.7 辅助域名服务器

a. 192.168.102.49 为我们的dns 缓存服务器,首先, 在在192.168.102.49 机器上安全bind9,

b. 在主配置文件/etc/named.conf中加入如下内容:

        zone "mydebian.org" {
                type slave;
                file "/etc/bind/slaves/db.mydebian";
                masters {192.168.102.47;};
        };

        zone "102.168.192.in-addr.arpa" {
                type slave;
                file "/etc/bind/slaves/db.192";
                masters {192.168.102.47;};
        };

type后面的值已经成为slave; 表示定义的是辅助域名服务器

file 后面也可以是别的文件名不必与主域DNS服务器的设置一样

masters 后为主域DNS服务器的IP地址, 可以是多个IP,型如

        masters {ip1;ip2;ip3;};

c. 创建/etc/bind/slaves/目录

        tonybox2:/etc/bind# mkdir slaves

        tonybox2:/etc/bind# chown bind.bind slaves

d. 重启dns服务

        tonybox2:/etc/bind/slaves# /etc/init.d/bind9 restart

named进程第一次启动时,辅助域名服务器就下载主域名服务器的信息;辅助域名服务器根据主域名服务器的对应SOA记录规定的刷新时间间隔,去主域名服务器查询相关信息。

        tonybox2:/etc/bind/slaves# ls -l
        total 8
        -rw-r--r-- 1 bind bind 410 2006-08-08 12:23 db.192
        -rw-r--r-- 1 bind bind 430 2006-08-08 12:23 db.mydebian

查看 /etc/bind/slaves 目录,我门会发现已经从主域名服务器获取了相应的资源文件

如果用户bind对于/etc/bind/slaves目录没有写权限, 则查看 /var/log/syslog 会出现如下类似错误:

        tonybox:~# tail /var/log/syslog

        Aug  8 12:30:09 tonybox2 named[3849]: zone mydebian.org/IN: Transfer started.
        Aug  8 12:30:09 tonybox2 named[3849]: transfer of 'mydebian.org/IN' from 192.168.102.47#53: connected using 192.168.102.15#1075
        Aug  8 12:30:09 tonybox2 named[3849]: dumping master file: /etc/bind/tmp-VHTxU6CT5n: open: permission denied
        Aug  8 12:30:09 tonybox2 named[3849]: transfer of 'mydebian.org/IN' from 192.168.102.47#53: failed while receiving responses: permission denied
        Aug  8 12:30:09 tonybox2 named[3849]: transfer of 'mydebian.org/IN' from 192.168.102.47#53: end of transfer
        Aug  8 12:30:10 tonybox2 named[3849]: zone 102.168.192.in-addr.arpa/IN: Transfer started.
        Aug  8 12:30:10 tonybox2 named[3849]: transfer of '102.168.192.in-addr.arpa/IN' from 192.168.102.47#53: connected using 192.168.102.15#1076
        Aug  8 12:30:10 tonybox2 named[3849]: dumping master file: /etc/bind/tmp-dxbiD1JtTK: open: permission denied
        Aug  8 12:30:10 tonybox2 named[3849]: transfer of '102.168.192.in-addr.arpa/IN' from 192.168.102.47#53: failed while receiving responses: permission denied
        Aug  8 12:30:10 tonybox2 named[3849]: transfer of '102.168.192.in-addr.arpa/IN' from 192.168.102.47#53: end of transfer