局域网自建DNS服务器

局域网自建DNS服务器:

在局域网(LAN)中自建DNS服务器可以有效地管理和解析本地网络中的域名,这对网络管理员和技术爱好者来说都是一个非常实用的解决方案。

以下是设置一个基本的局域网DNS服务器的一般步骤和建议:

选择合适的软件

有几种常用的DNS服务器软件可以选择:

  • BIND (Berkeley Internet Name Domain): 非常流行且功能强大的DNS服务器软件,适合中大型网络。
  • dnsmasq: 轻量级的DNS和DHCP服务器,适合小型网络和嵌入式设备。
  • Unbound: 主要用于递归DNS查询,非常安全且配置简单。
    • Microsoft DNS: 集成在Windows Server中,适合Windows网络环境。

安装和配置DNS服务器(以 BIND 为例):

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

在CentOS 7上安装BIND:

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

  • BIND 9通常通过bind包来安装BIND和BIND工具
sudo yum update -y
sudo yum install -y bind bind-utils
  • 配置BIND

BIND的主要配置文件通常位于 /etc/named.conf。你需要对其进行一些基本配置。

编辑配置文件 /etc/named.conf:

sudo vi /etc/named.conf

文件内容示例:

options {
    listen-on port 53 {127.0.0.1; any; };
    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";
    recursing-file  "/var/named/data/named.recursing";
    secroots-file   "/var/named/data/named.secroots";
    allow-query     { localhost;10.0.1.0/24;};

    forwarders {
        223.5.5.5; // 阿里云 DNS
        8.8.8.8; // Google DNS
        8.8.4.4;
    };

    /* Path to ISC DLV key */
    bindkeys-file "/etc/named.iscdlv.key";
};

zone "example.com" {
    type master;
    file "example.com.zone";
    allow-update { none; };
};
  • 修改options块,允许所有IP进行查询(或者仅允许你的本地网络):
directory:指定BIND存储区域文件的位置。

allow-query:指定允许向BIND服务器发送查询请求的IP范围。根据你的网络情况,你可以设置为允许来自特定子网的请求,如 192.168.1.0/24。

forwarders:指定一个或多个上游DNS服务器的IP地址。BIND会将无法本地解析的DNS查询转发给这些服务器。
  • 区域配置zone:根据需求定义主区域(master zone);

  • 创建区域文件(通常存放在 /var/named 目录下):区域文件通常以.zone结尾,例如:db.example.com.zone。

sudo nano /var/named/example.com.zone

在文件中添加你的DNS记录,例如:

$TTL 86400
@   IN  SOA ns1.example.com. admin.example.com. (
            2024080701 ; Serial
            3600       ; Refresh
            1800       ; Retry
            1209600    ; Expire
            86400 )    ; Minimum TTL

    IN  NS  ns1.example.com.
ns1 IN  A   192.168.1.10
www IN  A   192.168.1.20

DNS区域文件的内容定义了example.com域的DNS记录,包括该域的SOA(Start of Authority)记录、NS(Name Server)记录和A(Address)记录。下面是对每一部分的解释:


$TTL 86400
  $TTL:默认的生存时间(Time To Live),单位为秒。
  86400:表示24小时(86400秒)。这是记录在DNS缓存中保存的时间。在此时间段内,缓存的DNS服务器不会向原始DNS服务器请求新的记录。

@ IN SOA ns1.example.com. admin.example.com. (...)
    @:代表当前的域名(即example.com)。
    IN:表示Internet类的记录。
    SOA:Start of Authority,标志域名的权威起点,定义了DNS区域的基本信息。
    ns1.example.com.:主DNS服务器的域名。这是负责该域名区域的主要DNS服务器。
    admin.example.com.:域名管理员的电子邮件地址,.替代了@符号(如 admin@example.com)。
    (...):括号内的字段分别是:
        2024080701 - Serial:序列号,用于标识此区域文件的版本。每当该文件有修改时,序列号应递增。格式通常为 YYYYMMDDNN(年份+月份+日期+修改次数)。
        
        3600 - Refresh:刷新间隔,单位为秒。此时间表示从属DNS服务器应该多长时间检查主DNS服务器以获取更新。3600秒即1小时。
        
        1800 - Retry:重试间隔,单位为秒。如果从属DNS服务器在尝试获取更新失败后,需要等待多长时间再进行重试。1800秒即30分钟。
        
        1209600 - Expire:失效时间,单位为秒。如果从属DNS服务器在指定的失效时间内无法与主DNS服务器通信,则该DNS区域数据被认为是无效的。1209600秒即14天。
        
        86400 - Minimum TTL:在之前版本的BIND中,Minimum TTL被用作负面缓存(Negative Caching)的默认TTL。在现代BIND版本中,它仍然定义了该区域的TTL值。

IN NS ns1.example.com.
    IN:表示Internet类的记录。
    NS:Name Server记录,指定该域名的权威DNS服务器。
    ns1.example.com.:指定example.com的权威DNS服务器为ns1.example.com。

ns1 IN A 192.168.1.10
    ns1:主机名,即 ns1.example.com。
    IN A:A记录,将主机名映射到IPv4地址。
    192.168.1.10:ns1.example.com的IP地址。

www IN A 192.168.1.20
    www:主机名,即 www.example.com。
    IN A:A记录,将主机名映射到IPv4地址。
    192.168.1.20:www.example.com的IP地址。
  • 设置BIND启动与开机自启动

    • 启动BIND:
    sudo systemctl start named
    
    • 启用BIND服务,使其在系统启动时自动启动:
    sudo systemctl enable named  
    
  • 配置防火墙:

    • 确保你的防火墙允许DNS查询通过(默认端口53), 在CentOS 7上,使用以下命令安装防火墙:
    sudo firewall-cmd --permanent --add-port=53/udp
    sudo firewall-cmd --permanent --add-port=53/tcp
    sudo firewall-cmd --reload
    
  • 测试BIND配置

    使用以下命令测试BIND配置是否正确:

    sudo named-checkconf
    sudo named-checkzone example.com /var/named/example.com.zone
    

    如果没有错误信息返回,则配置文件和区域文件是正确的。

  • 配置客户端
    在局域网中的客户端设备上,将DNS服务器的IP地址设置为刚刚配置的DNS服务器的IP地址(如 192.168.1.2)。这可以在网络设置中手动配置,也可以通过DHCP服务器自动分发。

  • 测试DNS服务器:
    使用 nslookup工具测试DNS解析功能,确保配置正确。定期检查和更新DNS记录,保持数据的准确性和网络的正常运行。

nslookup example.com localhost

也可以直接使用ping 命令测试域名解析功能。

ping example.com

如果解析成功,BIND 9已经成功安装并配置为DNS服务器。

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

在Ubuntu系统上安装BIND:

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

  • 使用以下命令安装BIND:
sudo apt update
sudo apt install bind9

-配置BIND

配置文件通常位于 /etc/bind 目录下。主要的配置文件是 named.conf 和 zone 文件。

  • 编辑主配置文件 named.conf(配置基本选项和引入区域文件):
// /etc/bind/named.conf
options {
    directory "/var/cache/bind";
    recursion yes;
    allow-query { any; };
    forwarders {
        8.8.8.8; // Google DNS 或其他外部DNS服务器
        8.8.4.4;
    };
};

  • 配置区域(zone)named.conf.local文件(创建区域文件定义本地网络的域名和IP地址的映射):
// /etc/bind/named.conf.local
zone "example.local" {
    type master;
    file "/etc/bind/db.example.local";
};

  • 创建区域文件:
// /etc/bind/db.example.local
$TTL 604800
@   IN  SOA ns1.example.local. admin.example.local. (
        2024080701 ; Serial
        604800     ; Refresh
        86400      ; Retry
        2419200    ; Expire
        604800 )   ; Negative Cache TTL

; Name servers
@   IN  NS  ns1.example.local.

; A records for name servers
ns1 IN  A   192.168.1.2

; A records for other hosts
www IN  A   192.168.1.3

  • 重启BIND服务:

        sudo systemctl restart bind9
    
  • 配置客户端
    在局域网中的客户端设备上,将DNS服务器的IP地址设置为刚刚配置的DNS服务器的IP地址(如 192.168.1.2)。这可以在网络设置中手动配置,也可以通过DHCP服务器自动分发。

  • 测试DNS服务器:
    使用 nslookup工具测试DNS解析功能,确保配置正确。定期检查和更新DNS记录,保持数据的准确性和网络的正常运行。

nslookup example.com localhost

也可以直接使用ping 命令测试域名解析功能。

ping example.com

如果解析成功,BIND 9已经成功安装并配置为DNS服务器。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容