Linux内网怎么搭建DNS?

HCRM技术_小炮 DNS 2026-03-05 34 2

在Linux内网搭建DNS服务器,主要有两种常见方案:BIND(功能完整)和dnsmasq(轻量级),以下是详细步骤:

方案一:使用BIND搭建完整DNS服务器

安装BIND

Ubuntu/Debian
sudo apt update
sudo apt install bind9 bind9-utils
CentOS/RHEL
sudo yum install bind bind-utils

配置BIND主配置文件

编辑/etc/bind/named.conf/etc/named.conf

sudo vim /etc/bind/named.conf

添加或修改以下内容:

options {
    listen-on port 53 { 127.0.0.1; 192.168.1.10; };  # 监听IP
    directory "/var/named";
    allow-query { localhost; 192.168.1.0/24; };      # 允许查询的网段
    recursion yes;                                    # 启用递归查询
    forwarders { 8.8.8.8; 114.114.114.114; };        # 上游DNS
};

创建正向解析区域文件

创建域定义文件/etc/bind/named.conf.local

zone "example.local" IN {
    type master;
    file "/etc/bind/db.example.local";
    allow-update { none; };
};

创建区域数据文件/etc/bind/db.example.local

$TTL 86400
@   IN  SOA ns1.example.local. admin.example.local. (
        2024010101  ; Serial
        3600        ; Refresh
        1800        ; Retry
        604800      ; Expire
        86400 )     ; Minimum TTL
@       IN  NS  ns1.example.local.
ns1     IN  A   192.168.1.10
www     IN  A   192.168.1.20
ftp     IN  A   192.168.1.21
mail    IN  A   192.168.1.30

创建反向解析区域文件(可选)

named.conf.local 添加:

zone "1.168.192.in-addr.arpa" IN {
    type master;
    file "/etc/bind/db.192.168.1";
    allow-update { none; };
};

创建反向解析文件/etc/bind/db.192.168.1

$TTL 86400
@   IN  SOA ns1.example.local. admin.example.local. (
        2024010101
        3600
        1800
        604800
        86400 )
@       IN  NS  ns1.example.local.
10      IN  PTR ns1.example.local.
20      IN  PTR www.example.local.
21      IN  PTR ftp.example.local.
30      IN  PTR mail.example.local.

测试配置文件并启动服务

检查语法
sudo named-checkconf
sudo named-checkzone example.local /etc/bind/db.example.local
启动服务
sudo systemctl start named
sudo systemctl enable named
sudo systemctl status named

方案二:使用dnsmasq(轻量级)

安装dnsmasq

Ubuntu/Debian
sudo apt install dnsmasq
CentOS/RHEL
sudo yum install dnsmasq

配置dnsmasq

编辑/etc/dnsmasq.conf

sudo vim /etc/dnsmasq.conf

添加以下配置:

监听地址
listen-address=127.0.0.1,192.168.1.10
绑定到指定接口
interface=eth0
不读取/etc/hosts
no-hosts
指定自定义hosts文件
addn-hosts=/etc/dnsmasq.hosts
上游DNS服务器
server=8.8.8.8
server=114.114.114.114
本地域名
local=/example.local/
DNS记录
address=/www.example.local/192.168.1.20
address=/ftp.example.local/192.168.1.21
address=/mail.example.local/192.168.1.30

创建自定义hosts文件

sudo vim /etc/dnsmasq.hosts

添加记录:

192、168.1.20    www.example.local
192、168.1.21    ftp.example.local
192、168.1.30    mail.example.local

启动dnsmasq

sudo systemctl start dnsmasq
sudo systemctl enable dnsmasq

方案三:使用systemd-resolved(简单)

1. 编辑systemd-resolved配置

sudo vim /etc/systemd/resolved.conf

添加:

[Resolve]
DNS=192.168.1.10 8.8.8.8
Domains=example.local

创建本地域名解析

sudo vim /etc/hosts

添加:

192、168.1.10    dns.example.local
192、168.1.20    www.example.local
192、168.1.30    mail.example.local

客户端配置

Linux客户端

临时修改
sudo vim /etc/resolv.conf
添加:nameserver 192.168.1.10
永久修改(NetworkManager)
sudo vim /etc/NetworkManager/conf.d/dns.conf
添加:[main] dns=dnsmasq

Windows客户端

1、打开"网络和共享中心"

2、选择"更改适配器设置"

3、右键选择网络连接 → 属性

4、选择"Internet协议版本4 (TCP/IPv4)"

5、使用以下DNS:192.168.1.10

测试DNS服务器

使用nslookup测试
nslookup www.example.local 192.168.1.10
使用dig测试
dig @192.168.1.10 www.example.local
测试反向解析
dig @192.168.1.10 -x 192.168.1.20
检查DNS服务状态
sudo netstat -tulnp | grep :53

防火墙配置

开放53端口
sudo ufw allow 53
或使用iptables
sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT

注意事项

1、选择方案

- 小型内网:推荐dnsmasq,配置简单

- 需要完整功能:选择BIND

- 极简需求:直接修改/etc/hosts

2、安全建议

- 限制访问IP范围

- 定期更新系统补丁

- 配置日志监控

3、备份配置

   # 备份BIND配置
   sudo tar -czf /backup/bind-config-$(date +%Y%m%d).tar.gz /etc/bind
   
   # 备份dnsmasq配置
   sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak

根据网络规模和需求选择合适的方案,对于大多数内网环境,dnsmasq是简单高效的选择。

文章摘自:https://idc.huochengrm.cn/dns/23950.html

评论

精彩评论
  • 2026-03-05 21:50:33

    在Linux内网搭建DNS,需要安装和配置BIND或dnsmasq等DNS服务器软件,配置解析区域文件、正向解析和反向解析记录,确保内网设备能正确解析域名。

  • 2026-05-02 05:34:15

    在Linux内网搭建DNS,可以使用bind或dnsmasq服务,配置域名解析和缓存策略,确保内网设备能正确解析域名。