服务器内网 dns 如何搭建

juming
juming 初级会员超兽战士
发布于 2026-10-08 22:41 ·1 浏览 ·0 回复

照着做完,你能在一台 Linux 服务器上跑起一套只服务内网的 DNS,让 git.corp.local、nas.corp.local 这类域名在内网直接解析,不用再记 IP。下面以 Ubuntu 22.04 + BIND 9.18 为例,一步步做。

第一步:确定服务器和网段信息

先定下这台 DNS 服务器自己的固定 IP 和你要用的内网域名。本文假设:DNS 服务器 IP 是 192.168.10.10,内网网段 192.168.10.0/24,内网域名用 corp.local。把这两个值替换成你自己的,后面所有配置文件都跟着改。

注意:不要用 local、internal 以外的真实公网域名做内网域,尤其别用你自己已注册的公网域名,否则内外解析会打架。推荐 corp.local、home.lan 这类。

第二步:安装 BIND9

这一步装好 DNS 服务端程序和排查工具,装完 named 进程就有了但还没启动成功配置。

sudo apt update
sudo apt install -y bind9 bind9-utils bind9-dnsutils
sudo systemctl status bind9

bind9 是服务本体,bind9-utils 提供 named-checkconf、named-checkzone 检查工具,bind9-dnsutils 提供 dig、nslookup。

第三步:改主配置,只对内网提供服务

编辑 /etc/bind/named.conf.options,把 options { ... } 整段替换成下面内容,目的是限定监听地址、只允许内网查询、并把外网域名转发给公共 DNS:

options {
    directory "/var/cache/bind";
    listen-on { 127.0.0.1; 192.168.10.10; };
    listen-on-v6 { none; };
    allow-query { localhost; 192.168.10.0/24; };
    recursion yes;
    forwarders { 223.5.5.5; 114.114.114.114; };
    dnssec-validation no;
};

forwarders 让内网解析不了的外网域名(比如 www.baidu.com)自动转发出去,这样客户端只配一个 DNS 就够了。

第四步:声明两个区域

编辑 /etc/bind/named.conf.local,在文件末尾追加:

zone "corp.local" {
    type master;
    file "/etc/bind/db.corp.local";
};

zone "10.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/db.192.168.10";
};

第一个是正向区域(域名→IP),第二个是反向区域(IP→域名)。反向区域名要把网段倒着写:192.168.10.x 对应 10.168.192.in-addr.arpa。

第五步:写正向解析文件

新建 /etc/bind/db.corp.local,内容如下,这就是内网域名清单:

$TTL 604800
@   IN  SOA ns1.corp.local. admin.corp.local. (
        2024011501 ; 序列号,每次改完要 +1
        3600
        900
        604800
        86400 )
@   IN  NS  ns1.corp.local.
ns1 IN  A   192.168.10.10
git IN  A   192.168.10.21
db  IN  A   192.168.10.22
nas IN  A   192.168.10.30
wifi IN CNAME nas.corp.local.

注意:SOA 行末尾的 admin.corp.local. 其实是邮箱 admin@corp.local 的写法,最后的点不能省;每一行域名后面的点也建议保留,否则会被自动拼上 corp.local。

改完设权限,让 bind 用户能读:

sudo chown root:bind /etc/bind/db.corp.local
sudo chmod 644 /etc/bind/db.corp.local

第六步:写反向解析文件

新建 /etc/bind/db.192.168.10,只写 IP 最后一段加 PTR:

$TTL 604800
@   IN  SOA ns1.corp.local. admin.corp.local. (
        2024011501
        3600
        900
        604800
        86400 )
@   IN  NS  ns1.corp.local.
10  IN  PTR ns1.corp.local.
21  IN  PTR git.corp.local.
22  IN  PTR db.corp.local.
30  IN  PTR nas.corp.local.

第七步:检查语法并启动

先检查再重启,能避免服务起不来:

sudo named-checkconf
sudo named-checkzone corp.local /etc/bind/db.corp.local
sudo named-checkzone 10.168.192.in-addr.arpa /etc/bind/db.192.168.10
sudo systemctl restart bind9
sudo systemctl enable bind9
sudo ss -lunp | grep :53

三条检查命令都返回 OK 或没报错,ss 能看到 192.168.10.10:53 在监听,服务就算起来了。如果服务器开了 ufw,放行内网查询:

sudo ufw allow from 192.168.10.0/24 to any port 53 proto udp
sudo ufw allow from 192.168.10.0/24 to any port 53 proto tcp

本机自测:

dig @192.168.10.10 git.corp.local +short     # 应返回 192.168.10.21
dig @192.168.10.10 -x 192.168.10.21 +short   # 应返回 git.corp.local.
dig @192.168.10.10 www.baidu.com +short      # 应返回百度 IP,说明转发正常

第八步:把客户端指过来

Linux 客户端(Ubuntu,走 netplan):编辑 /etc/netplan/00-installer-config.yaml,在对应网卡下加:

      nameservers:
        addresses: [192.168.10.10]

然后 sudo netplan apply。如果系统装了 systemd-resolved,它会接管 /etc/resolv.conf,直接改该文件无效,要改 /etc/systemd/resolved.conf 里的 DNS=192.168.10.10,再 sudo systemctl restart systemd-resolved。

Windows 客户端:右键任务栏网络图标 →「打开网络和 Internet 设置」→「以太网」→「编辑 IP 分配」旁的「DNS 服务器分配」→「编辑」→ 选「手动」→ 首选 DNS 填 192.168.10.10 → 保存。

改完在客户端执行 nslookup git.corp.local,返回 192.168.10.21 就成功了。

注意:以后每次增删域名,都要改区域文件并把 SOA 里的序列号(示例中的 2024011501)加 1,否则从服务器和缓存不会更新;改完执行 sudo named-checkzone 再 sudo rndc reload。

小结

  • 装 bind9 + bind9-utils,配置分三处:named.conf.options(监听与转发)、named.conf.local(区域声明)、区域文件(解析记录)。
  • 反向区域名要把网段倒写,如 10.168.192.in-addr.arpa。
  • 改配置后必做:named-checkconf / named-checkzone 检查,再 systemctl restart bind9。
  • forwarders 指向公共 DNS,客户端只配内网 DNS 一台即可。
  • 每次改记录都要递增 SOA 序列号,否则不生效。
  • 规模小于 50 台机器时,用 dnsmasq 单文件配置会更省事,但 BIND 功能更全、更适合长期维护。
版权声明:本文来自 GJ站长论坛《服务器内网 dns 如何搭建》
原文链接:https://www.gj0.com/thread-1235.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~