大家好,我是羊刀仙。

本期为大家带来的是一款DNS小工具:doggo,可通过Docker进行部署。

doggo是一款用 Golang 编写的现代命令行 DNS 客户端(类似dig)。它以简洁明了的方式输出信息,并支持 DoH、DoT、DoQ 和 DNSCrypt 等协议。

网络调试终极武器,10分钟快速部署开源工具Doggo,解锁调试新技能

doggo 在日常中主要用于以下几个方面:

快速 DNS 查询:查看域名的 IP 地址;
DNS 服务器验证:检查不同 DNS 服务器的解析结果;
性能测试:比较不同 DNS 服务器的响应速度;
解析问题排查:调试 DNS 解析路径,解决访问问题;
隐私保护:通过 DoH 进行加密查询。

项目特点


Doggo 以 Docker 镜像的形式提供,托管在 GitHub Container Registry (ghcr.io) 上。它支持 x86 和 ARM 架构。

具有颜色编码和表格格式的人性化输出;
JSON 输出支持,方便编写脚本和解析;
多种传输协议:DoH、DoT、DoQ、TCP、UDP、DNSCrypt;
支持ndots和search配置;
支持多种解析器并可定制查询策略;
IPv4 和 IPv6 支持;
提供 Web 界面;
壳完成zsh和fish;
反向 DNS 查找;
灵活的查询选项,包括各种 DNS 标志;
故障排除调试模式;
响应时间测量;
跨平台支持;

部署


分为NAS和服务器两部分,都需要通过SSH进入控制台部署。

官方Web界面:https://doggo.mrkaran.dev/

官方使用文档:https://doggo.mrkaran.dev/docs/

⭕️首先是VPS服务器

输入以下命令即可快速安装:

curl -sS https://raw.githubusercontent.com/mr-karan/doggo/main/install.sh | sh网络调试终极武器,10分钟快速部署开源工具Doggo,解锁调试新技能

安装完毕后,输入doggo并回车,可以看到很多操作指令说明。

网络调试终极武器,10分钟快速部署开源工具Doggo,解锁调试新技能

这里先大概解释下,具体例子放在后面演示部分。

传输选项:

使用 URL 类型的协议指定查询方式:
udp:默认使用的协议
tcp:使用 TCP 进行查询
https:使用 HTTPS 进行查询(DNS over HTTPS, DoH)
tls:使用 TLS 进行查询(DNS over TLS, DoT)

查询选项:

-q, --query=HOSTNAME:指定要查询的主机名(如 mrkaran.dev)
-t, --type=TYPE:指定 DNS 记录类型(如 A, AAAA, MX 等)
-@, --nameserver=ADDR:指定 DNS 服务器地址
-c, --class=CLASS:指定 DNS 记录的类(如 IN, CH, HS 等)

解析选项:

--strategy=STRATEGY:指定解析器列表中的策略(如 random, first)
--timeout=DURATION:指定等待解析器响应的超时时间(如 5s, 400ms, 1m)
--ipv4:强制使用 IPv4
--ipv6:强制使用 IPv6

查询标志:

--ad:设置权威回答标志
--cd:禁用验证标志

输出选项:

-J, --json:将输出格式化为 JSON
-S, --short:简化输出,仅显示响应部分

之后便可以输入类似于以下命令开始使用:

# 简单的 DNS 查询 doggo example.com # 使用指定的名称服务器查询 MX 记录 doggo MX github.com @9.9.9.9 # 使用 DNS over HTTPS doggo example.com @https://cloudflare-dns.com/dns-query # 以 JSON 格式输出用于脚本处理 doggo example.com --json | jq '.responses[0].answers[].address' # 反向 DNS 查询 doggo --reverse 8.8.8.8 --short 网络调试终极武器,10分钟快速部署开源工具Doggo,解锁调试新技能

⭕️部署于NAS中

NAS中因系统原因,部署使用与服务器有些许差异,并不能持久化运行,直接输入doggo命令进行操作,但也有解决办法。

登入NAS后输入以下命令:

docker pull ghcr.io/mr-karan/doggo:latest

按照官方文档,可通过输入以下命令返回结果:

docker run --rm ghcr.io/mr-karan/doggo:latest example.com网络调试终极武器,10分钟快速部署开源工具Doggo,解锁调试新技能

解释:

docker run --rm: 运行一个临时 Docker 容器。--rm 参数意味着在容器停止后,Docker 会自动删除容器,避免占用系统资源。
ghcr.io/mr-karan/doggo:latest: 这是从 GitHub Container Registry 拉取的 Doggo 镜像,latest 表示使用最新版本的 Doggo。
example.com: 这是你要查询的域名,Doggo 会对这个域名执行 DNS 查询,并返回结果。

执行这个命令后:

拉取镜像:如果你之前没有拉取过这个镜像,Docker 会从 GitHub Container Registry 下载最新的 Doggo 镜像。
DNS 查询:Doggo 将会对 example.com 进行默认的 DNS 查询(查询 A 记录),并将结果显示在终端中。
容器自动删除:查询完成后,容器会自动停止并删除。

我觉得这样十分麻烦,如果能像python一般,输入/bin/bash就好了,但doggo并非活动容器。

网络调试终极武器,10分钟快速部署开源工具Doggo,解锁调试新技能

我们可以通过输入以下命令解决:

docker run -it --entrypoint /bin/sh ghcr.io/mr-karan/doggo:latest

--entrypoint /bin/sh

--entrypoint:这个选项覆盖镜像的默认入口点(ENTRYPOINT),即容器启动时默认执行的命令。通常,Docker 镜像的创建者会在镜像的 Dockerfile 中指定一个默认的 ENTRYPOINT 或 CMD(命令),这个命令会在容器启动时自动运行。

/bin/sh:这是你希望容器运行时启动的命令,在这个情况下是一个 shell 程序(通常是一个轻量级的 shell)。这意味着,当你启动这个容器时,它会直接启动一个 shell,允许你在容器中输入命令,而不是执行镜像的默认命令。

网络调试终极武器,10分钟快速部署开源工具Doggo,解锁调试新技能

使用


以我的博客站点为例。

⭕️基本 DNS 记录查询

doggo example.com网络调试终极武器,10分钟快速部署开源工具Doggo,解锁调试新技能

⭕️检查特定 DNS 服务器的解析

doggo example.com @8.8.8.8 doggo example.com @223.5.5.5 doggo example.com @114.114.114.114网络调试终极武器,10分钟快速部署开源工具Doggo,解锁调试新技能

⭕️查询 CNAME 记录

doggo example.com -t CNAME网络调试终极武器,10分钟快速部署开源工具Doggo,解锁调试新技能

⭕️测量DNS查询时间

doggo -q example.com --time @114.114.114.114 doggo -q example.com --time @223.5.5.5 doggo -q example.com --time @119.29.29.29 doggo -q example.com --time @1.1.1.1 doggo -q example.com --time @8.8.8.8网络调试终极武器,10分钟快速部署开源工具Doggo,解锁调试新技能

⭕️域名的授权 DNS 服务器是否配置正确

doggo example.com -t NS 网络调试终极武器,10分钟快速部署开源工具Doggo,解锁调试新技能

⭕️网络中的特定类型

doggo -q example.com --ipv4网络调试终极武器,10分钟快速部署开源工具Doggo,解锁调试新技能

⭕️以JSON格式输出

doggo -q example.com --json doggo -q example.com --short # 只输出结果网络调试终极武器,10分钟快速部署开源工具Doggo,解锁调试新技能

⭕️不信任环境下通过 HTTPS 进行加密查询

doggo -q example.com @https://cloudflare-dns.com/dns-query # 使用 DoH 可以增强 DNS 查询的安全性,尤其是在不信任的网络环境中,通过 HTTPS 加密 DNS 查询可以防止中间人攻击和 DNS 劫持。网络调试终极武器,10分钟快速部署开源工具Doggo,解锁调试新技能

最后


Doggo 适合那些需要现代化、灵活性高、且易于集成的 DNS 查询工具的用户。如果你希望使用命令行工具在隐私性和安全性上更进一步,特别是在 DoH 方面,Doggo 是一个很好的选择。然而,对于需要深入调试和复杂查询的场景,dig 仍然是不可或缺的工具。结合使用这两者,可以满足绝大多数 DNS 查询和调试的需求。

如果各位觉得本篇文章有所帮助,别忘了三连支持下,能点点关注就更好了!后续我还会持续分享各类教程以及有趣好玩的项目网络调试终极武器,10分钟快速部署开源工具Doggo,解锁调试新技能

感谢观看,本文完。

,

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。