安裝¶
ShadowDNS 提供兩種安裝方式:從原始碼編譯,或在 Debian/Ubuntu 上以 .deb 套件安裝(內含 systemd service、logrotate 設定與 shell completion)。
從原始碼編譯¶
前置條件:Go 1.26+。
Binary 產出於 bin/shadowdns-<GOOS>-<GOARCH>。如需在 macOS 上交叉編譯 linux/amd64 的部署用 binary:
.deb 套件安裝¶
建置套件¶
安裝¶
套件安裝內容¶
| 路徑 | 內容 |
|---|---|
/usr/bin/shadowdns |
主程式 |
/lib/systemd/system/shadowdns.service |
systemd service unit |
/etc/logrotate.d/shadowdns |
logrotate 設定(每日輪替 /var/log/shadowdns/*.log,postrotate 送 SIGUSR1 讓 daemon 重開 log 檔) |
/etc/shadowdns/named.conf.example |
named.conf 範例 |
/etc/shadowdns/shadowdns.yaml.example |
shadowdns.yaml 範例 |
/usr/share/bash-completion/completions/shadowdns |
bash completion |
/usr/share/zsh/vendor-completions/_shadowdns |
zsh completion |
/usr/share/fish/vendor_completions.d/shadowdns.fish |
fish completion |
安裝時的 postinstall script 會自動:
- 建立
shadowdns系統使用者與群組(如不存在) - 建立
/var/log/shadowdnslog 目錄(ownershadowdns:shadowdns,mode 0750) - 執行
systemctl daemon-reload
systemd 服務¶
套件附帶的 service unit 以下列參數啟動:
/usr/bin/shadowdns \
--named-conf /etc/shadowdns/named.conf \
--config /etc/shadowdns/shadowdns.yaml \
--log-file /var/log/shadowdns/shadowdns.log
因此啟用服務前,請先把設定檔放到 /etc/shadowdns/(可從同目錄的 .example 檔案複製修改):
sudo cp /etc/shadowdns/named.conf.example /etc/shadowdns/named.conf
sudo cp /etc/shadowdns/shadowdns.yaml.example /etc/shadowdns/shadowdns.yaml
# 編輯兩個檔案以符合你的環境後:
sudo systemctl enable --now shadowdns
Service unit 的安全強化重點:
- 以非特權使用者
shadowdns執行,透過AmbientCapabilities=CAP_NET_BIND_SERVICE綁定 53 port ProtectSystem=strict沙箱,僅/var/log/shadowdns可寫RuntimeDirectory=shadowdns於每次啟動建立/run/shadowdns,供預設的pid-file "/var/run/shadowdns/pid"使用ExecReload對應 SIGHUP,因此systemctl reload shadowdns即可熱重載設定
驗證安裝¶
應用層 log 位於 /var/log/shadowdns/shadowdns.log。