DNS简介
什么是DNS
全名:Domain Name System
作用:管理主机的“户籍”--主机名:IP
是一个分布式数据系统
DNS服务器的起源
最早的主机解析,依靠hosts文件,由NIC(Network Information Center)维护,后来主机数量变得非常庞大,网络越来越得复杂,就产生了DNS服务器
DNS的结构
常用术语
DNS服务器:提供域名解析服务的主机
DNS客户机:需要查询主机域名信息的主机,任何联网的主机都需要查询域名,所以任意主机都是DNS客户机。DNS客户机需要知道DNS服务器在哪里,Linux靠/etc/resolv.conf指定。
正向解析:根据主机名称解析IP地址
反向解析:根据IP地址解析主机名称
DNS解析流程
使用chinaitlab.com域名服务器解析www.chinaitlab.com
服务器软件的安装
安装BIND
下载bind http://www.isc.org
http://ftp.isc.org/isc/bind9/9.4.3/bind-9.4.3.tar.gz
编译安装
tar xvzf bind-9.4.3.tar.gz
cd bind-9.4.3
./configure --sysconfdir=/etc
make
make install
vi /etc/named.conf
vi /var/named/domain.com.zone
named
配置文件
options { directory “/var/named”; };
zone “.” {
type hint;
file “named.ca”;
};
zone “localhost” {
type master;
file “named.local”;
};
根服务器
/etc/named.conf
zone “.” {
type hint;
file “named.ca”;
};
产生named.ca文件:
echo “nameserver IP” > /etc/resolv.conf可以通过合法IP如192.168.0.1来上网
dig -t NS .
dig -t NS . > /var/named/named.ca
more /var/named/named.ca
用RNDC控制服务器
1.产生rndc控制文件
rndc-confgen > /etc/rndc.conf
tail +13 /etc/rndc.conf >> /etc/named.conf
2.启动named服务器,监视/var/log/messages
named
tail /var/log/messages
测试rndc和解析的效果
rndc status
echo “nameserver 127.0.0.1” > /etc/resolv.conf
host www.chinaitlab.com
加本地域
zone “localhost” {
type master;
file “named.local”;
};
vi /var/named/named.local
@ 1D IN SOA localhost. Root (
//@表示zone名root@localhost.也就是说这个域出了问题应该发邮件给root, 但是有@就只能用root.localhost.又有@,可以简写成root 1D表示SOA本身的记录的生存期限是1天
2004081201 //serial
1H //1小时refresh
15M //15分钟retry
1W //1周expire
1D ) //1天TTL
IN NS @ //这里应该写成localhost. IN NS localhost. 又可以@ IN NS @ 又因为前面己有@所以可以写成IN NS @
IN A 127.0.0.1
//这里应该写成localhost. IN A 127.0.0.1 又可以@ IN A 127.0.0.1 又因为前面己有@所以可以写成IN A 127.0.0.1
测试:
rndc reload
host localhost
增加一个正向区
/etc/named.conf
zone "chinaitlab.com" {
type master;
file "chinaitlab.com.zone";
};
vi /var/named/chinaitlab.com.zone
www IN A 192.168.0.101
mail IN A 192.168.0.101
dns IN A 192.168.0.101
...
正向区文件
@ IN SOA chinaitlab.com root.chinaitlab.com. (
2004081201 ;serial
36000 ;refresh
7200 ;retry
3600000 ;expire
86400 ) ;TTL
IN NS ns.chinaitlab.com.
IN MX 10 mail.china.com.com.
ns IN A 192.168.0.101
www IN A 192.168.0.101
mail IN A 192.168.0.101
news IN CNAME www
调试
重起服务器
rndc reload
tail /var/log/messages
测试解析
host -t SOA chinaitlab.com
host -t NS chinaitlab.com
host www.chinaitlab.com
host news.chinaitlab.com
dig www.chinaitlab.com
echo "search chinaitlab.com" >> /etc/resolv.conf //表示DNS默认搜索域的范围,作为后缀出现
host www
more /etc/resolv.conf
nameserver 127.0.0.1
search chinaitlab.com
主要的配置过程总结
首先在主文件里面加一个新的区
more /etc/resolv.conf
先指名一个域,再指名类型,及维护的数据库文件名
建区文件
more /var/named/chinaitlab.com.zone
$TTL 1D定义一个全局的生存期限
$origin chinaitlab.com.定义全局的默认域的后缀,可要可不要
127.0.0的反向区
vi /etc/named
zone "0.0.127.in-addr.arpa" { //0.0.127网段后面是网段的反向地址
type master;
file "127.0.0.zone";
};
vi /var/named/127.0.0.zone
more /var/named/127.0.0.zone
@ IN SOA @ root.localhost. ( 2004081201 1H 15M 1W 1D )
//这里的@表示反向区名0.0.127.in-addr.arpa. 管理员地址root.localhost.
IN NS localhost.
//NS记录指向自己的服务器,表示当前反向区的DNS服务器是localhost
1 IN PTR localhost.
//1表示区的IP地址127.0.0.1 也可以写成1. 0.0.127.in-addr.arpa
rndc reload
host 127.0.0.1
dig -x 127.0.0.1
dig -t PTR 1.0.0.127.in-addr.arpa
增加一个反向区
vi /etc/named.conf
zone "0.168.192.in-addr.arpa" {
type master;
file "192.168.0.zone";
};
vi /var/named/192.168.0.zone
vi /var/named/192.168.0.zone
@ IN SOA chinaitlab.com. root.chinaitlab.com. (
2004081201
36000
7200
3600000
86400 )
IN NS chinaitlab.com.
101 IN PTR www.chinaitlab.com.
102 IN PTR ftp.chinaitlab.com.
103.0.168.192.in-addr.arpa. IN PTR mail.chinaitlab.com.
子域授权
主服务器的vi /var/named/chinaitlab.com.zone
domain IN NS ns.domain
(domain.chinaitlab.com IN NS ns.domain.chinaitlab.com)
ns.domain IN A 192.168.0.101 把子域 domain.chinaitlab.com 授权给 192.168.0.101主机
也可以写成
domain IN NS domain
IN A 192.168.0.101
ping 192.168.0.101
vi /etc/named.conf //在子域服务器192.168.0.101主机上添加新的区
zone "domain.chinaitlab.com" {
type master;
file "domain.chinaitlab.com.zone";
};
子域服务器的区文件domain.chinaitlab.com.zone
vi /var/named/domain.chinaitlab.com.zone
$TTL 1D
@ IN SOA @ root ( 2004081201 1H 15M 1W 1D )
IN NS ns
ns IN A 192.168.0.101
www IN A 192.168.0.200
测试
host ns.domain.chinaitlab.com
host www.domain.chinaitlab.com
同时在主域服务器也能查到
host ns.domain.chinaitlab.com
host www.domain.chinaitlab.com
辅助域名服务器
host -t SOA chinaitlab.com确认主服务器可以解析到chinaitlab.com信息
在输助域名服务器上配置同步
主配置文件/etc/name.conf
zone "chinaitlab.com" {
type slave;
file "chinaitlab.com.zone";
masters { 192.168.0.101; };
};
ls -ld /var/named/
ps aux |grep named
chmod g+w /var/named改变成可写,才能从主域名服务器同步数据库到辅助域名服务器
ls /var/named可以看到 chinaitlab.com.zone,说明同步成功
子域服务器如何刷新主域服务器的数据库?
是靠
2004081201 ;serial需手工改动编号
36000 ;refresh如1小时刷新一次,如果发生变化则同步(1 hour)
900 ;retry 表示若同步失败,则隔15分钟尝试一次(15 minutes)
604800 ;expire 表示一个星期都尝试失败就放弃尝试(1 week)
86400 ;TTL mininum最小生存期限 (1 day)
来同步的
安全管理与控制
希望named以普通身份执行,要建一个named身份的权限
因为普通用户执行守护进程的时间需要写ls /var/run/这个目录,这个目录包涵的是每个进程的pid进程文件,而普通用户是无权写ls /var/run/目录的
首先vi /etc/named.conf指定自己的特定的pid文件
options {
directory "/var/named";
pid-file "/var/run/named/named.pid";
};
useradd -s /bin/false -d /dev/null named 不让named用户使用shell,也不让它有home目录
ls /home/
id named
mkdir /var/run/named
chown named.named /var/run/named 把/var/run/named赋给named.named
chmod 700 /var/run/named 保证named可以写这个目录
killall -9 named
named -u named 表示以named身份执行
tail /var/log/messages查看日志有没有错误
ps aux | grep named查看是否以named身份执行
为了保证每次服务器启动都是以这个方式执行
which named查看name命令路径
echo "/usr/local/sbin/named -u named" >> /etc/rc.local 把命令追加到/etc/rc.local,开机自动运行
同时在辅助域名服务器ls -ld /var/named目录也要让named可写
常用配置选项
options {
directory “/var/named”; 默认数据库存放位置
forwarders {192.168.0.101;};如果不能解析就转发给谁
allow-transfer {192.168.0.101;};允许某个地址同步你的数据库,控制辅助域名服务品
allow-query {192.168.0/24;};允许查询的客户机的查询范围
};
zone “chinaitlab.com” {
type master;
file “chinaitlab.com.zone”;
allow-transfer { “192.168.1.1”; };
};
配置过程
vi /etc/namd.conf
more /etc/rndc.conf rndc-confgen产生
ls /var/named
dig -t NS .把主域服务器找同步到本地服务器
如果要更新主域服务器的数据库要手工修改主域服务器的序列号
否则辅助域名服务器不知道主域服务器发生过变化
实验
wget http://ftp.isc.org/isc/bind9/9.5.0-P2/bind-9.5.0-P2.tar.gz
rm -rf bind-9.4.3.tar.gz
tar zxvf bind-9.5.0-P2.tar.gz
./configure –sysconfdir=/etc
make
make install
ls /usr/local/bin/应用程序安装位置
ls /usr/local/sbin/服务器程序安装位置
vi /etc/named.conf
more /etc/named.conf
options {
directory "/var/named";
};
zone "." {
type hint;
file "named.ca";
};
echo "nameserver 192.168.0.101" > /etc/resolv.conf
dig -t NS.挖掘根目录的DNS服务器 -t表示类型,有NS、A类型
echo "nameserver 192.5.5.241" > /etc/resolv.conf
dig -t NS . > /var/named/named.ca
named
rndc status
ps aux | grep named
tail /var/log/messages
nameserver 127.0.0.1
named
/usr/local/sbin/rndc-confgen > /etc/rndc.conf
cat -n /etc/rndc.conf打印出行数
tail +13 /etc/rndc.conf >> /etc/named.conf从文件的最后13行追加到/etc/named.conf
vi /etc/named.conf
:.,$-1s/^#/ //
:.表示当前行,表示到那里$表示到最后一行-1表示倒数第二行
s表示替换/^#/ 行首的#,空格用转义字符/ //表示删除
killall -9 named 杀死named进程
named重启DNS
ps aux | grep named查看named进程
rndc status查看named状态
more /etc/resolv.conf 确认一下目前的DNS是自己
nameserver 127.0.0.1
host www.chinaitlab.com如果能找到IP地址说明我们解析成功
我们用户环境总是有个主机localhost
你要取替more /etc/hosts文件,要为localhost解析,要把localhost域加进DNS
现在用host localhost解析不到
dig host都是把域发你指定的nameserver来查询的
vi /etc/named.conf
zone "localhost" {
type master;
file "named.local";
};
vi /var/named/named.local
@ 1D IN SOA localhost. root (
2004081201
1H
15M
1W
1D )
IN NS @
IN A 127.0.0.1
killall -9 named
named
host localhost
dig localhost
dig -t NS localhost
dig -t A localhost
host -t NS localhost
host -t A localhost
增加一个新域 chinaitlab.com
vi /etc/named.conf
zone "chinaitlab.com" {
type master;
file "chinaitlab.com.zone";
};
more /var/named/chinaitlab.com.zone
@ 1D IN SOA chinaitlab.com. root (
2004081201
1H
15M
1W
1D )
IN NS ns
IN MX 10 mail
ns IN A 192.168.0.101
wwww IN A 192.168.0.103
mail IN A 192.168.0.104
news IN CNAME www
调试
rndc reload
tail /var/log/messages 查看日志有没有错误
more /var/named/chinaitlab.com.zone
@ 1D IN SOA chinaitlab.com. root (
2004081201
1H
15M
1W
1D )
IN NS @
IN A 192.168.0.101
IN MX 10 mail
www IN A 192.168.0.101
mail IN A 192.168.0.101
news IN CNAME www
host chinaitlab.com
host www.chinaitlab.com
more /var/named/chinaitlab.com.zone
@ 1D IN SOA chinaitlab.com. root (
2004081201
1H
15M
1W
1D )
IN NS @
IN A 192.168.0.101
IN MX 10 mail
www IN A 192.168.0.101
mail IN A 192.168.0.103
ftp IN A 192.168.0.102
news IN CNAME www
host -t NS chinaitlab.com 查看 chinaitlab.com的DNS是谁
host -t A chinaitlab.com 查看A记录
测试工具
host -t SOA chinaitlab.com
host -t NS chinaitlab.com