DNS服务器配置(基于Ubuntu16.04的Bind)
下载Bind相关包
- 使用命令
sudo apt install bind9 bind9utils bind9-doc
修改配置
修改返回IPV4类型地址
修改配置文件 named.conf.options
该文件(/etc/bind/named.conf.options)需要修改三处:
- acl 部分:acl 是控制哪些客户端可以连接到这个 DNS 上的,支持子网掩码方式,例子中我把 10.19.250.0/24 网段中的所有 IP 都设为了可访问。
- recursion 字段:设置成 yes,表示允许递归 DNS 查询。
- allow-recursion 字段:允许递归查询的客户端范围,这里设置成了之前在 acl 中声明的 trusted。
- listen-on 字段:表示 DNS 服务监听在哪个地址上,填写本地 IP 即可。
- allow-transfer 字段:设置成 none 表示不允许其他 DNS 服务器从本 DNS 服务器中查询。
- forwarders 字段:原因是我们的内网 DNS 服务只提供了很有限的几条 DNS 记录,如果不做点什么的话,APT 源的地址都解析不了。BIND9 提供 DNS 查询的转发机制,当本地 DNS 查询不到,将查询转发到 forwarders 上,并把查询结果缓存到本地 DNS 上,这样问题就解决了。
options {
recursion yes;
allow-recursion { trusted; };
listen-on { 192.168.159.129; };
allow-transfer { none; };
...
forwarders {
114.114.114.114;
};
...
}
...
修改配置文件 named.conf.local
假设搭建的内网 DNS 要解析的域名为 cjc.com,那么 /etc/bind/named.conf.local 内容应改为
zone "cjc.com" {
type master;
file "/etc/bind/zones/db.cjc.com";
};
修改 zone 文件
zone 文件在前面里已经出现过了,file "/etc/bind/zones/db.example.com";
,需要在对应的目录下建立该文件。
需要注意的几点是:
- 不要漏掉域名后面的点,例如:testing.cjc.com
.
- 我们需要的 A 类型的记录,但是 NS 类型的记录也不要漏掉,不然会报错的。
named-checkconf[39493]: zone cjc.com/IN: has no NS records
named-checkconf[39493]: zone cjc.com/IN: not loaded due to errors.
named-checkconf[39493]: _default/cjc.com/IN: bad zone
修改本地DNS服务器
- 添加DNS服务器IP
- 此处为临时改变,待系统重启后,会自动恢复默认
检查配置
-
bind9 自带了检查配置文件语法正确性的工具,这可以降低排查错误的难度,所以在进一步测试 DNS 功能之前,我们先来好好利用这些工具检查一下前几步配置是否正确吧。
-
先来检查 named.conf.* 文件,如果运行该命令没有任何输出的话,就说明配置一切 OK,如果有的话,根据提示修改.
sudo named-checkconf
-
接下来用命令 named-checkzone 检查 zone 文件,命令格式如下:
sudo named-checkzone
,第一个参数是域名,参考 2.4 中配置的域名,第二参数
是 zone 文件,参考 2.5 中配置的 zone 文件sudo named-checkzone cjc.com /etc/bind/zones/db.cjc.com
重启服务
systemctl restart bind9
结果检测
HTTP服务器(基于Ubuntu16.04 Nginx)
安装Nginx
修改默认主页文件
DNS-HTTP 抓包分析
环境简述
- Ubuntu 16.04
- 基于 Ubuntu 的 DNS服务器 Bind9
- 基于 Ubuntu 的 WEB服务器 Nginx
实验流程
- 使用浏览器访问
www.testing.cjc.com
- 触发DNS服务器,查询域名,返回IP
- 浏览器向指定URL发起Get请求,返回数据,处理并呈现
报文分析
DNS请求报文
DNS响应报文
HTTP 报文
结果展示
SMTP 服务器配置(基于Ubuntu16.04 Postfix)
安装Mailutils
sudo apt-get install mailutils
- mailutils是一个命令行邮箱客户端,使用它可以很方便的发送和接收邮件, mailutils里面就包含了sendmail和postfix,当然你也可以只安装postfix,postfix包含sendmail。
配置一
安装postfix的时候会弹出两个配置,第一个是postfix配置类型,我们默认选择第二种:Internet Site就行,这几种配置分别表示:
- No configuration:表示不要做任何配置;
- Internet Site:表示直接使用本地SMTP服务器发送和接收邮件;
- Internet with smarthos: 表示使用本地SMTP服务器接收邮件,但发送邮件时不直接使用本地SMTP服务器,而是使用第三方smart host来转发邮件;
- Satellite system:表示邮件的发送和接收都是由第三方smarthost来完成。
- Local only:表示邮件只能在本机用户之间发送和接收。
配置邮箱域名
- 这里既是配置邮箱的后缀,例如我需要使用
root@duanran.cc
- 此处就输入
duanran.cc
- 届时用户名,会自动取得本地系统用户名
查看25端口是否开启
- 这里使用nmap包扫描端口
sudo apt install nmap
添加邮箱域名解析
- 即添加
duanran.cc
的DNS解析 - 如第一部分实验一致,这里只展示结果
使用sendMail发送邮件
邮箱接收
报文分析
220 服务就绪
250 请求服务建立成功
报文发送
- 客户用“MAIL FROM”向服务器报告发信人的邮箱与域名
- 服务器向客户回应应答码“250”,代表请求命令完成
- 客户用“RCPT TO”命令向服务器报告收信人的邮箱与域名
- 服务器向客户回应应答码“250”,代表请求命令完成
- 客户用“DTAT”命令对报文的传送进行初始化
- 服务器回应“354”,表示可以进行邮件输入了
- 客户用连续的行向服务器传送报文的内容,每行以两字符的行结束标识(CR与LF)终止。报文以只有一个“.”的行结束
- 服务器向客户回应应答码“250”,代表请求命令完成
客户端发送“QUIT”命令
- 客户端发送“QUIT”命令
- 服务器收到命令后,回应应答码“221”,并结束会话
所遇问题与相关解决方案
在首次未配置域名解析时,无法发送邮件
- 手动添加DNS记录
- 或使用自有公网DNS解析的域名
配置DNS解析时,报错
- 在修改相关配置文件时,应注意相关权限的分配
邮件无法回复情况
- 因本次实验使用的是笔者手动DNS解析的临时域名
- 故在回复时,公网无法查询到其DNS记录,即无法回信
- 解决方案:
- 使用已有公网DNS的域名
参考资料
其他文章,请关注或订阅笔者博客:断然不然嘞?