1、简述DNS服务器原理,并搭建主-辅服务器。
1.1、DNS服务器原理
1.1.1、NDS是什么
DNS(Domain Name Service的缩写)的作用就是根据域名查出IP地址。IP地址是由32位二进制数字组成,人们很难记住这些IP,相反,大家愿意使用比较容易记忆的主机名字。而电脑在处理IP数据报文时,是使用IP地址的,因为它是固定长度。
DNS查询的类型对于客户端来说是递归查询,对于DNS服务器来说,绝大多数是迭代查询的。DNS名称解析中,从名称到IP的查询叫做正向解析,而从IP到名称的查询叫做反向解析。如果DNS服务器至少解析了一个或一个以上的域叫做DNS主服务器或者DNS辅助服务器,如果不负责任何解析叫做DNS缓存服务器。
现在互联网规模很大,DNS被设计成一个分布式的数据库系统,他分布的功能就是把一个大的数据库切割成很多小的数据库,来分别提供一部分数据的处理。全球一共分布了13台DNS根服务器,名字为A至M。
1.1.2、DNS域名解析过程
- 用户使用浏览器输入网址时域名解析过程:
- 客户访问时,先查自己的hosts文件,有则返回
- 客户hosts中没有就去查自己的缓存,有则返回
- 客户缓存没有就去找dns服务器
- dns服务器先找根服务器获得顶级域服务器地址
- dns服务器在找顶级域服务器去获得二级域服务器地址
- dns服务器从二级域服务器获得最终的IP地址
- 客户端从dns服务器中得到IP地址
DNS区域数据库文件
资源记录(Resource Record)的类型有以下几个:
*SOA:起始授权记录,只能有一个,必须放在第一条
- NS:域名服务记录,其中一个为主,可以有多个
- A:IPv4地址记录
- AAAA:IPv6地址记录
- CNAME:别名记录
- PTR:反向解析记录
- MX:邮件交换器
相关测试工具及命令
-
dig命令
用于测试DNS系统,其不会查询hosts文件,使用格式:dig [-t RR_TYPE] name [@SERVER] [query options] 常用的查询选项包括: +[no]trace:跟踪解析过程; +[no]recurse:进行递归解析; 其常用用法包括: 反向解析测试:dig -x IP 测试区域传送:dig -t [axfr|ixfr] DOMAIN [@server]
-
host命令
其用法类似于dig命令,使用格式为:host [-t RR_TYPE] name SERVER_IP
-
nslookup命令
nslookup命令有两种使用模式,一种是命令模式,另一个交互模式。
其命令模式的使用格式为:nslookup [-options] [name] [server]
而交互模式的使用格式为:
nslookup>
server IP:以指定的IP为DNS服务器进行查询;
set q=RR_TYPE: 要查询的资源记录类型;
NAME: 要查询的名称; -
rndc命令
rndc命令为named服务的控制命令,其常用的用法有以下: rndc status:显示服务器状态 rndc reload:在不停止DNS服务器工作的情况下,重新加载配置文件和区域文件 rndc flush:清理DNS缓存
bind中的安全相关的配置
-
bind有四个内置的acl
none:没有一个主机; any:任意主机; local:本机; localnet:本机所在的IP所属的网络;
-
访问控制指令:
allow-query {}; 允许查询的主机;白名单; allow-transfer {}; 允许向哪些主机做区域传送;默认为向所有主机; allow-recursion {}; 允许哪些主机向当前DNS服务器发起递归查询请求; allow-update {}; DDNS,允许动态更新区域数据库文件中内容;
1.2、DNS主从服务器搭建
#需要四台主机
#DNS主服务器:192.168.2.157
#DNS从服务器:192.168.2.92
#web服务器:192.168.2.158
#DNS客户端:192.168.2.173
#关闭SElinux、关闭防火墙、时间同步
#1、 主DNS服务端配置
[root@localhost ~]# yum -y install bind
#修改bind配置文件
[root@localhost ~]# vim /etc/named.conf
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
#加上下面这行
#只允许从服务器进行区域传输
allow-transfer { 192.168.2.92;};
[root@localhost ~]# vim /etc/named.rfc1912.zones
#加上下面内容
zone "yezeng.org" IN {
type master;
file "yezeng.org.zone";
};
#DNS区域数据库文件
[root@localhost ~]# cp -p /var/named/named.localhost /var/named/yezeng.org.zone
#如果没有加-p选项,需要修改所有者或权限。chgrp named yezeng.org.zone
[root@localhost ~]# vim /var/named/yezeng.org.zone
$TTL 1D
@ IN SOA master admin.yezeng.org. (
20210325 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 192.168.2.157
slave A 192.168.2.92
www A 192.168.2.158
[root@localhost ~]# named-checkconf
[root@localhost ~]# named-checkzone jhd.org /var/named/yezeng.org.zone
[root@localhost ~]# systemctl start named
[root@localhost ~]# rndc reload #不是第一次启动服务
#2、 从DNS服务器配置
[root@localhost ~]# yum -y install bind
[root@localhost ~]# vim /etc/named.conf
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
#不允许其它主机进行区域传输
allow-transfer { none;};
[root@localhost ~]# vim /etc/named.rfc1912.zones
#后面加上
zone "yezeng.org" {
type slave;
masters { 主服务器IP;};
file "slaves/yezeng.org.slave";
};
[root@localhost ~]# systemctl start named #第一次启动服务
[root@localhost ~]# rndc reload #不是第一次启动服务
[root@localhost ~]# ls /var/named/slaves/yezeng.org.slave #查看区域数据库文件是否生成
#3、 客户端测试主从DNS服务架构
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=主服务器
DNS2=从服务器
#验证从DNS服务器是否可以查询
[root@localhost ~]# dig www.yezeng.org
[root@localhost ~]# curl www.yezeng.org
#在主服务器停止DNS服务
[root@localhost ~]# systemctl stop named
[root@localhost ~]# dig www.yezeng.org
[root@localhost ~]# curl www.yezeng.org
2、搭建并实现智能DNS。
2.1、设置服务器双IP
#三台服务器
#192.168.2.173 #服务器
#192.168.2.157 #模拟北京
#129.16.0.7 #模拟上海
[root@localhost ~]# ip a a 129.16.0.8/16 dev ens192 label ens192:1
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:ac:26:1e brd ff:ff:ff:ff:ff:ff
inet 192.168.2.173/24 brd 192.168.2.255 scope global noprefixroute ens192
valid_lft forever preferred_lft forever
inet 129.16.0.8/16 scope global ens192:1
valid_lft forever preferred_lft forever
inet6 fe80::3b03:7295:36b3:5dad/64 scope link noprefixroute
valid_lft forever preferred_lft forever
2.2、设置模拟上海IP
[root@shanghaiclient ~]# ip a a 129.16.0.7/16 dev ens192 label ens192:1
[root@shanghaiclient ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:ac:6c:a2 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.158/24 brd 192.168.2.255 scope global noprefixroute ens192
valid_lft forever preferred_lft forever
inet 129.16.0.7/16 scope global ens192:1
valid_lft forever preferred_lft forever
inet6 fe80::deaf:42f5:93ec:36d0/64 scope link noprefixroute
valid_lft forever preferred_lft forever
2.3、服务器安装NDS服务以及相关配置
[root@localhost ~]# yum -y install bind ; systemctl enable --now named
[root@localhost ~]# vim /etc/named.conf
#添加下面内容
acl beijingnet {
192.168.2.0/24;
};
acl shanghainet {
129.16.0.0/16;
};
acl othernet {
any;
};
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
#其它略
# 创建view
view beijingview {
match-clients { beijingnet;};
include "/etc/named.rfc1912.zones.bj";
};
view shanghaiview {
match-clients { shanghainet;};
include "/etc/named.rfc1912.zones.sh";
};
view otherview {
match-clients { othernet;};
include "/etc/named.rfc1912.zones.other";
};
include "/etc/named.root.key";
2.4、实现区域配置文件
[root@localhost ~]# cp /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bj
[root@localhost ~]# vim /etc/named.rfc1912.zones.bj
#添加下面内容
zone "yezeng.org" IN {
type master;
file "yezeng.org.zone.bj";
};
zone "." IN {
type hint;
file "named.ca";
};
[root@localhost ~]# cp /etc/named.rfc1912.zones.bj /etc/named.rfc1912.zones.sh
[root@localhost ~]# cp /etc/named.rfc1912.zones.bj /etc/named.rfc1912.zones.other
[root@localhost ~]# vim /etc/named.rfc1912.zones.sh
#添加下面内容
zone "yezeng.org" IN {
type master;
file "yezeng.org.zone.sh";
};
zone "." IN {
type hint;
file "named.ca";
};
[root@localhost ~]# vim /etc/named.rfc1912.zones.other
#添加下面内容
zone "yezeng.org" IN {
type master;
file "yezeng.org.zone.other";
};
zone "." IN {
type hint;
file "named.ca";
};
#修改文件权限
[root@localhost named]# chgrp named /etc/named.rfc1912.zones.bj
[root@localhost named]# chgrp named /etc/named.rfc1912.zones.sh
[root@localhost named]# chgrp named /etc/named.rfc1912.zones.other
2.5、生成区域数据库文件
[root@localhost ~]# cd /var/named/
[root@localhost named]# vim yezeng.org.zone.bj
$TTL 1D
@ IN SOA ns1 admin ( 1 1D 1H 1W 2H)
NS ns1
ns1 A 192.168.2.173
www A 192.168.2.200
[root@localhost named]# vim yezeng.org.zone.sh
$TTL 1D
@ IN SOA ns1 admin ( 1 1D 1H 1W 2H)
NS ns1
ns1 A 192.168.2.173
www A 129.16.0.200
[root@localhost named]# vim yezeng.org.zone.other
$TTL 1D
@ IN SOA ns1 admin ( 1 1D 1H 1W 2H)
NS ns1
ns1 A 192.168.2.173
www A 127.0.0.1
2.6、客户端进行访问测试
#模拟北京
[root@beijingclient ~]# host www.yezeng.org 192.168.2.173
Using domain server:
Name: 192.168.2.173
Address: 192.168.2.173#53
Aliases:
www.yezeng.org has address 192.168.2.200
#模拟上海
[root@shanghaiclient ~]# host www.yezeng.org 129.16.0.8
Using domain server:
Name: 129.16.0.8
Address: 129.16.0.8#53
Aliases:
www.yezeng.org has address 129.16.0.200
#本地访问
[root@localhost named]# host www.yezeng.org 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:
www.yezeng.org has address 127.0.0.1
3、通过编译、二进制安装MySQL5.7
#1、安装相关包
[root@localhost ~]# yum -y install libaio numactl-libs
#2、创建用户和组
[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd -r -g mysql -s /bin/false mysql
#3、准备程序文件
[root@localhost ~]# wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz
[root@localhost ~]# wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz
[root@localhost ~]# tar xf mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[root@localhost ~]# ll /usr/local/
[root@localhost ~]# cd /usr/local/
[root@localhost local]# ln -s mysql-5.7.29-linux-glibc2.12-x86_64/ mysql
[root@localhost local]# chown -R root.root /usr/local/mysql/
#4、准备环境变量
[root@localhost local]# echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
[root@localhost local]# . /etc/profile.d/mysql.sh
#5、准备配置文件
[root@localhost ~]# cp /etc/my.cnf{,.bak}
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
skip_name_resolve=1
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
#6、生成数据库文件,并提取root密码
[root@localhost ~]# mysqld --initialize --user=mysql --datadir=/data/mysql
[root@localhost ~]# grep password /data/mysql/mysql.log
2021-03-23T01:31:47.545591Z 1 [Note] A temporary password is generated for root@localhost: g++hZj+BI8lH
[root@localhost ~]# awk '/temporary password/{print $NF}' /data/mysql/mysql.log
g++hZj+BI8lH
#7、准备服务脚本和启动
[root@localhost ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@localhost ~]# chkconfig --add mysqld
Starting MySQL. SUCCESS!
[root@localhost ~]# service mysqld status
SUCCESS! MySQL running (8590)
#8、修改口令
mysqladmin -uroot -p'g++hZj+BI8lH' password 123456
#9、测试登录
mysql -uroot -p123456