第十一周


"1、简述DNS服务,并搭建DNS服务器,实现主从,子域授权。

DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。在RFC文档中RFC 2181对DNS有规范说明,RFC 2136对DNS的动态更新进行说明,RFC 2308对DNS查询的反向缓存进行说明。

DNS中的正向搜索域和反向搜索域

①正向搜索区域

  功能:从域名解析到IP地址。

  什么是正向搜索区域呢?

  所谓正向搜索区域是指将域名解析为IP地址的过程。也就是说,当用户输入一个服务器域名时,借助于该记录可以将域名解析为IP地址,从而实现对服务器的访问。

②反向搜索区域

  功能:从IP地址解析为域名。

  在大部分的 DNS 搜索中,客户机一般执行正向搜索。

  DNS 同时提供反向搜索,允许客户机根据一台计算机的IP 地址搜索它的DNS名称。

  反向搜索的域名信息保存在反向搜索区域中。为进行反向搜索,需要在DNS服务器中创建反向搜索区域。

搭建DNS主服务器

首先同步下时间

[root@DNS-Master ~]# hwclock -s


检查一下安装环境所需要的开发包组、确保所依赖的开发包组都装有了

[root@DNS-Master ~]# yum -y groupinstall "Development Tools"

[root@DNS-Master ~]# yum -y groupinstall "Server Platform Development"

[root@DNS-Master ~]# yum grouplist

装好后查看一下、最主要两项:Development tools和Server Platform Development


这里注意一下,我们要去编译安装一个服务、首先要去看他的README、然后看他的INSTALL、大体了解一下有没有我们所需要的信息、当然我们这里就不多说了、直接往下走:

[root@DNS-Master ~]# tar -zvxf bind-9.10.5-P3.tar.gz

[root@DNS-Master ~]# cd bind-9.10.5-P3

[root@DNS-Master bind-9.10.5-P3]# ./configure --prefix=/data/bind9 --sysconfdir=/etc/named --enable-threads --enable-epoll --disable-chroot

[root@DNS-Master bind-9.10.5-P3]# make && make install


--prefix=/data/bind9:指定编译存放的路径

--sysconfdir=/etc/named:指定配置文件存放路径

--enable-threads:启用了多线程的功能


前面说过、编译安装named什么都得自己创建、用户也没有的、所以我们得给他创建一个用户先、而且用户是系统用户、要加-r、系统用户不会给他创建家目录的:

先创建用户组:

[root@DNS-Master ~]# groupadd -g 53 -r named

[root@DNS-Master ~]# useradd -g named -r named


先去创建named的工作目录、然后创建named.ca这个文件:

[root@DNS-Master ~]# mkdir /var/named


这里@后面的IP是能访问互联网的服务器、生成的数据存在到/var/named/named.ca中去(使用"yum -y install bind-utils"命令安装dig命令)

[root@DNS-Master ~]# dig -t NS . @8.8.8.8 > /var/named/named.ca

[root@DNS-Master ~]# cat /var/named/named.ca


; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.2 <<>> -t NS . @8.8.8.8

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36220

;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 0


;; QUESTION SECTION:

;.              IN  NS

.......

.......


然后再去编辑/etc/named/named.conf的配置文件、这个文件也没有、需要自己去编写的:

[root@DNS-Master ~]# vim /etc/named/named.conf

options {

        listen-on port 53 { any; };        //默认是any,表示允许所有网段的主机。可以改成自己所在的内网网段

        listen-on-v6 port 53 { ::1; };

        directory "/var/named";              //定义named的固定工作路径

        dump-file      "/var/named/data/cache_dump.db";

        statistics-file "/var/named/data/named_stats.txt";

        memstatistics-file "/var/named/data/named_mem_stats.txt";

        allow-query    { any; };        //表示接收所有网段

        recursion yes;

        forward first;                  //下面这两行配置很重要,这个配置后,当客户端采用我们自己配置的内网DNS的NS服务器后,当访问别的网站,内网NS解析不了的就转发给8.8.8.8的DS服务器解析,保证能正常上网。

        forwarders {

            223.5.5.5;            //阿里云的DNS服务器

            223.6.6.6;

            8.8.8.8;

            8.8.4.4;

          };

        };


logging {                         

        channel default_debug {

        file "data/named.run";

        severity dynamic;

        };

};


zone "."  {

        type hint;   

        file "named.ca";

        };


zone "wangshibo.cn"  {                              //定义一个统一的域名后缀。正向解析的区域。此处可以加后面IN,也可以不加IN     

        type master;                          //类型属于master、属于自己的   

        file "wangshibo.cn_zone";                    //指定正向解析的文件

        allow-transfer {192.168.1.28;};        //允许192.168.1.28(从DNS服务器)传送

};

zone "1.168.192.in-addr.arpa"  {              //定义反向解析的区域,注意写法。此处可以在后面加IN,也可以不加IN

        type master;                     

        file "192.168.1.zone";                //指定正向解析的文件

        allow-transfer {192.168.1.28;}; 


zone "33.168.192.in-addr.arpa"  {     

        type master;

        file "192.168.33.zone";           

        allow-transfer {192.168.1.28;};

};

zone "34.168.192.in-addr.arpa"  {     

        type master;

        file "192.168.34.zone";           

        allow-transfer {192.168.1.28;};

};

zone "64.168.192.in-addr.arpa"  {     

        type master;

        file "192.168.64.zone";           

        allow-transfer {192.168.1.28;};

};



这里注意一下:

如果是多个网段的反向解析,这里就定义多个反向解析区域。


----------------------------------------------------------------------------------------------------------

温馨提示:

DNS BIND之forwarder转发:就是说,当自己内网NS服务器解析不了的域名,转发到别的NS如8.8.8.8的域名服务器上进行解析。

转发功能可以用来在一些服务器上产生一个大的缓存,从而减少到外部服务器链路上的流量。它可以使用在和internet没有直接连接的内部域名服务器上,用来提供对外部域名的查询。

只有当服务器是非授权的,并且缓存中没有相关记录时,才会进行转发。

1)转发机制

当你设置了转发器后,所有非本域的和在缓存中无法找到的域名查询都将转发到设置的DNS转发器上,由这台DNS来完成解析工作并做缓存,因此这台转发器的缓存中记录了丰富的域名信息。

因而对非本域的查询,很可能转发器就可以在缓存中找到答案,避免了再次向外部发送查询,减少了流量。


2)配置参数

1.forward

此选项只有当forwarders列表中有内容的时候才有意义。当值是First,默认情况下,使服务器先查询设置的forwarders,如果它没有得到回答,服务器就会自己寻找答案。如果设定的是only,

服务器就只会把请求转发到其它服务器上去。

2.forwarders

设定转发使用的ip地址。默认的列表是空的(不转发)。转发也可以设置在每个域上,这样全局选项中的转发设置就不会起作用了。用户可以将不同的域转发到服务器上,或者对不同的域可以实现

forward only或first的不同方式,也可以根本就不转发。

注:转发服务器的查询模式必须允许递归查询(即,recursion yes;),默认递归查询是开启的。


3)转发器的配置格式

options {

forward first;

forwarders{

8.8.8.8;

1.8.8.8;

};

};

注意:转发器本身不用做任何设置,而是对需要转发器的其他DNS server做以上配置。还有,如果该 DNS Server 无法联系到转发器,那么BIND会自己尝试解析。

如果要禁止BIND在无法联系到转发器时不做任何操作,那么你还可以使用 forward only 命令,这样BIND只能使用区的权威数据和缓存来响应查询了( 在连接不到转发器的情况下 )。

options {

forward only;

forwarders{

8.8.8.8;

1.8.8.8;

};

};

在 BIND 8.2 以后引入了一个新的特性:转发区( forward zone ),它允许你把 DNS 配置成只有查找特定域名的时候才使用转发器。( BIND 9 从9.1.0 才开始有转发区功能)

例如,你可以使你的服务器将所有对test.com结尾的域名查询都转发给test.com的两台名字服务器:

zone "test.com" {

type forward;

forwarders{

8.8.8.8;

1.8.8.8;

};

};

还有一种转发区设置和刚才的设置刚好相反,它允许你设置什么样的查询将不被转发,当然这只适用于在options语句中指定了转发器的 DNS 。配置如下:

options {

forwarders{

8.8.8.8;

1.8.8.8;

};

};

zone "test.com" {

type master;

file "zone.test.com";

forwarders {};

};

在test.com这个区中,你授权了几个子域,例如:zx.test.com、lab.test.com等,那么在test.com的权威服务器上设置转发后,因为对 zx.test.com、lab.test.com这几个子域不是权威,

那么如果有对 www.zx.test.com这样的子域的域名查询,服务器也将转发。这完全是没有必要的,因为服务器上就有zx.test.org 子域的 NS 记录,何须再转发。

---------------------------------------------------------------------------------------------------------------

如果想用rndc远程登录可以生成一个/etc/named/rndc.conf的配置文件:

[root@DNS-Master ~]# /data/bind9/sbin/rndc-confgen -r /dev/urandom > /etc/named/rndc.conf

到这里别忘了给named.conf和rndc.conf修改属主属组和权限:

[root@DNS-Master ~]# chown -R root.named /data/bind9

[root@DNS-Master ~]# chown -R root.named /etc/named

[root@DNS-Master ~]# chown -R root.named /var/named            #另外注意:一定要保证/var/named/data的权限是named.named,这个目录下存放的是named.run,即named解析日志

[root@DNS-Master ~]# chmod 640 /etc/named/named.conf

[root@DNS-Master ~]# chmod 640 /etc/named/rndc.conf

[root@DNS-Master ~]# chmod 640 /var/named/*


为了方便、我们在PATH下加个的路径、/etc/profile.d/named.sh:

[root@DNS-Master ~]# cat /etc/profile.d/named.sh

export PATH=/data/bind9/bin:/data/bind9/sbin:$PATH

[root@DNS-Master ~]# source /etc/profile.d/named.sh


因为是一个服务、所以我们要为他提供一个服务脚本、以后可以利用脚本启动、编辑/etc/rc.d/init.d/named:

[root@DNS-Master ~]# vim /etc/rc.d/init.d/named

#!/bin/bash

    #

    # description: named daemon

    # chkconfig: - 25 88


    pidFile=/data/bind9/var/run/named.pid

    lockFile=/var/lock/subsys/named

    confFile=/etc/named/named.conf


        [ -r /etc/rc.d/init.d/functions ] && . /etc/rc.d/init.d/functions

    start() {

            if [ -e $lockFile ]; then

                    echo "named is already running..."

                    exit 0

            fi

            echo -n "Starting named:"

            daemon --pidfile "$pidFile" /data/bind9/sbin/named -u named -c "$confFile"

            RETVAL=$?

            echo


            if [ $RETVAL -eq 0 ]; then

                    touch $lockFile

                    return $RETVAL

            else

                    rm -f $lockFile $pidFile

                    return 1

            fi

    }


    stop() {

            if [ ! -e $lockFile ]; then

                    echo "named is stopped."

            fi

            echo -n "Stopping named:"

            killproc named

            RETVAL=$?

            echo


            if [ $RETVAL -eq 0 ];then

                    rm -f $lockFile $pidFile

                    return 0

            else

                    echo "Cannot stop named."

                    failure

                    return 1

            fi

    }


    restart() {

            stop

            sleep 2

            start

    }


    reload() {

            echo -n "Reloading named: "

            killproc named -HUP

            RETVAL=$?

            echo

            return $RETVAL

    }


    status() {

            if pidof named &> /dev/null; then

                    echo -n "named is running..."

                    success

                    echo

            else

                    echo -n "named is stopped..."

                    success

                    echo

            fi

    }


    usage() {

            echo "Usage: named {start|stop|restart|status|reload}"

    }

    case $1 in

    start)

            start ;;

    stop)

            stop ;;

    restart)

            restart ;;

    status)

            status ;;

    reload)

            reload ;;

    *)

            usage

            exit 4 ;;

    esac


[root@DNS-Master ~]# chmod 755 /etc/rc.d/init.d/named

[root@DNS-Master ~]# chkconfig --add named

[root@DNS-Master ~]# chkconfig --list named


下面开始配置正向解析配置:

[root@DNS-Master ~]# vim /var/named/wangshibo.cn_zone    //这个文件是在上面named.conf里面定义的

$TTL 1D                                            //定义宏,通用变量,单位为秒(S)、小时(H),天数(D)

@      IN SOA  ns1.wangshibo.cn. root. (              //此处一般是写NS域名,邮件域名,或root.

                        2017071111          //序列号。这个参数很重要,要特别注意!!当主DNS修改解析文件时,必须要修改这个序列号,然后重启named服务后,从DNS才能正常同步过去!!

                        2H                          //刷新时间

                        10M                          //失败重试时间

                        7D                          //过期时间

                        1D )                          //否定答案时间

@                          IN      NS      ns1.wangshibo.cn.       

@                          IN      NS      ns2.wangshibo.cn.              //注意域名后面的.不能忘掉! 

ns1                        IN      A      192.168.1.27       

ns2                        IN      A      192.168.1.28         

www                        IN      A      192.168.4.21              //由于已经定义了根域名是wangshibo.cn,所以这里可以直接写域名前面的名称,也可以全部写出来。比如www或者写成www.wangshibo.cn.

nginx-web01                IN      A      192.168.4.21              //如果写域名前的名称,就不需要带.符号,但如果是写域名全称,则需要带.符号,如nginx-web01.wangshibo.cn.

nginx-web02                IN      A      192.168.4.22

athena-web02                IN      A      192.168.33.31

www-web01                  IN      A      192.168.34.29

www-web02                  IN      A      192.168.34.30

zabbix                      IN      A      192.168.1.21

zrx-web01                  IN      A      192.168.34.33

zrx-web02                  IN      A      192.168.34.32

athena-matrix02            IN      A      192.168.33.36

lx-db126                    IN      A      192.168.8.126

lx-db127                    IN      A      192.168.8.127



反向解析的配置(这里只列举一个):

[root@DNS-Master ~]# cat 192.168.1.zone

$TTL 600

@      IN SOA  ns1.wangshibo.cn. root. (

                        2017071101

                        2H       

                        10M       

                        7D       

                        1D )

@              IN      NS      ns1.wangshibo.cn.

@              IN      NS      ns2.wangshibo.cn.

27              IN      PTR    ns1.wangshibo.cn.

28              IN      PTR    ns2.wangshibo.cn.

21              IN      PTR    www.wangshibo.cn.

21              IN      PTR    zp.wangshibo.cn.

29              IN      PTR    puppet01.wangshibo.cn.

30              IN      PTR    puppet02.wangshibo.cn.

-------------------------------------------------------------------------------------------------------

温馨提示1:

对于主DNS的正反向解析文件中的序列号,每当做一次修改后,必须要同时修改这个序列号,这样才能触发主从同步机制!然后重启named服务,从DNS服务器那边才能同步过去,否则不能完成主从同步!

-------------------------------------------------------------------------------------------------------


然后修改一下权限和属主属组:

[root@DNS-Master ~]# chown root:named /var/named/wangshibo.cn_zone

[root@DNS-Master ~]# chmod 640 /var/named/wangshibo.cn_zone


检查主配置文件和区域数据文件有没有语法错误:

[root@DNS-Master ~]# named-checkconf    //这个是检查主配置文件语法的

[root@DNS-Master ~]#


这个是检查区域数据文件语法的、指定区域和指定文件

[root@DNS-Master ~]# named-checkzone "wangshibo.cn" /var/named/wangshibo.cn_zone

zone wangshibo.cn/IN: loaded serial 2017071111

OK


启动服务后、解析域名

[root@DNS-Master ~]# /etc/init.d/named start

[root@DNS-Master ~]# /etc/init.d/named status

[root@DNS-Master ~]# /etc/init.d/named restart


然后修改自己的DNS,进行正反向解析

[root@DNS-Master ~]# cat /etc/resolv.conf

domain wangshibo.cn      //域名和查询都要写成内网DNS的主域名

search wangshibo.cn

nameserver 192.168.1.27


[root@DNS-Master ~]# ping zrx-web02

PING zrx-web02.wangshibo.cn (192.168.34.32) 56(84) bytes of data.

64 bytes from 192.168.34.32: icmp_seq=1 ttl=62 time=1.11 ms

64 bytes from 192.168.34.32: icmp_seq=2 ttl=62 time=0.542 ms



[root@BJLX_16_27_V named]# dig -t A www.wangshibo.cn @192.168.1.27


; <<>> DiG 9.10.5-P3 <<>> -t A www.wangshibo.cn @192.168.1.27

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32976

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3


;; OPT PSEUDOSECTION:

; EDNS: version: 0, flags:; udp: 4096

;; QUESTION SECTION:

;www.wangshibo.cn.          IN  A


;; ANSWER SECTION:

www.wangshibo.cn.        86400  IN  A  192.168.4.21


;; AUTHORITY SECTION:

wangshibo.cn.        86400  IN  NS  ns2.wangshibo.cn.

wangshibo.cn.        86400  IN  NS  ns1.wangshibo.cn.


;; ADDITIONAL SECTION:

ns1.wangshibo.cn.        86400  IN  A  192.168.1.27

ns2.wangshibo.cn.        86400  IN  A  192.168.1.28


;; Query time: 0 msec

;; SERVER: 192.168.1.27#53(192.168.1.27)

;; WHEN: Thu Jul 20 10:45:15 CST 2017

;; MSG SIZE  rcvd: 124



[root@BJLX_16_27_V named]# nslookup

> set q=A

> www

Server:    192.168.1.27

Address:    192.168.1.27#53


Name:  www.wangshibo.cn

Address: 192.168.4.21

> zabbix

Server:    192.168.1.27

Address:    192.168.1.27#53


Name:  zabbix.wangshibo.cn

Address: 192.168.1.21

> lx-db126

Server:    192.168.1.27

Address:    192.168.1.27#53


Name:  lx-db126.wangshibo.cn

Address: 192.168.8.126

> 192.168.1.27

Server:    192.168.1.27

Address:    192.168.1.27#53


27.16.192.168.in-addr.arpa  name = ns1.wangshibo.cn.

> 192.168.1.21

Server:    192.168.1.27

Address:    192.168.1.27#53


21.16.192.168.in-addr.arpa  name = www.wangshibo.cn.

21.16.192.168.in-addr.arpa  name = zp.wangshibo.cn.

>



最后,客户机就可以修改自己的/etc/resolv.conf文件,然后使用这个内网DNS了

[root@Nginx-web1 ~]# cat /etc/resolv.conf

domain wangshibo.cn      //域名和查询都要写成内网DNS的主域名

search wangshibo.cn

nameserver 192.168.1.27


[root@Nginx-web1 ~]# ping zabbix

PING zabbix.wangshibo.cn (192.168.1.21) 56(84) bytes of data.

64 bytes from www.wangshibo.cn (192.168.1.21): icmp_seq=1 ttl=64 time=0.282 ms

64 bytes from www.wangshibo.cn (192.168.1.21): icmp_seq=2 ttl=64 time=0.223 ms

64 bytes from www.wangshibo.cn (192.168.1.21): icmp_seq=3 ttl=64 time=0.177 ms

搭建DNS从服务器

[root@DNS-Slave ~]# hwclock -s

[root@DNS-Slave ~]# yum -y groupinstall "Development Tools"

[root@DNS-Slave ~]# yum -y groupinstall "Server Platform Development"

[root@DNS-Slave ~]# yum grouplist

[root@DNS-Slave ~]# tar -zvxf bind-9.10.5-P3.tar.gz

[root@DNS-Slave ~]# cd bind-9.10.5-P3

[root@DNS-Slave bind-9.10.5-P3]# ./configure --prefix=/data/bind9 --sysconfdir=/etc/named --enable-threads --enable-epoll --disable-chroot

[root@DNS-Slave bind-9.10.5-P3]# make && make install


[root@DNS-Slave ~]# groupadd -g 53 -r named

[root@DNS-Slave ~]# useradd -g named -r named


[root@DNS-Slave ~]# mkdir /var/named

[root@DNS-Slave ~]# dig -t NS . @8.8.8.8 > /var/named/named.ca

[root@DNS-Slave ~]# vim /etc/named/named.conf

options {

        listen-on port 53 { any; };

        listen-on-v6 port 53 { ::1; };

        directory "/var/named";

        dump-file      "/var/named/data/cache_dump.db";

        statistics-file "/var/named/data/named_stats.txt";

        memstatistics-file "/var/named/data/named_mem_stats.txt";

        allow-query    { any; };

        recursion yes;

        forward first;

        forwarders {

            8.8.8.8;

            8.8.4.4;

          };

        };


logging {                         

        channel default_debug {

        file "data/named.run";

        severity dynamic;

        };

};


zone "." IN {

        type hint;   

        file "named.ca";

        };


zone "wangshibo.cn" IN {                 

        type slave;                       

        file "wangshibo.cn_zone";         

        masters {172.168.1.27;};     

};

zone "16.29.172.in-addr.arpa" IN {   

        type slave;

        file "172.168.1.zone";         

        masters {172.168.1.27;};

};



将主DNS的/etc/init.d/named启动脚本拷贝到从DNS服务器上。

[root@DNS-Slave ~]# cat /etc/init.d/named

#!/bin/bash

    #

    # description: named daemon

    # chkconfig: - 25 88


    pidFile=/data/bind9/var/run/named.pid

    lockFile=/var/lock/subsys/named

    confFile=/etc/named/named.conf


        [ -r /etc/rc.d/init.d/functions ] && . /etc/rc.d/init.d/functions

    start() {

            if [ -e $lockFile ]; then

                    echo "named is already running..."

                    exit 0

            fi

            echo -n "Starting named:"

            daemon --pidfile "$pidFile" /data/bind9/sbin/named -u named -c "$confFile"

            RETVAL=$?

            echo


            if [ $RETVAL -eq 0 ]; then

                    touch $lockFile

                    return $RETVAL

            else

                    rm -f $lockFile $pidFile

                    return 1

            fi

    }


    stop() {

            if [ ! -e $lockFile ]; then

                    echo "named is stopped."

            fi

            echo -n "Stopping named:"

            killproc named

            RETVAL=$?

            echo


            if [ $RETVAL -eq 0 ];then

                    rm -f $lockFile $pidFile

                    return 0

            else

                    echo "Cannot stop named."

                    failure

                    return 1

            fi

    }


    restart() {

            stop

            sleep 2

            start

    }


    reload() {

            echo -n "Reloading named: "

            killproc named -HUP

            RETVAL=$?

            echo

            return $RETVAL

    }


    status() {

            if pidof named &> /dev/null; then

                    echo -n "named is running..."

                    success

                    echo

            else

                    echo -n "named is stopped..."

                    success

                    echo

            fi

    }


    usage() {

            echo "Usage: named {start|stop|restart|status|reload}"

    }

    case $1 in

    start)

            start ;;

    stop)

            stop ;;

    restart)

            restart ;;

    status)

            status ;;

    reload)

            reload ;;

    *)

            usage

            exit 4 ;;

    esac


启动named服务

[root@DNS-Slave ~]# /etc/init.d/named start/status/restart


启动后,就会发现在从DNS的/var/named目录下自动产生了wangshibo.cn_zone和192.168.1.zone的正反向解析文件

注意:当主DNS修改解析配置时,只需要将解析配置文件中的序列号改动下,就会自动触发主从同步机制!


[root@DNS-Slave ~]# ls

192.168.1.zone  wangshibo.cn_zone  data  db-9TWfGmpO  db-kHbKJg9L  named.ca


然后修改从的自己的DNS

[root@DNS-Slave ~]# cat /etc/resolv.conf

search wangshibo.cn

nameserver 192.168.1.28


然后测试正反向解析:

[root@DNS-Slave ~]# ping athena-web02

PING athena-web02.wangshibo.cn (192.168.33.31) 56(84) bytes of data.

64 bytes from 192.168.33.31: icmp_seq=1 ttl=62 time=0.712 ms

64 bytes from 192.168.33.31: icmp_seq=2 ttl=62 time=0.442 ms


[root@DNS-Slave ~]# nslookup

> lx-db127

Server:    192.168.1.28

Address:    192.168.1.28#53


Name:  lx-db127.wangshibo.cn

Address: 172.29.8.127

> 192.168.1.28

Server:    192.168.1.28

Address:    192.168.1.28#53


28.16.29.172.in-addr.arpa  name = ns2.wangshibo.cn.


这样,客户机可以将自己的DNS修改为上面配置的内网主从DNS地址

[root@test ~]# cat /etc/resolv.conf

#domain wangshibo.cn

search wangshibo.cn

nameserver 172.168.1.27

nameserver 172.168.1.28




2、简述HTTP服务,并实现基于用户的访问控制,虚拟主机,https"

超文本传输协议HTTP规定了浏览器与服务器之间的请求和响应的格式与规则,它是万维网上能够可靠地交换文件的重要基础。

HTTP的操作过程

浏览器分析指向页面的URL

浏览器向DNS系统请求解析域名所对应的服务器IP地址

DNS系统解析出服务器的IP,并返回给主机

浏览器与该服务器的进程建立TCP链接(三次握手,端口默认为80)

浏览器发出HTTP请求:如GET /article/index.html

服务器收到请求并作出相应处理,把文件index.html发送给浏览器

释放TCP链接(四次握手)

浏览器解析index.html文件,将web页显示出来。

HTTP协议的特点

HTTP协议是无状态的,即多次访问一个服务器上的页面,服务器并不知道你曾经访问过,每次访问的响应都当做第一次访问一样。所以,在实际应用中,通常使用CooKie加数据库的方式记录和跟踪用户的活动。

HTTP有非持久连接和持久连接:

采用非持久连接时,网页的每个元素对象(如.png,jpeg图等)的传输都需单独建立一个TCP连接(第三次握手可携带请求信息)

采用持久连接时,仅需建立一次TCP连接,服务器发送响应后仍保持连接,客户和服务器可以继续在这条连接上发送请求和响应报文。

Cookie以及其作用

CooKie是由服务器生成,但存储在用户主机上的文本文件,它保存了服务器和客户之间传递的状态信息,作为识别用户的手段。通过Cookie服务器就能从数据库中查询该用户的活动记录,进而可以执行一些个性化操作

HTTP请求报文中常见的几个方法

方法 意义

GET 请求读取由URL所标志的信息

HEAD 请求读取由URL所标志的信息的首部

POST 给服务器添加信息

CONNECT 用于代理服务器

get和post方法的区别:

一般我们在浏览器输入一个网址访问网站都是GET请求;在FORM表单中,可以通过设置Method指定提交方式为GET或POST,默认时为GET提交方式。

get请求一般不会修改服务器的信息,仅用于请求页面;post请求可能会修改服务器中的资源信息,如提交评论、博客等都是通过post请求实现。

get请求的信息附加在URL后面,这些被显示的暴露在外面。post请求的数据放在包体中,不容易暴露,因此一般用户登录等保密性高的不宜采用get请求,而用post请求。

1.基于apache建立虚用户

提供两个基于名称的虚拟主机www1, www2;有单独的错误日志和访问日志;

先建立虚拟主机www1

a.在httpd的辅助配置文件目录/etc/httpd/conf.d/中创建属于虚拟主机自己的配置文件

~]# vim /etc/httpd/conf.d/vhosts-www1.conf

        DocumentRoot "/myweb/vhosts/www1"

        ServerName www.link1.com

        ErrorLog "/myweb/vhosts/www1/logs/error_log"

        CustomLog "/myweb/vhosts/www1/logs/access_log" combined

    AllowOverride None

    Options None

    Require all granted

  b.创建好配置文件后,再创建文档根目录及日志目录,修改日志文件读写权限

重新载入配置文件

systemctl reload httpd.service

2.http用户权限管理

修改www1的配置文件如下:

        DocumentRoot "/myweb/vhosts/www1"

        ServerName www.link1.com

        ErrorLog "/myweb/vhosts/www1/logs/error_log"

        CustomLog "/myweb/vhosts/www1/logs/access_log" combined

    AllowOverride None

    Options None

    AuthType basic

    AuthName "Please input user and password to login,only link has permission to access!!"

    AuthUserFile /etc/httpd/users/.htpasswd

    Require user link

    a-2.使用htpasswd命令创建虚拟用户

~]# mkdir /etc/httpd/users

~]# htpasswd -c -m /etc/httpd/users/.htpasswd link

~]# htpasswd -m /etc/httpd/users/.htpasswd link1

实现了登录用户权限管理功能

3.为上面的www2虚拟主机提供https服务

  创建私有CA,然后再为本服务器颁发自签证书。

  a.创建私有CA

    a-1.创建私有CA私钥文件

~]# (umask 077 ; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)

    a-2.生成自签证书

~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem  -out /etc/pki/CA/cacert.pem -days 3653

    a-3.满足CA所必须的目录级文件和文本文件的布局

~]# touch /etc/pki/CA/index.txt

~]# echo 01 > /etc/pki/CA/serial

  b.为服务器提供证书

    b-1.创建服务器的私钥文件

~]# mkdir /etc/httpd/conf/ssl

~]# cd /etc/httpd/conf/ssl

ssl]# (umask 077 ; openssl genrsa -out httpd.key 4096)

    b-2.生成证书请求文件

ssl]# openssl req -new -key httpd.key -out httpd.csr -days 3653

    b-3.由CA签发证书:在CA所在的服务器上完成

ssl]# openssl ca -in httpd.csr -out httpd.crt -days 365

  至此证书颁发完成。

  c.安装mod_ssl模块

    yum -y install mod_ssl

    修改ssl的配置文件的部分内容如下:

SSLCertificateFile /etc/httpd/conf/ssl/httpd.crt

    AllowOverride None

    Options None

    Require all granted

DocumentRoot "/myweb/vhosts/ssl"

ServerName www.link2.com

SSLCertificateKeyFile /etc/httpd/conf/ssl/httpd.key

    然后再创建/myweb/vhosts/ssl目录

~]# mkdir /myweb/vhosts/ssl

~]# echo "welcome to https://www.link2.com" >> /myweb/vhosts/ssl/index.html

实现https

你可能感兴趣的:(第十一周)