凌峰创科服务平台

如何架设Linux DNS服务器?

在Linux系统中架设DNS服务器通常使用BIND(Berkeley Internet Name Domain)软件,它是目前最广泛使用的DNS服务器实现之一,以下将详细介绍在Linux环境下架设DNS服务器的完整步骤,包括环境准备、安装配置、区域文件管理、安全设置及测试验证等内容。

如何架设Linux DNS服务器?-图1
(图片来源网络,侵删)

环境准备与安装

首先需要一台运行Linux发行版的计算机,推荐使用Ubuntu、CentOS等主流系统,确保服务器具有静态IP地址,例如设置IP为192.168.1.100,子网掩码255.255.255.0,网关192.168.1.1,以Ubuntu为例,更新系统软件包列表后安装BIND9:

sudo apt update
sudo apt install bind9 bind9utils bind9-doc

安装完成后,BIND服务会自动启动,可通过systemctl status bind9检查服务状态。

主配置文件修改

BIND的主配置文件位于/etc/bind/named.conf.options,主要配置全局选项如监听地址、转发器等,编辑该文件,添加以下内容:

options {
    directory "/var/cache/bind";
    recursion yes;
    allow-query { any; };  # 允许所有查询,生产环境应限制为特定网段
    forwarders { 8.8.8.8; 114.114.114.114; };  # 指定上游DNS服务器
    dnssec-validation auto;
    listen-on { 127.0.0.1; 192.168.1.100; };  # 监听本地和服务器IP
};

保存后执行sudo named-checkconf检查配置语法是否正确。

如何架设Linux DNS服务器?-图2
(图片来源网络,侵删)

正向与反向区域配置

区域文件用于定义域名与IP的映射关系,首先在/etc/bind/named.conf.local中声明区域:

zone "example.com" {
    type master;
    file "/etc/bind/db.example.com";
};
zone "1.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/db.192.168.1";
};

创建正向区域文件/etc/bind/db.example.com如下:

$TTL    86400
@       IN      SOA     ns1.example.com. admin.example.com. (
                        2025101501      ; Serial
                        3600            ; Refresh
                        1800            ; Retry
                        604800          ; Expire
                        86400 )         ; Minimum
        IN      NS      ns1.example.com.
        IN      A       192.168.1.100
ns1     IN      A       192.168.1.100
www     IN      A       192.168.1.101

创建反向区域文件/etc/bind/db.192.168.1如下:

$TTL    86400
@       IN      SOA     ns1.example.com. admin.example.com. (
                        2025101501      ; Serial
                        3600            ; Refresh
                        1800            ; Retry
                        604800          ; Expire
                        86400 )         ; Minimum
        IN      NS      ns1.example.com.
100     IN      PTR     ns1.example.com.
101     IN      PTR     www.example.com.

注意每条记录的末尾需以分号结尾,序列号(Serial)修改后需递增。

权限与启动服务

确保区域文件所有者为bind用户,权限设置为644:

sudo chown bind:bind /etc/bind/db.*
sudo chmod 644 /etc/bind/db.*

重启BIND服务加载新配置:

sudo systemctl restart bind9
sudo systemctl enable bind9

安全加固措施

为提高安全性,建议采取以下措施:

  1. 限制查询范围:在named.conf.options中将allow-query设置为特定网段,如{ 192.168.1.0/24; }
  2. 启用DNSSEC:在区域配置中添加dnssec-policy default;并生成密钥对
  3. 防止区域传输:添加allow-transfer { none; };或仅允许指定服务器
  4. 使用TSIG认证:在区域间传输时配置共享密钥
  5. 日志监控:在named.conf.options中配置日志输出到指定文件

测试与验证

使用dignslookup工具测试DNS解析功能:

dig @192.168.1.100 www.example.com
dig -x 192.168.1.101

若返回正确的A记录和PTR记录,说明配置成功,也可通过systemctl status bind9查看服务日志,排查错误。

常见问题与解决方案

问题现象 可能原因 解决方法
无法解析域名 防火墙阻止53端口 检查ufw/iptables规则,允许DNS流量
区域传输失败 权限或配置错误 检查allow-transfer设置及区域文件权限
提示"REFUSED"错误 recursion未启用或查询被拒绝 检查options中的recursion和allow-query配置

相关问答FAQs

Q1: 如何为子域名(如test.example.com)添加DNS记录?
A1: 在正向区域文件db.example.com中添加记录,例如test IN A 192.168.1.102,然后递增序列号并重启BIND服务即可,确保记录格式正确,末尾分号不能遗漏。

Q2: 修改DNS配置后如何确保生效?
A2: 首先使用named-checkconfnamed-checkzone检查配置语法,例如named-checkzone example.com /etc/bind/db.example.com,确认无误后重启BIND服务,或使用rndc reload动态重载配置,无需中断服务。

分享:
扫描分享到社交APP
上一篇
下一篇