龙蜥OS搭建Technitium DNS全指南
Technitium DNS 服务器
- 一、环境介绍
- 二、安装
- 1、安装.NET Core runtime
- 2、下载并解压软件包
- 3、设置systemd
- 4、访问
- 三、配置防火墙规则
- 四、配置使用
- 1、基础知识
- 2、Technitium 界面简单介绍
- 3、zone信息介绍
- 4、设置主要zone(权威服务器)
- 5、设置转发zone
- 6、Technitium 系统设置
- (1)secondary zone 同步时间
- (2)TSIG秘钥
- (3)缓存设置
- (4)黑名单 广告过滤设置
- (5)日志设置
- (6)说明
- 五、配置次要服务器
- 1、安装dns服务器
- 2、配置Secondary Zone
- (1)Primary Zone 配置
- (2)配置secondary zone
- (3)创建后
- 六、一些可能需要调优参数
- 1、系统参数
- 2、文件限制
- 3、程序参数
一、环境介绍
操作系统版本:龙蜥os 8.9
配置:4c 8G 100G硬盘
软件地址:https://technitium.com/dns/
端口占用:
5380/tcp(用于 Web 控制台访问)
53443/tcp(用于 Web 控制台 HTTPS 访问)
53/udp(默认 DNS 服务)
53/tcp(默认 DNS 服务)
853/udp(DNS-over-QUIC 服务)
853/tcp(DNS-over-TLS 服务)
443/udp(基于 HTTP/3 的 DNS-over-HTTPS 服务)
443/tcp(基于 HTTP/1.1 和 HTTP/2 的 DNS-over-HTTPS 服务)
80/tcp(用于反向代理或证书续订 HTTP 质询的 DNS-over-HTTP 服务)
67/udp(如果您打算使用内置 DHCP 服务器)
二、安装
1、安装.NET Core runtime
wget https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.16/aspnetcore-runtime-8.0.16-linux-x64.tar.gz
mkdir -p /opt/dotnet
tar -xvf aspnetcore-runtime-8.0.16-linux-x64.tar.gz -C /opt/dotnet/
ln -s /opt/dotnet/dotnet /usr/bin
2、下载并解压软件包
wget https://download.technitium.com/dns/DnsServerPortable.tar.gz
mkdir -p /opt/technitium/dns
tar -zxf DnsServerPortable.tar.gz -C /opt/technitium/dns
3、设置systemd
cp /opt/technitium/dns/systemd.service /etc/systemd/system/dns.service
systemctl enable dns.service
systemctl start dns.service
日志查看
journalctl -u dns -f
4、访问
http://<server-ip-address>:5380/
更改admin密码
三、配置防火墙规则
firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=10.90.101.1 port port=5380 protocol=tcp accept'
firewall-cmd --permanent --zone=public --add-port=53/udp
firewall-cmd --permanent --zone=public --add-port=53/tcp
firewall-cmd --permanent --zone=public --add-port=853/udp
firewall-cmd --permanent --zone=public --add-port=853/tcp
firewall-cmd --permanent --zone=public --add-port=443/udp
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --reload
四、配置使用
1、基础知识
🌐 DNS 查询方式分两种:
-
✅ 递归查询(客户端 → 本地DNS)
客户端只发一次请求,本地DNS负责“包办到底”
客户端不关心过程,只管等结果 -
✅ 迭代查询(本地DNS → 其他DNS服务器)
本地DNS自己向根、顶级、权威服务器一层一层查询
每一层都只告诉“下一跳”(比如:“你去问 .com”),而不是给最终答案
🔁 图中体现:
角色 | 查询类型 | 举例 |
---|---|---|
用户 → 本地DNS | 递归查询 | “请告诉我 www.baidu.com的IP” |
本地DNS → 根DNS | 迭代查询 | “我不知道,但.com在这里,你去问它” |
本地DNS → 顶级DNS | 迭代查询 | “baidu.com 在这个权威服务器上” |
本地DNS → 权威DNS | 迭代查询 | 最终才拿到确切记录 |
好我们使用命令,看下是如何查询到具体地址的:
dig +trace www.baidu.com
🔍 查询过程简述:
客户端通过 dig +trace 向配置的 DNS 服务器发起 www.baidu.com 的查询。查询从根域名服务器开始:
1、根域名服务器(Root):返回 .com 顶级域名(TLD)的 13 个 NS(如 a.gtld-servers.net.)。
2、TLD 服务器(.com):返回 baidu.com 的权威 DNS 服务器(如 ns1.baidu.com, ns2.baidu.com 等)。
3、权威 DNS 服务器(baidu.com):返回 www.baidu.com 实际的记录——是一个 CNAME 记录 指向 www.a.shifen.com。
4、最终解析由 ns7.baidu.com 解析出 CNAME 指向的真实 IP 地址。
2、Technitium 界面简单介绍
Dashboard:
总览面板,展示 DNS 查询的实时统计信息
Zones:
配置 DNS 区域(Zone)信息,支持设置自定义的 DNS 记录(如 A、AAAA、CNAME、MX 等)
Cache:
查看和管理 DNS 缓存,显示已经缓存的 DNS 查询记录,可手动清除缓存
Allowed:
白名单设置
Blocked:
黑名单设置,阻止特定域名的 DNS 请求
Apps:
插件/应用程序功能,用于安装额外功能或集成支持,官方自带应用仓库
DNS Client:
用作 DNS 客户端查看请求
Settings:
服务器设置中心,包括网络设置、监听端口、转发器(Forwarder)、日志设置等
DHCP:
配置 DHCP 服务器,给局域网内的设备自动分配 IP 地址,可设定 IP 租期、保留地址、子网,NTP服务器等
Administration:
管理员、用户、权限相关设置
Logs:
查看日志记录、服务器日志,查询日志
About:
软件信息页面,显示当前版本、开发者信息、许可证说明等
3、zone信息介绍
🔍 各 Zone 类型详细介绍:
-
Primary Zone (default)
✅ 用途:你自己维护的主 DNS 区域。
✏️ 你可以手动添加 A、AAAA、MX、CNAME 等记录。
🏠 常见场景:本地域名解析,如 nas.home → 192.168.1.10。 -
Secondary Zone
📥 用途:从远程 DNS 服务器获取并同步某个区域(只读)。
🔁 作用:容灾、高可用备份,一般与 Primary Zone 搭配使用。
💡 注意:需要设置主 DNS 服务器的 IP 和允许 zone transfer。 -
Stub Zone
🔎 用途:只保存目标 Zone 的 NS 记录和 SOA 记录。
🧭 用途定位:快速定位目标 Zone 的权威服务器,而不是递归查询。
⚙️ 适合场景:大型组织或跨网络架构,提升解析效率。 -
Conditional Forwarder Zone
➡️ 用途:将特定域名的查询转发到指定的 DNS 服务器。
🎯 按域名条件转发,如:
查询 corp.example.com → 指定公司内部 DNS,其他继续走公网DNS
📡 适合场景:分布式 DNS 架构、混合云网络。 -
Secondary Conditional Forwarder Zone
🧩 用途:从其他服务器同步得到的“条件转发”配置(只读)。
🪪 类似于 Secondary Zone,但对象是 Conditional Forwarder。
📦 适合大规模网络配置共享或管理自动化。 -
Catalog Zone
📚 用途:RFC 9432 定义的“DNS Catalog Zones”。
👥 场景:集中管理多个 DNS 区域的部署。
🔧 作用:让主服务器将多个 Zone 的列表下发给多个从服务器,自动化 Secondary Zone 分发管理。
📡 高级企业/运营商级功能,提高大规模 DNS 集群部署效率。 -
Secondary Catalog Zone
🧾 用途:从主服务器获取 Catalog Zone 信息。
🧩 自动订阅和创建 Secondary Zones。
📍 一旦主服务器更新 Zone 列表,所有 Secondary 会自动同步。 -
Secondary ROOT Zone (RFC 8806)
🌍 用途:本地镜像根区域(. zone)。
📦 基于 RFC 8806,用于本地存储全互联网根域名信息。
⚡ 好处:
减少对外部 DNS 根服务器的依赖。
更快、更私密的 DNS 解析(常用于企业/国家级 DNS 架构)。
⚠️ 需要频繁同步根区域数据,不适合一般家庭使用。
4、设置主要zone(权威服务器)
添加一个A记录
更改本地网络配置 设置dns服务器地址测试
这里有个小问题:
可以看到上图显示 服务器显示的unknow,这是dns服务器缺少PTR解析,可以建立一个
添加一个DNS服务器的PTR解析:
再次在本地解析,看服务器已经显示正常:
5、设置转发zone
添加一个A记录
本地解析测试
可以看到,在本地解析的123.baidu.com直接出了权威应答,而没有在本地解析的www.baidu.com而是被转发的外网解析。
6、Technitium 系统设置
(1)secondary zone 同步时间
settings–》general
Technitium会使用系统配置,而不是zone文件中的配置:
(2)TSIG秘钥
settings–》tsig
这个秘钥再设置secondary zone的时候可以用
(3)缓存设置
settings–》cache
这里这个问题,我开启这个会变慢而不是快,所以关闭了
(4)黑名单 广告过滤设置
settings–》blocking
(5)日志设置
settings–》logging
(6)说明
我这里使用的内网dns的人比较多,我关闭了缓存、黑名单、广告、日志
五、配置次要服务器
1、安装dns服务器
按照第二步骤方法,再安装一台DNS服务器
2、配置Secondary Zone
注意: 一般配置这个Secondary Zone需要配合Primary Zone使用
(1)Primary Zone 配置
使用acl 控制访问,这里需要的使用tcp 53端口
使用tsig 这里 需要再两个dns中创建一样的tsig
(2)配置secondary zone
在第二台dns服务器上创建 secondary zone
(3)创建后
完成创建后会同步主dns zone的配置,是只读的,根据系统设置每5分钟回同步一次配置。客户端可以配置备选dns,当主dns server 无法访问时候就会使用备选dns
六、一些可能需要调优参数
1、系统参数
vi /etc/sysctl.conf
# 增大 socket 缓冲
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.netdev_max_backlog = 250000# UDP 优化
net.ipv4.udp_rmem_min = 16384
net.ipv4.udp_wmem_min = 16384
net.ipv4.udp_mem = 262144 327680 393216# 文件句柄
fs.file-max = 2097152
sysctl -p
2、文件限制
vi /etc/security/limits.conf
* soft nofile 1048576
* hard nofile 1048576
3、程序参数
vi /etc/systemd/system/dns.service
[Unit]
Description=Technitium DNS Server
After=network.target[Service]
WorkingDirectory=/opt/technitium/dns
ExecStart=/usr/bin/dotnet /opt/technitium/dns/DnsServerApp.dll /etc/dns
Restart=always
RestartSec=5
KillSignal=SIGINT
SyslogIdentifier=technitium-dns# 性能优化(推荐生产环境使用)
Environment=DOTNET_gcServer=1
Environment=DOTNET_ThreadPool_MinThreads=128
Environment=DOTNET_gcHeapHardLimitPercent=75
Environment=DOTNET_gcConcurrent=1# 增加文件句柄限制
LimitNOFILE=1048576[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl stop dns
systemctl start dns