DNS服务器原理及服务搭建

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域名解析过程
  • 用户使用浏览器输入网址时域名解析过程:
  1. 客户访问时,先查自己的hosts文件,有则返回
  2. 客户hosts中没有就去查自己的缓存,有则返回
  3. 客户缓存没有就去找dns服务器
  4. dns服务器先找根服务器获得顶级域服务器地址
  5. dns服务器在找顶级域服务器去获得二级域服务器地址
  6. dns服务器从二级域服务器获得最终的IP地址
  7. 客户端从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中的安全相关的配置

  1. bind有四个内置的acl

    none:没有一个主机;
    any:任意主机;
    local:本机;
    localnet:本机所在的IP所属的网络;
    
  2. 访问控制指令:

    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:  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:  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:  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:  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

你可能感兴趣的:(DNS服务器原理及服务搭建)