玩命加载中 . . .

使用Ubuntu搭建内网DNS服务


一、前言

由于课程局域网组网实验的要求,需要使用到DNS服务,而网上的教程又较为零散,尝试了一些之后磕磕绊绊也测试成功了,但由于后续还需要在实验室用设备测试,故记录在这里。

二、环境及IP说明

  • 系统环境:Ubuntu-21.04-desktop

  • 所用服务器软件:BIND9(Berkeley Internet Name Domain v9)

  • IP说明

    此处都使用的同一台电脑。

    • 也可以使用多台电脑,但是都必须在同一局域网内。如DNS服务器为192.168.43.28,客户端为192.168.2.1,Web服务器为192.168.3.1。几台机器需要通过交换机或路由器相连,并配置相应的路由/VLAN/DNS server。
    • 也可以都在同一网段下,如使用手机热点让几台电脑处于同一局域网下。
    • DNS服务器:192.168.43.28
    • 客户端(需要访问域名服务器,将域名解析为Web服务器对应IP地址):192.168.43.28
    • Web服务器:192.168.43.28

三、配置内网DNS服务

3.1 安装 BIND9

sudo apt install bind9 bind9utils bind9-doc

3.2 配置 BIND9 的IPv4 模式

  1. 只需要修改 BIND9 的 systemd unit file即可(/etc/systemd/system/bind9.service

    sudo systemctl edit --full bind9

    或者直接用vim修改文件

    sudo vim /etc/systemd/system/bind9.service
  2. 在文件的ExecStart行最后加上-4即可

    ...
    [service]
    ...
    ExecStart=/usr/sbin/named -f $OPTIONS -4
    ...
  3. 重新启动 BIND9 以重新载入 systemd 的 unit file

    sudo systemctl daemon-reload
    sudo systemctl restart bind9

3.3 修改配置文件

  1. /etc/bind/named.conf.options

    acl "trusted" {
            192.168.43.0/24;
    };
    ...
    options {
            recursion yes;
            allow-recursion { trusted; };
            listen-on { 192.168.43.28; };
            allow-transfer { none; };
            ...
            forwarders {
                    114.114.114.114;
            };
            ...
    }
    ...

    字段解析:

    • acl:用于控制哪些客户端可以连接到这个DNS服务器;此处表示允许该网段的所有主机
    • recursion:yes表示允许递归DNS查询
    • allow-recursion:允许递归查询的客户端范围,此处设置为在acl中声明的trusted部分
    • listen-on:表示DNS服务器监听此地址的53端口,此处为本地IP(即DNS服务器IP)
    • allow-transfer:none表示不允许其他DNS服务器从本DNS服务器中查询
    • forwarders:这是BIND9提供的DNS查询转发机制,当本地DNS查询不到时,查询会转发到forwarders上,并将查询结果缓存到本地DNS上
  2. /etc/bind/named.conf.local

    // Do any local configuration here
    // 正向解析
    zone "test.com" {
            type master;
            file "/etc/bind/db.test.com";        //正向解析文件所在路径
    };
    
    //反向解析
    zone "43.168.192.in-addr.arpa" {
            type master;
            file "/etc/bind/db.192.168.43";			//反向解析文件所在路径
    };
  3. 新增域名解析文件:/etc/bind/db.test.com

    • 可以直接将db.local的内容拷贝到db.test.com

      sudo cp /etc/bind/db.local /etc/bind/db.test.com
    • 然后再修改文件

      ;
      ; BIND data file for test.com loopback interface
      ;
      $TTL    604800
      @       IN      SOA     test.com. root.test.com. (
                                    1         ; Serial
                               604800         ; Refresh
                                86400         ; Retry
                              2419200         ; Expire
                               604800 )       ; Negative Cache TTL
      ;
      @       IN      NS      test.com.
      @       IN      A       192.168.43.28
      *.test.com.     14400   IN      A       192.168.43.28
      • 需要注意的是:
        • 不要漏掉域名后的点
        • *为通配符,表示任意字母.test.com都被解析到192.168.43.28这个IP
  4. 新增IP地址反向解析文件/etc/bind/db.192.168.43

    ;
    ; BIND data file for dev domains 
    ;
    $TTL    604800
    @       IN      SOA     dev. root.dev. (
                                  1         ; Serial
                             604800         ; Refresh
                              86400         ; Retry
                            2419200         ; Expire
                             604800 )       ; Negative Cache TTL
    ; NS Records
    @       IN      NS      test.com.
    ; PTR Records
    28     IN      PTR     test.com.		; 192.168.43.28

3.4 检查语法并重启 BIND9 服务

  • 检查/etc/bind/name.conf.*文件,没有任何输出代表没有错误,若有错误则根据提示修改

    sudo named-checkconf

    若提示没有检查工具,根据提示安装即可

  • 检查域名解析文件etc/bind/db.test.cometc/bind/db.192.168.43

    sudo named-checkzone test.com /etc/bind/db.test.com
    sudo named-checkzone 43.168.192.in-addr.arpa /etc/bind/db.192.168.43

    都提示如下则没问题

    zone test.com/IN: loaded serial 1
    OK
    zone 43.168.192.in-addr.arpa/IN: loaded serial 1
    OK
  • 重启 BIND9 服务

    service bind9 restart
  • 修改本机的 name server 配置(若客户端为windows系统,则只需要手动设置DNS服务器IP即可

    • 临时修改方法,直接修改/etc/resolv.conf,将其中的nameserver修改为上面配置好的DNS服务器IP

      ...
      nameserver 192.168.43.28
      ...
    • 永久修改方法

      • 修改/etc/systemd/resolved.conf 文件,在DNS=后加上需要加入的DNS服务器IP地址即可

        ...
        DNS=192.168.43.28 114.114.114.114
        ...
      • 再在终端执行以下命令

        sudo systemctl restart systemd-resolved
        sudo systemctl enable systemd-resolved
        sudo mv /etc/resolv.conf /etc/resolv.conf.bak
        sudo ln -s /run/systemd/resolve/resolv.conf /etc/
      • 之后就可以在etc/resolv.conf看到刚刚添加的DNS nameserver信息了

3.5 测试

  1. 通过nslookup指令测试

    # 正向解析
    $ nslookup test.com
    Server:		192.168.43.28
    Address:	192.168.43.28#53
    
    Name:	test.com
    Address: 192.168.43.28
    $ nslookup baidu.com
    Server:		192.168.43.28
    Address:	192.168.43.28#53
    
    Non-authoritative answer:
    Name:	baidu.com
    Address: 220.181.38.251
    Name:	baidu.com
    Address: 220.181.38.148
    # 反向解析
    $ nslookup 192.168.43.28
    28.43.168.192.in-addr.arpa	name = test.com.
  2. 使用网页测试(基于Node.js和Hexo搭建的静态网页,开启在4000端口,若端口为80端口,则域名不需要加端口)

    网页测试

四、参考链接


文章作者: hjd
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hjd !
评论
  目录