大家好,我是羊刀仙。
本期為大家?guī)淼氖且豢頓NS小工具:doggo,可通過Docker進行部署。
doggo是一款用 Golang 編寫的現代命令行 DNS 客戶端(類似dig)。它以簡潔明了的方式輸出信息,并支持 DoH、DoT、DoQ 和 DNSCrypt 等協(xié)議。
doggo 在日常中主要用于以下幾個方面:
快速 DNS 查詢:查看域名的 IP 地址;
DNS 服務器驗證:檢查不同 DNS 服務器的解析結果;
性能測試:比較不同 DNS 服務器的響應速度;
解析問題排查:調試 DNS 解析路徑,解決訪問問題;
隱私保護:通過 DoH 進行加密查詢。
項目特點
Doggo 以 Docker 鏡像的形式提供,托管在 GitHub Container Registry (ghcr.io) 上。它支持 x86 和 ARM 架構。
具有顏色編碼和表格格式的人性化輸出;
JSON 輸出支持,方便編寫腳本和解析;
多種傳輸協(xié)議: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
安裝完畢后,輸入doggo并
回車,可以看到很多操作指令說明。
這里先大概解釋下,具體例子放在后面演示部分。
傳輸選項:
使用 URL 類型的協(xié)議指定查詢方式:
udp:默認使用的協(xié)議
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
??部署于NAS中
NAS中因系統(tǒng)原因,部署使用與服務器有些許差異,并不能持久化運行,直接輸入doggo
命令進行操作,但也有解決辦法。
登入NAS后輸入以下命令:
docker pull ghcr.io/mr-karan/doggo:latest
按照官方文檔,可通過輸入以下命令返回結果:
docker run --rm ghcr.io/mr-karan/doggo:latest example.com
解釋:
docker run --rm: 運行一個臨時 Docker 容器。--rm 參數意味著在容器停止后,Docker 會自動刪除容器,避免占用系統(tǒng)資源。
ghcr.io/mr-karan/doggo:latest: 這是從 GitHub Container Registry 拉取的 Doggo 鏡像,latest 表示使用最新版本的 Doggo。
example.com: 這是你要查詢的域名,Doggo 會對這個域名執(zhí)行 DNS 查詢,并返回結果。
執(zhí)行這個命令后:
拉取鏡像:如果你之前沒有拉取過這個鏡像,Docker 會從 GitHub Container Registry 下載最新的 Doggo 鏡像。
DNS 查詢:Doggo 將會對 example.com 進行默認的 DNS 查詢(查詢 A 記錄),并將結果顯示在終端中。
容器自動刪除:查詢完成后,容器會自動停止并刪除。
我覺得這樣十分麻煩,如果能像python一般,輸入/bin/bash
就好了,但doggo并非活動容器。
我們可以通過輸入以下命令解決:
docker run -it --entrypoint /bin/sh ghcr.io/mr-karan/doggo:latest
--entrypoint /bin/sh
--entrypoint:這個選項覆蓋鏡像的默認入口點(ENTRYPOINT),即容器啟動時默認執(zhí)行的命令。通常,Docker 鏡像的創(chuàng)建者會在鏡像的 Dockerfile 中指定一個默認的 ENTRYPOINT 或 CMD(命令),這個命令會在容器啟動時自動運行。
/bin/sh:這是你希望容器運行時啟動的命令,在這個情況下是一個 shell 程序(通常是一個輕量級的 shell)。這意味著,當你啟動這個容器時,它會直接啟動一個 shell,允許你在容器中輸入命令,而不是執(zhí)行鏡像的默認命令。
使用
以我的博客站點為例。
??基本 DNS 記錄查詢
doggo example.com
??檢查特定 DNS 服務器的解析
doggo example.com @8.8.8.8 doggo example.com @223.5.5.5 doggo example.com @114.114.114.114
??查詢 CNAME 記錄
doggo example.com -t CNAME
??測量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 服務器是否配置正確
doggo example.com -t NS
??網絡中的特定類型
doggo -q example.com --ipv4
??以JSON格式輸出
doggo -q example.com --json doggo -q example.com --short # 只輸出結果
??不信任環(huán)境下通過 HTTPS 進行加密查詢
doggo -q example.com @https://cloudflare-dns.com/dns-query # 使用 DoH 可以增強 DNS 查詢的安全性,尤其是在不信任的網絡環(huán)境中,通過 HTTPS 加密 DNS 查詢可以防止中間人攻擊和 DNS 劫持。
最后
Doggo 適合那些需要現代化、靈活性高、且易于集成的 DNS 查詢工具的用戶。如果你希望使用命令行工具在隱私性和安全性上更進一步,特別是在 DoH 方面,Doggo 是一個很好的選擇。然而,對于需要深入調試和復雜查詢的場景,dig 仍然是不可或缺的工具。結合使用這兩者,可以滿足絕大多數 DNS 查詢和調試的需求。
如果各位覺得本篇文章有所幫助,別忘了三連支持下,能點點關注就更好了!后續(xù)我還會持續(xù)分享各類教程以及有趣好玩的項目
感謝觀看,本文完。
,