侧边栏壁纸
博主头像
是羊刀仙啊博主等级

闲不下来!

  • 累计撰写 91 篇文章
  • 累计创建 33 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

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

羊刀仙
2024-08-19 / 0 评论 / 0 点赞 / 46 阅读 / 6094 字
温馨提示:
本文最后更新于 2024-08-19,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

大家好,我是羊刀仙。

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

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

DNS查询时间.png
doggo 在日常中主要用于以下几个方面:

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

项目特点

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

部署

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

NAS

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

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

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

首先是服务器

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

curl -sS https://raw.githubusercontent.com/mr-karan/doggo/main/install.sh | sh

安装.png

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

命令.png

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

传输选项:

使用 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

举例子.png

部署于NAS中

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

登入NAS后输入以下命令:

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

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

docker run --rm ghcr.io/mr-karan/doggo:latest example.com

NAS部署.png

解释:

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并非活动容器。

进入镜像.png

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

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,允许你在容器中输入命令,而不是执行镜像的默认命令。

OK了.png

使用

以我的博客站点为例。

基本 DNS 记录查询

doggo example.com

基本DNS查询.png

检查特定 DNS 服务器的解析

doggo example.com @8.8.8.8
doggo example.com @223.5.5.5
doggo example.com @114.114.114.114

特定DNS解析.png

查询 CNAME 记录

doggo example.com -t CNAME

cname.png

测量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

DNS查询时间.png

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

doggo example.com -t NS

NS.png

网络中的特定类型

doggo -q example.com --ipv4

ipv4.png

以JSON格式输出

doggo -q example.com --json
doggo -q example.com --short # 只输出结果

json.png

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

doggo -q example.com @https://cloudflare-dns.com/dns-query

# 使用 DoH 可以增强 DNS 查询的安全性,尤其是在不信任的网络环境中,通过 HTTPS 加密 DNS 查询可以防止中间人攻击和 DNS 劫持。

https.png

最后

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

本文完。

0

评论区