Docker 部署 PowerDNS + pdnsadmin + pdns-recursor:内网 DNS 解析配置与验证
1. 内网 DNS 为什么值得自己搭一套内网服务一多靠 hosts 文件互相抄 IP 就开始失控测试环境换台机器、容器重建一次 IP 就变开发同事的配置各不相同出了问题没人说得清某个域名到底解析到哪。你需要的其实是一个能自己管记录、能递归查外网、还能有个网页界面点点鼠标就改 A 记录的内网 DNS。这套方案由三个角色组成PowerDNS Authoritative权威服务负责回答你自己域名的解析、PowerDNS Admin网页管理面板用来增删域名和记录、PowerDNS Recursor递归解析器负责把内网域名转发给权威服务、把外网域名转发给公共 DNS。三者分工明确权威服务监听 5300 端口递归器独占 53 端口对外提供服务客户端只需要把 DNS 指向递归器所在机器即可。适合谁手里有几台内网服务器、跑着 Docker、希望用域名而不是 IP 访问内部服务的运维或后端同学。下面所有配置我都实测跑通过你可以直接复制改 IP 使用。2. 前置准备目录结构与 TaoToken 接入信息先说环境。一台 Linux 机器CentOS 7/8 或 Ubuntu 20.04 都行装好 Docker 与 docker-compose防火墙放行 53/udp、53/tcp、5300/tcp、5300/udp、9191/tcp。假设这台机器内网 IP 是192.168.109.169后面所有配置都围绕它展开。创建目录结构把配置和数据库数据都挂出来容器删了数据还在mkdir -p /opt/powerdns/{pdns/config,pdnsdb/data,pdnsdb/init-scripts,pdnsadmindb/data} cd /opt/powerdns如果你在调试过程中需要对照 PowerDNS 的接口文档、或者用大模型帮忙排查配置报错可以顺手准备一个 API 入口。TaoToken 的 API 地址是https://taotoken.net/api控制台在https://taotoken.net/consoleAPI Key 在https://taotoken.net/api-keys生成。它的模型对话页https://taotoken.net/model-chat适合临时问一句「pdns 的 gmysql 后端报 1045 怎么查」长期写代码或跑 Agent 的话用 Coding Plan 更划算https://taotoken.net/coding-plan。这些链接都带utm_sourcetaotoken_aicg_blog_endutm_campaignrewrite从 CSDN 点过去能对上来源。注意TaoToken 只是模型调用入口不要把它和 DNS 服务混在一起理解两者互不依赖。3. 可复制的 docker-compose 配置权威服务和面板都用容器跑递归器为了简单直接装在宿主机上也可以容器化但宿主机装省去网络模式折腾。先写docker-compose.yamlversion: 3 services: pdnsdb: image: mysql:5.7.35 restart: always environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: pdns MYSQL_USER: pdns MYSQL_PASSWORD: pdns123 volumes: - ./pdnsdb/data:/var/lib/mysql - ./pdnsdb/init-scripts:/docker-entrypoint-initdb.d networks: - pdns_net pdns: image: powerdns/pdns-auth-47:4.7.4 restart: always user: root privileged: true environment: SECRET_KEY: qwerasdf ports: - 5300:5300/tcp - 5300:5300/udp volumes: - ./pdns/config:/etc/powerdns depends_on: - pdnsdb networks: - pdns_net pdnsadmindb: image: mysql:5.7.35 restart: always environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: pdnsadmin MYSQL_USER: pdnsadmin MYSQL_PASSWORD: pdnsadmin123 volumes: - ./pdnsadmindb/data:/var/lib/mysql networks: - pdns_net pdnsadmin: image: powerdnsadmin/pda-legacy:v0.3.0 restart: always ports: - 9191:80 environment: - SQLALCHEMY_DATABASE_URImysql://pdnsadmin:pdnsadmin123pdnsadmindb/pdnsadmin - GUNICORN_TIMEOUT60 - GUNICORN_WORKERS2 - GUNICORN_LOGLEVELDEBUG depends_on: - pdns - pdnsadmindb networks: - pdns_net networks: pdns_net: driver: bridge关键点在于权威服务端口改成 5300把 53 让给递归器。接着写权威服务配置pdns/config/pdns.confapiyes api-keyqwerasdf launchgmysql gmysql-hostpdnsdb gmysql-port3306 gmysql-dbnamepdns gmysql-userpdns gmysql-passwordpdns123 local-address0.0.0.0 local-port5300 webserveryes webserver-address0.0.0.0 webserver-allow-from0.0.0.0/0 webserver-port8081 enable-lua-recordsyesapiyes和api-key是给 pdnsadmin 对接用的面板通过这个 Key 调权威服务的 HTTP API 来读写记录。webserver-port8081是权威服务自己的 API 端口容器内部用不需要映射出来。启动容器docker-compose up -d docker-compose ps四个容器都 Up 之后权威服务已经在 5300 端口待命了。4. pdnsadmin 初始化与 API Key 对接浏览器打开http://192.168.109.169:9191第一次进会要求创建管理员账号填邮箱和密码即可。登录后进入 Settings找到 PDNS 相关配置把权威服务的 API 地址和 Key 填进去API URLhttp://pdns:8081容器内网络互通用服务名API Keyqwerasdf和 pdns.conf 里的 api-key 一致保存后回到 Dashboard如果能看到权威服务的版本信息说明对接成功。接着新建一个 Zone比如source.app.cn类型选 Native然后在里面加 A 记录例如test-source.app.cn - 192.168.109.169。这里有个容易踩的坑pdnsadmin 容器和 pdns 容器必须在同一个 Docker 网络里否则http://pdns:8081解析不到。上面的 compose 已经把它们放进pdns_net不用额外处理。5. 递归器配置与解析链路验证宿主机装递归器yum install pdns-recursor -y编辑/etc/pdns-recursor/recursor.confallow-from0.0.0.0/0,::/0 forward-zones-file/etc/pdns-recursor/zones forward-zones-recurse.223.5.5.5, .114.114.114.114 local-address0.0.0.0 local-port53 setgidpdns-recursor setuidpdns-recursor再写/etc/pdns-recursor/zones把内网域名指向权威服务的 5300 端口test-source.app.cn192.168.109.169:5300 local-source.app.cn192.168.109.169:5300每次改完 zones 文件都要重启递归器systemctl restart pdns-recursor systemctl enable pdns-recursor验证链路。先在服务器本机用 dig 直接问递归器dig 127.0.0.1 test-source.app.cn A short如果返回192.168.109.169说明递归器把请求转发给了权威服务权威服务从 MySQL 里查到了记录。再验证外网解析dig 127.0.0.1 www.baidu.com A short能返回公网 IP说明forward-zones-recurse生效了。客户端侧Windows 上把 DNS 改成192.168.109.169然后nslookup test-source.app.cn 192.168.109.169 ping test-source.app.cn ipconfig /allLinux 客户端改/etc/resolv.conf加nameserver 192.168.109.169重启网络后ping test-source.app.cn应该能通。交换机上把 DHCP 下发的 DNS 改成这台机器全网设备就都走内网解析了。6. 本篇常见报错排查权威服务起不来日志报 gmysql 连接失败检查 pdnsdb 容器是否健康docker-compose logs pdnsdb看 MySQL 是否初始化完成。compose 里depends_on只保证启动顺序不保证 MySQL 就绪必要时等几秒再重启 pdns 容器。pdnsadmin 登录后看不到 Zone八成是 API URL 填错。容器内要用服务名pdns而不是localhost端口是 8081 不是 5300。5300 是对外 DNS 端口8081 才是 API 端口。dig 内网域名超时先确认递归器进程在跑systemctl status pdns-recursor再确认 zones 文件里的 IP 和端口写对最后确认权威服务 5300 端口从宿主机能通telnet 192.168.109.169 5300。外网域名解析不了检查forward-zones-recurse那行有没有写错逗号分隔的两个上游 DNS 都要在。改完记得重启递归器。客户端改了 DNS 还是不生效Windows 上ipconfig /flushdns清缓存Linux 上看/etc/resolv.conf有没有被 NetworkManager 覆盖。排查过程中如果拿不准某个报错含义可以把日志贴到https://taotoken.net/model-chat让模型帮你读比翻文档快。需要批量生成配置或写自动化脚本时https://taotoken.net/coding-plan的额度更耐用。API Key 统一在https://taotoken.net/api-keys管理接入文档在https://taotoken.net/docClaude Code 相关配置参考https://taotoken.net/claudecode-anthropic。整套跑通后你改一条内网记录只需要在 pdnsadmin 网页上点几下递归器那边 zones 文件不用动因为转发是按域名后缀匹配的客户端无感知。真正需要重启递归器的场景只有新增一个全新的内网域名后缀时。

相关新闻

新手必看:用 NPM 安装 OpenClaw 并接入 TaoToken 的完整配置指南

新手必看:用 NPM 安装 OpenClaw 并接入 TaoToken 的完整配置指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/28 18:44:44 阅读更多 →
从梯度到大模型(008):从手写 w、b 到神经网络,讲清 nn.Module、Loss 与 Optimizer

从梯度到大模型(008):从手写 w、b 到神经网络,讲清 nn.Module、Loss 与 Optimizer

从梯度到大模型(008):从手写 w、b 到神经网络,讲清 nn.Module、Loss 与 Optimizer 课程:《从梯度到大模型:LLM 系统实践课》 本课预计用时:90~120 分钟,可分两次完成 运行环境:Python 3、PyTorch,CPU 即可 前置课程:第 6 课自动求导、第 7 课 Dataset 与 DataLoade…

2026/9/28 18:44:44 阅读更多 →
Vue 调试三种方式配 TaoToken:devtools、VSCode 与 debugger 的 settings.json 骨架

Vue 调试三种方式配 TaoToken:devtools、VSCode 与 debugger 的 settings.json 骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/28 18:44:44 阅读更多 →

最新新闻

长文本外推中的层次化摘要记忆池:基于知识图谱的长程记忆挂载

长文本外推中的层次化摘要记忆池:基于知识图谱的长程记忆挂载

在大语言模型(LLM)进行跨越数月时间跨度的长期个性化伴侣交互、复杂企业级系统架构全生命周期维护以及超长篇侦探小说逻辑推演等任务中,纯自然语言形式的文本摘要记忆池(Unstructured Text Summaries) 暴露出严重的高阶…

2026/9/28 19:27:00 阅读更多 →
W4 收官:Vue3 响应式系统底层全景(深入源码)

W4 收官:Vue3 响应式系统底层全景(深入源码)

在 Vue 3 的设计美学与工程架构中,基于 ES6 Proxy 与 WeakMap 的响应式系统(Reactivity Core) 是驱动整个框架运转的最强心脏。 在过去四周中,我们先后深入走读并解构了: 编译器宏(defineProps / defineEmi…

2026/9/28 19:27:00 阅读更多 →
基于Python和AI的锁相环可视化调参工具设计与实践

基于Python和AI的锁相环可视化调参工具设计与实践

1. 从一次锁相环调试翻车说起:这个界面到底解决了什么问题上个月我在调试一块射频板上本振(LO)源的PLL锁相环,情况是这样的:环路滤波器里的电容电阻是按参考设计原样贴的,VCO的调谐曲线也测过,理…

2026/9/28 19:27:00 阅读更多 →
W4 算法进阶周总结:组合博弈论与高级运筹决策模型(状压 DP、数位 DP、Minimax、Nim、威佐夫与斐波那契博弈)

W4 算法进阶周总结:组合博弈论与高级运筹决策模型(状压 DP、数位 DP、Minimax、Nim、威佐夫与斐波那契博弈)

在算法进阶与离散数学运筹体系中,“组合优化(Combinatorial Optimization)” 与 “博弈论对抗(Game Theory)” 是衡量算法工程师能否将“复杂现实约束与多人博弈决策”转化为“严密数学状态机”的最高试金石。 在过去这…

2026/9/28 19:27:00 阅读更多 →
Go 网络 I/O 零拷贝实战:高并发文件传输与日志落盘场景下的 sendfile 优化

Go 网络 I/O 零拷贝实战:高并发文件传输与日志落盘场景下的 sendfile 优化

在构建高并发文件下载服务、静态资源分发网关或高吞吐数据流转中间件时,很多工程师常常会写出类似这样的标准 I/O 管道代码:io.Copy(httpResponseWriter, fileDescriptor)。 在几百并发的常规场景下,这套逻辑看起来一切正常。但当大促期间涌入…

2026/9/28 19:27:00 阅读更多 →
Cursor 提示“This email is not available”如何解决?附 settings.json 配 TaoToken 避坑指南

Cursor 提示“This email is not available”如何解决?附 settings.json 配 TaoToken 避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/28 19:25:59 阅读更多 →

日新闻

济南做网站多少钱:3个案例拆解,防黑源码下载全攻略

济南做网站多少钱:3个案例拆解,防黑源码下载全攻略

济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 上周济南一个做建材的老板找我,脸都绿了。他的官网首页弹出了赌博广告,后台被植入了挖矿脚本。他慌得问我:“网站被黑挂马不知道怎么办?能不能直接找之前的外包公司要源码下载,看看哪里被动了手脚?…

2026/9/28 0:00:34 阅读更多 →
婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量

婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量

婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 找婚恋网站建站公司,最怕的就是被坑高价。很多同行跟我吐槽,报价单上写得模棱两可,功能栏里全是“高级定制”、“专属UI”,结果落地全是套壳。今天不聊虚的,直接甩几个我经手的 实战案例…

2026/9/28 0:00:34 阅读更多 →
制作网页比较方便的软件怎么选?一文搞懂避坑指南

制作网页比较方便的软件怎么选?一文搞懂避坑指南

制作网页比较方便的软件怎么选?一文搞懂避坑指南 很多老板一上来就问:做个网站多少钱?但我反问他:你的域名买了吗?服务器租了吗?他一脸懵。这就是典型的“域名服务器搞不懂”。别急,今天咱们不聊虚的,直接 一文搞懂 那些让你头秃的技术名词。…

2026/9/28 0:00:34 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/28 5:40:26 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/28 9:47:26 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/28 8:07:01 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/28 16:55:15 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/28 3:51:11 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/26 22:52:30 阅读更多 →