简介
由于dns服务的运行过程网络上有很多,随便搜搜就能找到dns的工作流程,在这里就不多做赘述了,主要是讲怎么配置
使用Centos搭建dns服务需要使用bind服务,所以我们需要先使用yum安装bind
系统
主机 | IP地址 |
Centos7(Server) | 192.168.31.148 |
Ubuntu(Client) | 192.168.31.234 |
配置
yum install -y bind //安装bind服务
如果安装失败可能是因为yum源的原因,可以试试更换yum源为国内源,配置文件在/etc/yum.repos.d/下
bind服务会产生一些文件 /etc/named.conf /etc/named.rfc1912.zones 这两个文件是dns的配置文件
options {
listen-on port 53 { localhost; }; // 监听本地端口53 localhost代表本地所有IP地址
directory "/var/named"; // 域名解析配置文件地址
allow-query { localhost; any; }; // 允许查询地址 为了方便设置为any,可以设置单个IP使用分号;分割
recursion yes; // 客户机是否可以查询其他DNS服务器 我觉得最好写yes
dnssec-enable no; // 是否支持dnssec
dnssec-validation no; // 是否进行dnssec确认开关
};
// 在此配置文件中 zone 代表一个域区
zone "." IN { // 根域
type hint;
// master:表示定义的是主域名服务器
// slave :表示定义的是辅助域名服务器
// hint:表示是互联网中根域名服务器
file "named.ca";
};
include "/etc/named.rfc1912.zones"; // 域配置文件
有一些配置因为并没有什么改动或者是不需要详细说明的就没有展示出来,不要认为这就是named.conf文件的全部了,也不要去删除这里没有的语句,保持原样就好
我们在 /etc/named.rfc1912.zones 里配置域区
正向解析
通过域名解析到IP地址
IP --> FQDN
在named.rfc1912.zones里添加下面的配置完成域区配置
zone "myjinji.top" IN { // 声明myjinji.top域
type master; // 主域名服务器
file "myjinji.top.zone"; // 域配置文件
};
因为 named.conf include的原因,其实在named.conf里配置域区也是可以的,但是推荐在专门的文件里配置,这样显得更规范
那么域区已经声明完毕了,光声明不行,我们还得告诉客户端,如果你想访问 myjinji.top 就去找哪个IP
在上面的 named.conf 里,我们设置了域解析文件目录在 /var/named/下,所以我们需要进入这个文件夹内,配置我们的域解析文件
cd /var/named/
cp -p named.localhost myjinji.top.zone
因为我个人比较懒,不想重头开始写,于是就拷贝一份默认的配置文件然后进行修改,注意后面的文件名一定要和前面声明域区时的文件 保持一致 不然会导致无法解析,因为bind不知道myjnji.top的域解析文件在哪
myjinji.top.zone 文件是这样的 ↓
$TTL 1D // 生命缓存一天 全局继承
// 在zone文件中注释是以 “;”开始的
// SOA为起始授权记录
// 第一个@表示当前域myjinji.top
// 第二个@表示dns服务器 rname.invalid.为邮箱服务器 注意主机名后面必须有.
@ IN SOA @ rname.invalid. (
0 ; serial // 序列号
1D ; refresh // 刷新时间
1H ; retry // 重试时间
1W ; expire // 过期时间
3H ) ; minimum // 否定答案的TTL值
// 一条完整的语句应该是 @ 时间 IN NS @这样的 因为zone文件的规则是,上一句写了后面的就可以不写,继承上一句的属性
// DNS解析服务器
NS @
A 127.0.0.1 // A记录
AAAA ::1 // IPv6
我们需要修改一下 myjinji.top.zone 使它满足我们的需求
$TTL 1D
@ IN SOA ns.myjinji.top. rname.invalid. ( // dns解析服务器就是我们自己
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns // 承接上面的ns
@ A 192.168.31.148 // 将当前域解析到192.168.31.148 也就是myjinji.top
www A 192.168.31.148 // 其实这是一种简写 应该是这样的www.myjinji.top.
ns A 192.168.31.148 // 定义 NS ns
demo CNAME www // CNAME别名 在解析demo时转发到www上
就这样正向解析就完成了,我们需要使用两个命令检查我们的配置是否有误
测试
named-checkzone myjinji.top /var/named/myjinji.top.zone // 检查与myjinji.top对应的域解析文件
named-checkconf // 检查配置文件
如果都没有问题的话我们就可以重启服务验证是否正确了
换到客户端Ubuntu上,注意一定要配置dns服务器为本地服务器,否则会解析不到我们的测试地址 修改/etc/resolv.conf nameserver 为192.168.31.148
使用nslookup命令解析myjinji.top
反向解析
通过IP解析到域名
FQDN --> IP
还是在/etc/named.rfc1912.zones里配置我们的反向域配置
// 格式为IP地址.in-addr.arpa 注意IP地址一定要反着写
// 比如 我的IP地址是192.168.31.148/24 所以格式就应该是 31.168.192.in-addr.arpa
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
添加一个
zone "31.168.192.in-addr.arpa" IN {
type master;
file "192.168.31.zone";
};
接着在/var/named/文件夹下复制named.loopback
// 注意这个文件也得和named.rfc1912.zones里声明的文件名一致
cp -p /var/named/named.loopback /var/named/192.168.31.zone
于是复制好的192.168.31.zone文件内容应该是这样的:
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::1
PTR localhost. // PTR反向解析
修改为:
$TTL 1D
@ IN SOA ns.myjinji.top. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns.myjinji.top. // 注意后面都需要 .
148 PTR ns.myjinji.top. // 192.168.31.148 解析了ns.myjinji.top.
148 PTR www.myjinji.top. // 192.168.31.148 解析了www.myjinji.top.
148 PTR demo.myjinji.top. // 192.168.31.148 解析了demo.myjinji.top.
测试
named-checkzone "31.168.192.in-addr.arpa" 192.168.31.zone
总结
自己学习的时候网上的教程五花八门,配置起来很麻烦,于是我自己琢磨了一天才搞明白这个服务到底是怎么运转的
在学习的时候遇到了很多问题,比如zone文件的编写 SOA NS A 这些都挺奇怪的,还有@所代表的含义,配置好几次都不成功,气的我想捶桌子(;´д`)ゞ 不过还好,我静下心来仔细琢磨,终于成功了。
所以说学技术的时候一定不能急躁
个人笔记,不喜勿喷(`・ω・´)