基于《DNS与Bind》的学习
DNS基础
TCP/IP网络依赖IP地址进行设备间通信,但是数字形式的IP地址难以记忆,所以使用域名(如www.google.com)解析成IP地址,以便访问该网络设备。
本机上的/etc/hosts
中存放了部分域名到IP地址的映射,可以手工维护,分散式管理映射。
如在mac中的Finder中按下Shift
+command
+G
,输入/etc/hosts
,即可找到本机的名称解析配置文件。
但hosts
文件不可能存下所有的(域名,IP地址)映射,于是便引入了DNS。
域名系统(Domain Name System,DNS)通过分布式的数据库来实现IP地址和域名的映射。
DNS基于C/S架构,服务端端口号UDP53、TCP53。
DNS域名结构
DNS采用分布式的数据库,是一个逆向的树形结构。
DNS树每个节点代表一个域
根域名服务器
最高层的域就是根域root,全球共13台根域名服务器,根域即是一个点
.
,通常都省略不写。顶级域名服务器
又称一级域名,常见的有”.com”、”.org”、”.net”、”.cn”等。
剩下的域为二级、三级、四级域,最多可达127级域名。
FQDN 全称域名 = 主机名 + 域名
以
www.baidu.com
和tieba.baidu.com
为例baidu.com
为域名,www
和tieba
都是baidu.com
下的主机,一个域下可以定义多台主机,只需配置好主机名和对应主机的IP地址即可。
www.baidu.com
本该有一个根域名的.
,即www.baidu.com.
,但根域名的.
一般省略不写。
DNS查询方法
迭代查询
递归查询
缓存和更新
域名解析顺序
- 查找 /etc/hosts
DNS软件BIND
BIND是一款提供DNS服务的软件,Centos安装BIND作为DNS服务器,程序名称为named
BIND相关程序包有4个:
bind
:服务器bind-libs
:相关库bind-utils
:客户端工具bind-chroot
:安全包
Bind安装
在Centos上使用yum
安装的bind
切换到root用户,以获取权限
1
su root
使用
yum
安装Bind1
yum -y install bind
安装完bind后,相关程序包存在依赖性,也会一起安装,可以用
rpm
查看是否顺带安装了相关程序包1
rpm -qi bind-libs
1
rpm -qi bind-utils
1
rpm -qi bind-chroot
如缺少
bind-libs
、bind-utils
,建议单独安装
BIND包相关文件
查询BIND包相关文件列表
1 | rpm -ql bind |
里面的常用文件介绍:
- BIND主程序:
/usr/sbin/named
- 主配置文件:
/etc/named.conf
- 数据库目录:
/var/named
启动DNS服务
启动named程序,本机即可充当DNS服务器
1 | systemctl start named |
查看DNS服务器
方法一:可视化页面中查看DNS
右上角 Wired Settings
-> Wired
的设置 -> DNS
方法二:查看DNS客户机配置文件(/etc/resolv.conf)
/etc/resolv.conf
是DNS客户机配置文件
1 | cat /etc/resolv.conf |
查看该文件
1 | # Generated by NetworkManager |
查看nameserver
项,可以看出使用的DNS服务器的IP地址为192.168.45.2
方法三:查看网卡配置文件(/etc/sysconfig/network-scripts/ifcfg-ens33)
每种Linux系统的网卡配置文件路径不同,详见 相关文件配置 -> 网卡配置文件
1 | cat /etc/sysconfig/network-scripts/ifcfg-ens33 |
查看DNS
配置选项
设置DNS服务器
CentOS配置网卡为静态IP
DHCP协议会自动动态配置IP和DNS服务器,为了方便学习DNS,建议改为静态IP模式学习。
如本身就是静态IP,请跳过此步。
查看是静态IP还是动态IP
可以在网卡配置文件中查看采用的是DHCP协议还是静态IP
查看网卡配置文件
1 | cat /etc/sysconfig/network-scripts/ifcfg-ens33 |
显示
1 | TYPE="Ethernet" |
查看BOOTPROTO
选项,如果是dhcp
,则采用DHCP协议;如是static
,则采用静态IP
配置网卡为静态IP
打开网卡配置文件
1
vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改配置
1
2BOOTPROTO=static
ONBOOT=yes增加配置
查看网络配置,手动填入
1
2
3IPADDR=192.168.45.130
NETMASK=255.255.255.0
GATEWAY=192.168.45.2重启网卡
1
nmcli connection reload
1
nmcli connection up ens33
或者
1
systemctl restart network
此时,网卡配置文件内容如下
1 | TYPE=Ethernet |
没有配置DNS服务器,查看DNS服务器,也都是为空
此时,尝试ping一下域名
1 | ping baidu.com |
没有DNS服务器,域名解析失败
设置DNS服务器
编辑网卡配置文件,修改DNS服务器,如尝试加入本机IP作为DNS服务器
1
vi /etc/sysconfig/network-scripts/ifcfg-ens33
加入一行DNS配置,
127.0.0.1
是送回地址,指本机。1
DNS1=127.0.0.1
如有多个DNS服务器,则DNS1、DNS2依次类推
重启该网卡
1
nmcli connection reload
1
nmcli connection up ens33
重新查看DNS服务器
1
cat /etc/resolv.conf
显示
1
nameserver 127.0.0.1
可以看到
127.0.0.1
添加进了DNS服务器中,此时本机既是DNS服务器,又是DNS的客户端启动BIND的DNS服务
1
systemctl start named
ping一下域名
1
ping baidu.com
ping成功,本机作为DNS服务器完成了baidu.com的域名解析
多IP配置
一台虚拟机可以配置多个静态IP,即多网卡。
上面的DNS配置只利用了单网卡ens33
,同时作为DNS服务器和客户机。
可以配置多个IP地址,分别作为DNS服务器和客户机。
多IP配置
1 |
主DNS配置
相关文件配置
DNS客户机配置文件 /etc/resolv.conf
/etc/resolv.conf
是DNS客户机配置文件,用于设置DNS服务器的IP地址及DNS域名,供域名解析器(resolver)使用。
每一行以一个关键字开头,后接一个或多个由空格隔开的参数。
关键字
关键字有四个:(nameserver
是必填项,其余的关键字都是可选)
nameserver
- 表明DNS服务器的IP地址
- 可以有多行,按顺序查询,如果前面的IP无响应,则查询下一个IP
domain
- 声明主机的域名
- 很多程序用到它,如邮件系统;当为没有域名的主机进行DNS查询时,也要用到。如果没有域名,主机名将被使用,删除所有在第一个点( .)前面的内容
search
- 它的多个参数指明域名查询顺序。当要查询没有域名的主机,主机将在由search声明的域中分别查找
- 如要域名
www
解析,但www
无法解析,如配置中有search baidu.com
,则在www
后加上.
+baidu.com
,对www.baidu.com
重新进行解析 domain
和search
不能共存;如果同时存在,后面出现的将会被使用
sortlist
- 允许将得到域名结果进行特定的排序。它的参数为网络/掩码对,允许任意的排列顺序
域名解析顺序
- 查找
etc/hosts
- 根据
nameserver
指定的DNS服务器解析域名 - 如果所有的
nameserver
都找不到域名,则进行search
补全,重新走1~2步
示例分析
查看/etc/resolv.conf
文件
1 | cat /etc/resolv.conf |
如
1 | # Generated by NetworkManager |
网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-ens33
Centos可在/etc/sysconfig/network-scripts
目录下查找网卡配置文件,Linux传统网卡设备命名是eth0
、eth1
这样的,而Centos提供了不同的命名规则,比如ens33
(Ubuntu的网卡配置文件有所不同)
查看网卡配置文件
1 | cat /etc/sysconfig/network-scripts/ifcfg-ens33 |
1 | TYPE=Ethernet #网卡类型:为以太网 |