Skip to content

疑難排解

依症狀執行的 runbook

需要一條從 -t、socket、journal、DNS、REALITY、Controller、Aster state 到 UDP 的實際排查順序,請使用故障排查手冊

找不到設定或讀到錯誤檔案

先顯式指定:

sh
aster-core -d /absolute/home -f /absolute/config.yaml -t

相對 -f 以目前工作目錄解析,不是以 -d 解析。檢查:

sh
pwd
ls -l /absolute/config.yaml

若未指定 -f,才會讀 <home>/config.yaml

path is not subpath of home directory or SAFE_PATHS

設定引用的 certificate、provider 或 store 位於 home 外。

首選:

  1. 把檔案移到 home directory。
  2. 或將可信根目錄加入 SAFE_PATHS

不要為了解決單一 path 就長期設定:

sh
SKIP_SAFE_PATH_CHECK=true

Aster Admin 回傳 404

可能原因:

  • 沒有 aster block。
  • Controller 是明文 TCP 且綁定非 loopback。
  • Route/host 指到錯誤 Controller。
  • Managed listener 初始化失敗。

先確認:

yaml
external-controller: 127.0.0.1:9090
aster:
  secret: "at-least-32-bytes..."

再從同一 host:

sh
curl -v \
  -H "Authorization: Bearer $ASTER_TOKEN" \
  http://127.0.0.1:9090/api/admin/status

Aster Admin 回傳 401

  • 使用了 Controller secret,而不是 Aster secret。
  • Bearer 大小寫或空格錯誤。
  • Secret 有複製換行。

正確格式:

http
Authorization: Bearer actual-aster-secret

Aster Admin 回傳 403

Same-origin 失敗。檢查:

  • Browser Origin 是否等於 request scheme/host。
  • Reverse proxy 是否正確覆寫 Host
  • X-Forwarded-Proto 是否為 https
  • Request 是否帶 Sec-Fetch-Site: cross-site

面板建議透過同 origin backend/BFF,不要讓 browser 直接跨站呼叫。

Mutation 回傳 409

Revision 已過期:

  1. 重新 GET /api/admin/inbounds
  2. 重新 GET user。
  3. 比較另一個管理者的變更。
  4. 使用新 revision 重新提交。

不要只把 revision 加一後重試。

Subscription 回傳 404

檢查:

  • public-base-url 是否設定。
  • User 是否 enabled。
  • Token 是否已 rotate。
  • Listener 是否仍在 managed-listeners
  • Listener 是否有可判定的 port。
  • VLESS/AnyTLS security 是否可輸出。
  • 是否用了 ShadowTLS、ResTLS、JLS 或 advanced XHTTP。

Store 無法載入

常見原因:

  • Parent directory 權限過寬。
  • State file 不是 0600
  • Owner 錯誤。
  • 檔案是 symlink。
  • JSON 損壞。
  • Primary 與 backup 都無效。
  • State version 不支援。

不要立刻刪除兩份 state。先離線備份:

sh
cp -a aster-state.json aster-state.json.forensics
cp -a aster-state.json.bak aster-state.json.bak.forensics

再檢查 log 判斷哪份有效。State 內有 credentials,forensics 檔同樣要保護。

Docker publish port 無法連線

Bridge mode 需要:

yaml
allow-lan: true
bind-address: "*"

並確認:

sh
docker port aster-core
docker logs aster-core

Host network 與 Docker Desktop 行為不同;不要假設 --network host 跨平台一致。

TUN 無法建立

檢查:

  • Binary 是否帶 with_gvisor
  • /dev/net/tun 是否存在。
  • Container 是否傳入 device。
  • 是否有 CAP_NET_ADMIN
  • TUN name 是否衝突。
  • Auto-route table/rule 是否衝突。
  • 另一個 VPN 是否已接管 route。
sh
aster-core -v
ip tuntap
ip rule
ip route show table all

Iptables 與 TUN 衝突

自動 iptables management 與 TUN 不能同時啟用。決定由誰負責透明攔截:

  • TUN auto-route/auto-redirect,或
  • External iptables/TProxy/Redir。

不要同時讓兩者修改相同流量。

Proxy group relay 無法解析

relay 已移除。把 chain 移到 outbound:

yaml
proxies:
  - name: hop-2
    type: vless
    dialer-proxy: hop-1

SIGHUP 沒讀到新內容

若啟動方式是:

sh
aster-core --config '<base64>'
aster-core -f -

SIGHUP 只會重新套用原始 bytes。要從磁碟重讀,使用正常 file mode。

Provider 或 geodata 下載失敗

檢查:

  • System time。
  • CA bundle。
  • DNS。
  • Proxy chain 是否 circular。
  • Safe path。
  • URL/ETag。
  • 執行環境是否可連 GitHub/API。

離線環境應預先放入 provider/geodata,不要依賴首次啟動下載。

Windows named pipe

Pipe 必須以:

text
\\.\pipe\

開頭。自訂 ACL 使用 LISTEN_NAMEDPIPE_SDDL 前,先理解 SDDL;過寬 ACL 會讓 Controller 暴露給其他 local users。

還是無法定位

收集:

  • aster-core -v
  • 作業系統與架構
  • 已去除 secrets 的最小 config
  • -t 完整輸出
  • Runtime log
  • 問題是否只在 TCP、UDP、DNS、IPv4、IPv6 或特定 listener

不要公開:

  • UUID/password
  • Private keys
  • Aster/Controller secrets
  • Subscription URLs/tokens
  • 完整 state file