C03S03-Linux网络之DNS服务器

一、DNS

1. DNS概述

DNS(域名系统、Domain Name System)是将域名和IP地址相互映射的一个分布式数据库,方便用户访问互联网。IP地址是互联网上所有设备的唯一标识,设备之间的通信依赖于IP地址。DNS使得用户在访问网站时不需要记住复杂的数字IP地址,而是可以使用容易记忆的域名。DNS使用的端口是53号端口,它同时支持TCP和UDP协议;UDP适用于快速解析域名,TCP适用于区域传输,也就是与主域名服务器通信查询解析是否正确。

2. 域名结构

域名是以点分隔,被分为若干个部分,从右到左依次阅读。以百度完整域名为例:

www.baidu.com.cn.
  • .:根域名,最高一级的域名,类似Linux系统里的根目录。在实际使用中会省略。
  • .cn:顶级域名,也叫做一级域名。一般代表一种类型的组织机构或者国家地区。
  • .com.cn:二级域名。代表顶级域内的一种类型的组织机构。
  • baidu.com.cn:注册该域名的实体。
  • www:主机名,也可以称为子域名或三级域名。

3. DNS解析过程

  1. 用户在客户端中通过域名发起访问请求。
  2. 客户端首先检查本地缓存和文件/etc/hosts,看是否已经存储了该域名的IP地址。
  3. 如果在本地没有找到域名对应的IP地址,客户端会向配置的本地域名服务器发起递归查询请求。
  4. 本地DNS服务器如果没有缓存该域名的IP地址,它会向根域服务器查询。
  5. 根域服务器返回顶级域名服务器的IP地址给本地DNS服务器,本地域名服务器再向顶级域名服务器发送查询请求。
  6. 顶级域名服务器返回二级域名服务器的IP地址给本地DNS服务器,本地域名服务器再向二级域名服务器发送查询请求。
  7. 二级域名服务器返回子域名服务器的IP地址给本地DNS服务器,本地域名服务器再向子域名服务器发送查询请求。
  8. 子域名服务器返回域名对应的IP地址给本地域名服务器,本地域名服务器将IP地址存入换成当中,再将IP告诉客户端。
  9. 客户端获得IP后,根据IP访问对应服务。

递归查询:客户端向DNS服务器发起查询请求,如果该服务器没有缓存域名对应的IP,它会代替客户端去其他DNS服务器查询,直到找到答案或者查询失败。

迭代查询:客户端向DNS服务器发起查询请求,如果该服务器没有缓存域名对应的IP,它会提供另一个DNS服务器的地址,让客户端去那里查询。这个过程会一直持续,直到找到答案或者查询失败。

迭代查询过程中,客户端需要自己管理查询过程,直到找到对应IP;递归查询过程中,DNS服务器代替客户端管理查询过程。

4. DNS解析类型

正向解析、反向解析和主备解析是DNS系统中三个重要的解析类型。

  • 正向解析:将域名解析为IP地址。
  • 反向解析:将IP地址解析为域名。
  • 主从解析:DNS服务器之间的数据同步和负载分担机制,提高DNS服务的可用性和可靠性。

5. curl命令 – 文件传输工具

curl命令来自英文词组CommandLine URL的缩写,功能是在Shell终端界面中基于URL规则进行文件传输工作。

curl [选项] 文件

常见的选项:

选项功能
-I显示网站的响应头信息
-K读取指定文件
-o设置文件下载到本地的路径

二、DNS安装部署

1. BIND概述

1.1 安装BIND

  1. 执行下面的命令,安装BIND。BIND是一款广泛使用的DNS服务软件。

    apt -y instll bind9
    
  2. 安装完成后,会生成一个/etc/bind目录。

    ls /etc/bind
    
    bind.keys  db.127  db.empty  named.conf                named.conf.local    rndc.key
    db.0       db.255  db.local  named.conf.default-zones  named.conf.options  zones.rfc1918
    

    主要配置文件:

    • db.empty:DNS区域文件的模板文件。
    • named.conf:BIND服务的主配置文件,引入其他配置文件。
    • named.conf.local:包含本地配置区域,如区域文件的位置、视图的定义等。
    • named.conf.default-zones:包含BIND服务默认配置的区域,通常是一些根区域和常用的顶级域。
    • named.conf.options:BIND服务的其他配置。

1.2 主要配置文件说明

  1. name.conf文件。

    // This is the primary configuration file for the BIND DNS server named.
    //
    // Please read /usr/share/doc/bind9/README.Debian.gz for information on the
    // structure of BIND configuration files in Debian, *BEFORE* you customize
    // this configuration file.
    //
    // If you are just adding zones, please do that in /etc/bind/named.conf.local
    
    include "/etc/bind/named.conf.options";
    include "/etc/bind/named.conf.local";
    include "/etc/bind/named.conf.default-zones";
    
    • include:引入配置文件。
  2. named.conf.local文件。

    //
    // Do any local configuration here
    //
    
    // Consider adding the 1918 zones here, if they are not used in your
    // organization
    //include "/etc/bind/zones.rfc1918";
    
    • 建议在本文件中进行本地的区域配置。
  3. named.conf.default-zones文件。

    // prime the server with knowledge of the root servers
    zone "." {
            type hint;
            file "/usr/share/dns/root.hints";
    };
    
    // be authoritative for the localhost forward and reverse zones, and for
    // broadcast zones as per RFC 1912
    
    zone "localhost" {
            type master;
            file "/etc/bind/db.local";
    };
    
    zone "127.in-addr.arpa" {
            type master;
            file "/etc/bind/db.127";
    };
    
    zone "0.in-addr.arpa" {
            type master;
            file "/etc/bind/db.0";
    };
    
    zone "255.in-addr.arpa" {
            type master;
            file "/etc/bind/db.255";
    };
    
    • 本文件是BIND服务默认的特定区域配置,包括根域服务器区域、本地主机的正向区域和反向区域、网段和广播的反向区域。

    • 区域配置的常见格式。

      zone "example.com" {
          type master;
          file "/etc/bind/db.example.com";
          allow-transfer {IP;};
          master {IP;};
      };
      
      • zone “example.com”:定义了一个适用于example.com的区域配置。
      • type:区域的类型,常见类型包括:master、slave等。
      • file:区域数据文件的存放位置。
      • allow-transfer {IP;};:设置能够请求区域传输的服务端IP,主要用于主服务器。
      • master {IP;};:设置主服务器的IP,告诉从服务器可以该IP地址请求区域数据。
  4. named.conf.options文件。

    options {
        directory "/var/cache/bind";
        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113
    
        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.
    
        // forwarders {
        //      0.0.0.0;
        // };
    
        //========================================================================
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //========================================================================
        dnssec-validation auto;
    
        listen-on-v6 { any; };
    };
    
    • 用于设置服务器的基本运行参数,包括监听端口、允许查询的客户端等设置。
  5. db.empty文件。

    ; BIND reverse data file for empty rfc1918 zone
    ;
    ; DO NOT EDIT THIS FILE - it is used for multiple zones.
    ; Instead, copy it, edit named.conf, and use that copy.
    ;
    $TTL    86400
    @       IN      SOA     localhost. root.localhost. (
                                  1         ; Serial
                             604800         ; Refresh
                              86400         ; Retry
                            2419200         ; Expire
                              86400 )       ; Negative Cache TTL
    ;
    @       IN      NS      localhost.
    
    • 本文件是区域数据文件的模板文件。包括记录的存活时间(TTL)、起始授权机构(SOA)记录、服务器和IP记录。

2. 配置正向解析

  1. 编辑named.conf.options文件,在文件中加入以下内容,用于配置网络接口和允许进行DNS查询的客户端地址范围。

    listen-on port 53 {192.168.1.128;};
    allow-query {192.168.1.0/24;};
    
  2. 编辑named.conf.local文件,在文件中定义区域的相关配置,设置一个匹配域名xy104.com的区域。

    zone "xy104.com" {
        type master;
        file "/etc/bind/xy104.local";
    };
    
  3. 复制区域数据文件目标,复制后的文件路径要和区域设置里的路径保持一致。修改文件,设置域名xy104.com对应的IP等信息。

    $TTL    86400
    @       IN      SOA     xy104.com. admin.xy104.com. (
                                  1         ; Serial
                             604800         ; Refresh
                              86400         ; Retry
                            2419200         ; Expire
                              86400 )       ; Negative Cache TTL
    ;
    @       IN      NS      xy104.com.
    @       IN      A       192.168.1.128
    www     IN      A       192.168.1.128
    
  4. 配置完成后,重启BIND服务。

    systemctl restart bind9
    
  5. 编辑网络配置文件,重新设置DNS的IP。

    network:
      ethernets:
        ens33:
          dhcp4: no
          addresses: [192.168.1.128/24]
          gateway4: 192.168.1.254
          nameservers:
            addresses: [192.168.1.128]
    
  6. 查看正向解析是否设置成功。

    nslookup www.xy104.com
    
    Server:         127.0.0.53
    Address:        127.0.0.53#53
    
    Non-authoritative answer:
    Name:   www.xy104.com
    Address: 192.168.1.128
    

3. 配置反向解析

  1. 编辑named.conf.local文件,在文件中定义区域的相关配置,设置一个匹配域名xy104.com的反向区域。

    zone "1.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/xy104.local";
    };
    
  2. 复制区域数据文件目标,复制后的文件路径要和区域设置里的路径保持一致。修改文件,设置域名xy104.com对应的IP等信息。

    $TTL    86400
    @       IN      SOA     xy104.com. admin.xy104.com. (
                                  1         ; Serial
                             604800         ; Refresh
                              86400         ; Retry
                            2419200         ; Expire
                              86400 )       ; Negative Cache TTL
    ;
    @       IN      NS      xy104.com.
    @       IN      A       192.168.1.128
    www     IN      A       192.168.1.128
    128     IN      PTR     www.xy104.com.
    
  3. 配置完成后,重启BIND服务。

    systemctl restart bind9
    
  4. 查看反向解析是否设置成功。

    nslookup 192.168.1.128
    
    128.1.168.192.in-addr.arpa      name = www.xy104.com.
    

4. 配置主从解析

  1. 基于前面配置实现主从解析。原有的主机作主服务器,编辑原有的named.conf.local文件,修改区域配置。保存文件后,重启BIND服务。

    zone "xy104.com" {
        type master;
        file "/etc/bind/xy104.local";
        allow-transfer {192.168.1.129;};
    };
    
    zone "1.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/xy104.local";
        allow-transfer {192.168.1.129;};
    };
    
  2. 配置主服务器的网络配置,设置两个DNS,并重启网络服务。

    network:
      ethernets:
        ens33:
          dhcp4: no
          addresses: [192.168.1.128/24]
          gateway4: 192.168.1.254
          nameservers:
            addresses: [192.168.1.128, 192.168.1.129]
    
  3. 在另一台主机上安装BIND服务。

    apt -y install bind9
    
  4. 编辑named.conf.options文件,在文件中加入以下内容.

    listen-on port 53 {any;};
    allow-query     {any;};
    
  5. 编辑named.conf.local文件,修改从服务器的区域配置。

    zone "xy104.com" {
        type slave;
        file "xy104.local";
        masters {192.168.1.128;};
    };
    
    zone "1.168.192.in-addr.arpa" {
        type slave;
        file "xy104.local";
        masters {192.168.1.128;};
    };
    
  6. 重启从服务器的BIND服务。

    systemctl restart bind9
    
  7. 配置从服务器网络,然后重启网络服务。

    network:
      ethernets:
        ens33:
          dhcp4: no
          addresses: [192.168.1.129/24]
          gateway4: 192.168.1.254
          nameservers:
            addresses: [192.168.1.128, 192.168.1.129]
    
  8. 验证主从解析是否存在问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值