DNS Server
Dns Server - 域名解析服务器
🔲 实验环境:
&& 需要两台Centos -7 服务器,现在我们已经有了一台,还需要再创建一个新的虚拟机
新的虚拟机,需要配置主机名,网卡名称以及网络连接
🔻 配置网卡名称及设置IP地址
@@ 首先确认一下,所登录的用户是否是root用户,如果不是的话,修改完是无法保存的
sudo -i ##切换到root管理员用户
1.
vim /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=“
(
s
e
d
′
s
,
r
e
l
e
a
s
e
.
∗
(sed 's, release .*
(sed′s,release.∗,g’ /etc/system-release)”
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT=“console”
GRUB_CMDLINE_LINUX=“crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet net.ifnames=0 biosdevname=0”
GRUB_DISABLE_RECOVERY=“true”
修改完毕后
:wq
2.
刷新启动项,让Linux系统重新读取网卡配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
3.
reboot 重启系统
4.
我们需要添加一个名字为Eth0的网卡
nmcli connection add type ethernet ifname eth0 con-name eth0
5.
此时,网卡已经设置增加完毕,需要设置IP地址
[root@localhost ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.188/24 connection.autoconnect yes
6.
网卡IP地址参数已经设置完成,此时需要激活我们增加的这块网卡
[root@localhost ~]# nmcli connection up eth0
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)
7.
验证
[root@localhost ~]# ifconfig | head -3
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.4.188 netmask 255.255.255.0 broadcast 192.168.4.255
inet6 fe80::fc78:e19:3b5e:dc8b prefixlen 64 scopeid 0x20
纯文本
🔻 关闭防火墙及Selinux【为的是能让虚拟机1和虚拟机2正常访问】
1.关闭Linux的防火墙
systemctl disable firewalld --now
2.关闭Selinux安全机制
1)首先确认当前的Selinux状态
&& getenforce
Enforcing
2)设置临时Selinux的安装状态为宽松的
&& setenforce 0
设置完毕后,再次查看Selinux的临时状态
&& gerenforce
Permissive
3)设置Selinux的永久安全状态
&& vim /etc/selinux/config
1
2 # This file controls the state of SELinux on the system.
3 # SELINUX= can take one of these three values:
4 # enforcing - SELinux security policy is enforced.
5 # permissive - SELinux prints warnings instead of enforcing.
6 # disabled - No SELinux policy is loaded.
7 SELINUX=enforcing ##将严谨状态修改为关闭状态disabled
8 # SELINUXTYPE= can take one of three two values:
9 # targeted - Targeted processes are protected,
10 # minimum - Modification of targeted policy. Only selected processes are protected.
11 # mls - Multi Level Security protection.
12 SELINUXTYPE=targeted
:wq
纯文本
经过上述的配置,我们已经将两台虚拟机的访问的硬性条件配置完毕,那么接下来,我们就可以测试啦
虚拟机2:
ping 192.168.4.88
PING 192.168.4.88 (192.168.4.88) 56(84) bytes of data.
From 192.168.4.188 icmp_seq=1 Destination Host Unreachable
From 192.168.4.188 icmp_seq=2 Destination Host Unreachable
From 192.168.4.188 icmp_seq=3 Destination Host Unreachable
From 192.168.4.188 icmp_seq=4 Destination Host Unreachable
测试结果:不通,目标主机不可达
排错思路:
1.
我们首先要检查虚拟机1的网卡属性,IP地址,防火墙状态,Selinux安全状态
&& 经过检查,都没有问题
2.
这两个虚拟机要想互相访问到彼此,那么就需要两个虚拟机的虚拟网卡是一致的
&& 在虚拟机管理界面右键单击虚拟机,选择设置就可以看到当前虚拟机的虚拟网卡是哪个了
经检查,发现虚拟机1的虚拟网卡用的VMnet 1
然后,虚拟机2的虚拟网卡是NAT
所以,不能通信
##解决办法:
将虚拟机2的虚拟网卡更改为Vmnet 1
3.
测试
[root@localhost ~]# ping 192.168.4.88
PING 192.168.4.88 (192.168.4.88) 56(84) bytes of data.
64 bytes from 192.168.4.88: icmp_seq=1 ttl=64 time=0.266 ms
64 bytes from 192.168.4.88: icmp_seq=2 ttl=64 time=0.438 ms
64 bytes from 192.168.4.88: icmp_seq=3 ttl=64 time=0.331 ms
此时两台虚拟机可以互相访问
纯文本
DNS - 域名解析系统背景
为什么需要DNS系统
思考:36.152.44.95 和 www.baidu.com 哪个好记?
比如:我们现在买了一个服务器,然后请了开发工程师,做了一个网页,那么此时我们还需要一个公网IP地址,配置在内网的出口,目的是为了能够让消费者能访问的到,但是,消费者只能使用IP地址的方式来访问,为什么呢? 因为我们还没有去买一个网站域名,比如www.baidu.com www.taobao.com www.jd.com www.4399.com www.lol.com
那么,我们买了一个域名,又怎么让消费者能够访问呢? 服务器是怎么知道这个IP地址和域名是对应的?
DNS呢就相当于互联网中的114,查号台
DNS服务器的功能
● 正向解析:根据注册时候的域名查找其对应的IP地址
● 反向解析:根据IP地址查找对应的注册域名,不常用
DNS服务器的分类
● 根域名服务器
● 一级DNS服务器
● 二级DNS服务器
● 三级DNS服务器
🔲 常用的DNS服务器地址,是什么呢? 当我们在运营商那去购买一个公网IP地址的时候,他会给到我们一个我们相对应的省份,或者市区的运营商自己做的DNS服务器
🔲 为什么要用运营商的DNS服务器呢 ??
🔲 因为人家连接的公司多呗,连接的设备,服务器多
注意:所有的域名都必须要以点作为结尾,www.qq.com. [现在的浏览器会自动补全的]
DNS服务求的树形结构
根域名: .
一级域名: .cn .us .tw .hk .jp .kr
二级域名: .com.cn .org.cn .net.cn
三级域名: hhaha.com.cn .xixi.com.cn .nb.com.cn
完全合格的域名: 站点名+ 注册的域名
Linux中用的Linux背景
● BIND(Berkeley Internet Name Daeom)
● 伯克利Internet域名服务
● 官方网站:www.isc.org
● Bind服务器端的程序:
&& 主要执行程序:/usr/sbin/named
&& 系统服务名称: named
&& DNS协议默认端口是53 TCP/UDP
&& 运行时的虚拟的根环境:/var/named/chroot
&& 主配置文件:/etc/named.conf ##设置负责解析的域名
&& 地址库文件:/var/named ## 完全合格的主机名与IP地址对应关系
DNS服务器搭建
🔲 安装软件包
yum -y install bind bind-chroot
@bind:DNS主程序,主要提供服务的软件
@chroot:提供安全的,哪怕不安装这个chroot,bind程序也能运行,那这个chroot他主要提供一个虚拟根支持
虚拟根支持又叫牢笼政策,这个跟我们现实中的这个牢笼是一个意思,外面有人杀人放火,就把他逮捕到牢笼里
那在bind里,如果有一天bind程序中病毒了,开始乱删东西,或者传染病毒,那bind-chroot会在程序中监视
着bind的一举一动,突然发现bind中病毒了,有一些异常操作了,它会把bind锁到小黑屋里,
锁在/var/named/chroot/,不允许bind的所有程序出,也就是说,bind程序中病毒了,chroot会把它锁在
/var/named/chroot/
纯文本
🔲 修改主配置文件
##在修改之前,为了怕修改错误,导致程序不能使用,我们要做个备份
cp -p /etc/named.conf /etc/named.conf.bak
@@修改主配置文件
vim /etc/named.conf
1 //
2 // named.conf
3 //
4 // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
5 // server as a caching only nameserver (as a localhost DNS resolver only).
6 //
7 // See /usr/share/doc/bind*/sample/ for example named configuration files.
8 //
9 // See the BIND Administrator's Reference Manual (ARM) for details about the
10 // configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html
11
以上的注释全部DD掉
12 options {
13 listen-on port 53 { any; }; //允许谁访问我的53端口,将127.0.0.1修改为any
或者直接DD掉
14 listen-on-v6 port 53 { ::1; }; //这个是IPv6,我们也直接DD掉
15 directory "/var/named"; //指定地址库在哪个目录下
16 dump-file "/var/named/data/cache_dump.db";
17 statistics-file "/var/named/data/named_stats.txt";
18 memstatistics-file "/var/named/data/named_mem_stats.txt";
上面的是备份和缓存,这些我们都不涉及,直接DD就可以了
19 allow-query { localhost; }; //这个是允许谁查询,默认是本地
删掉就可以了
20
21 /*
22 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
23 - If you are building a RECURSIVE (caching) DNS server, you need to enable
24 recursion.
25 - If your recursive DNS server has a public IP address, you MUST enable access
26 control to limit queries to your legitimate users. Failing to do so will
27 cause your server to become part of large scale DNS amplification
28 attacks. Implementing BCP38 within your network would greatly
29 reduce such attack surface
30 */
以上的注释文件直接DD掉就可以了
31 recursion yes; //这个是递归查询选项,直接DD掉
递归:客户端只发一次请求,要求对方给出最终结果。
迭代:客户端发出一次请求,对方如果没有授权回答/声明回答,
它就会返回一个能解答这个查询的其它名称服务器列表,
客户端会再向返回的列表中发出请求,直到找到最终负责所查域名的名称服务器,
从它得到最终结果。
授权回答:向dns服务器查询一个域名,刚好这个域名是本服务器负责,返回的结果就是授权回答。
32 空行,DD掉
33 dnssec-enable yes; //DNS安全相关,也直接DD掉
34 dnssec-validation yes;
35
36 /* Path to ISC DLV key */
37 bindkeys-file "/etc/named.iscdlv.key";
38
39 managed-keys-directory "/var/named/dynamic";
40
41 pid-file "/run/named/named.pid";
42 session-keyfile "/run/named/session.key";
以上都是都是关于安全的,加密的选项,直接DD掉
43 };
44
45 logging {
46 channel default_debug {
47 file "data/named.run";
48 severity dynamic;
49 };
以上日志相关也删除掉
50 };
51 //空行,DD掉
52 zone "Tke.cn" IN { //zone指的是负责哪个域名,把.换成要负责的域名:Tke.cn
IN是互联网Internet的意思
53 type master; //hint是根域名服务器类型,我们搭建不了根域名服务器,
我们搭建一个主服务器,Master,也有从服务器,Slave;
54 file "Tke.cn.zone"; //这个是配置文件的名字,在这里写什么名字,待会就得
去创建这个配置文件,这是关联的
55 };
56 //空行,DD掉
57 include "/etc/named.rfc1912.zones";
58 include "/etc/named.root.key";
调用配置文件,也DD掉
59
:wq
纯文本
🔲 建立地址库文件
* 保证named用户对地址库文件有读取权限,不然的话访问不了,自然也解析不了
* 所有的域名都要以.作为结尾
* 如果没有以点作为结尾,那么默认补全本地库文件负责的域名
cd /var/named
cp -p named.localhost Tke.cn.zone
## cp -p 保持复制的时候的所属组和权限不变
## BIND这个程序给我们提供了地址库文件的模板,所以,我们拷贝一下就可以
ls - l baidu.com.zone ##确认一下,是否有读写的权限,所属组是否还是named这个程序
root有个很霸道的特性,就是只要是以root用户拷贝过来的,不管之前是谁的,现在就是我的
在大街上,我看到一辆很帅的车,兰博基尼,我上去摸一下,这就是我的了
我看到一个特别舒服的别墅,我上去摸一下,这就是我的了
这个也是root的被动技能,那么我们可以看一下id named
整个bind程序在运行的时候,都会以named这个用户去运行和读取所有的配置文件
这个也很安全,如果有一天程序被人入侵了,用户还是named,你只能干涉named的
相关程序和配置文件,你对其他文件啥也没有权限,啥也干不了,所以这个也是它
对于安全的一个设置,而且这个用户是自动创建的,在安装了bind之后,就自动的创建
而且,大多数这样的用户呢,是不能够登录我们的操作系统的
grep named /etc/passwd
## r -read 读取
## w -wirte 写入
## x -执行
vim Tke.cn.zone
1 $TTL 1D
2 @ IN SOA @ rname.invalid. (
3 0 ; serial
4 1D ; refresh
5 1H ; retry
6 1W ; expire
7 3H ) ; minimum
## 上面的是DNS配置的更加详细的东西,暂时不需要动
8 Tke.cn. NS Server //域名服务器Name Server
这个意思是前面这个域名是由谁负责的,哪个主机
所有的域名都必须以.结尾
9 Server A 192.168.4.123 //这个A是代表Address正向解析区域
10 www A 192.168.4.123
11 ftp A 11.22.33.44
10 AAAA ::1 //这4个A不是4A景区,也不是斗地主里面的那个王炸
表示的是IPv6的意思哈,IPv6的对应关系,DD掉就可以了
重启服务
systemctl restart named
纯文本
🔲 测试DNS服务器
利用虚拟机2来测试
nslookup www.Tke.cn 大家会发现没有效果,直接就超时了
;; connection timed out; no servers could be reached
原因分析:你没有告诉虚拟机2,解析这个域名去找谁
解决办法:
首先,我们要知道,每一个终端在本地都有一个DNS解析库,还有一个DNS服务器的指向【谁是DNS服务器】
echo nameserver 192.168.4.88 > /etc/resolv.conf
cat /etc/resolv.conf
nslookup www.Tke.cn
ping www.Tke.cn
纯文本
多区域的DNS服务器
老师,我们这公司好几个网站呢,这一个网站做一个DNS服务器,那5个网站就得做5个DNS服务器吗? 其实不用,BIND程序呢,支持多区域的DNS解析
cd /var/named/
vim /etc/named.conf
options {
listen-on port 53 { any; };
directory "/var/named";
};
zone "Tke.cn" IN {
type master;
file "Tke.cn.zone";
};
4yy p 复制粘贴
zone "qq.com" IN {
type master;
file "qq.com.zone";
};
:wq
cp -p named.localhost qq.com.zone
vim qq.com.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
qq.com. NS Server
Server A 192.168.4.123
www A 1.2.3.4
:wq
systemctl restart named
然后用虚拟机2测试即可