Codex 一直重新連線?檢查 DNS 與 Clash 路由

最後更新:2026-09-10

Codex 錯誤如 Reconnecting...stream disconnected before completionerror sending request,可能涉及 DNS 干擾或 Clash 路由不正確。本指南說明如何調查這種可能性、套用針對性的 Clash Verge Rev 增強設定,並驗證結果。

社群回報實際顯示了什麼

Reddit 使用者回報了針對 chatgpt.com/backend-api/codex/responses 的任務中斷、反覆重新連線嘗試,以及回應主體錯誤。這些回報證實的是症狀,不是 DNS 診斷。中斷的請求重新連線迴圈

另一則討論描述了遠端內容壓縮期間的失敗。有留言者建議調查代理,但該討論並未建立經驗證的原因。壓縮討論

X 上的回報也提出了類似問題:9 月 9 日的一則貼文描述持續性的串流失敗,而 9 月 6 日的一則貼文回報遠端壓縮期間出現 SSE 閒置逾時。兩者都未提供 DNS 比較。這些可作為使用者問題的有用例子,但不足以證明有共同原因。X 串流回報X 壓縮回報

症狀 應調查項目
立即逾時並伴隨解析器錯誤 DNS、節點可達性,以及流量是否進入 Clash
ChatGPT 在瀏覽器中可用,但 Codex 失敗 代理、DNS、憑證與出口之間的差異
輸出已開始,之後串流中斷 長連線、網路變化與服務錯誤
只有長對話或壓縮失敗 與新的小型任務比較;調查工作階段與伺服器錯誤
HTTP 401、403、429 或 5xx 檢查回應來源與主體,以確認驗證、政策、限制或服務故障

請檢查 OpenAI 服務狀態 並記錄時間與用戶端版本。對於卡住的對話,OpenAI 也建議檢查是否有待核准項目,並嘗試較小、較聚焦的新對話。桌面版與 CLI 版本可能不同。官方疑難排解

一個本機案例:非預期的 DNS 回應觸發了 DIRECT

在一項使用 Clash Verge Rev 與 Mihomo 的 macOS 調查紀錄中,代理節點可達,但 chatgpt.com 符合 GeoIP/CN 規則,並嘗試直接連線且逾時。與透過代理到達的加密 DNS 進行比較後,顯示本機解析路徑上出現了異常回應。

Request to chatgpt.com
  → anomalous DNS answer
  → no earlier matching OpenAI domain rule
  → GeoIP selects DIRECT
  → connection times out and Codex retries

需要處理的設定問題有兩個:解析路徑與路由決策。這個紀錄案例不是基準,也不能證明其他 Codex 失敗具有相同原因。單憑異常回應也無法識別負責的中介者,或特別證明是 DNS 快取污染。

變更設定前先進行診斷

檢查連線日誌

搜尋錯誤中的實際主機名稱,包括 chatgpt.comopenai.com。記錄失敗當下所符合的規則、連線鏈,以及錯誤內容。若應使用代理的連線卻選擇了 DIRECT,就值得檢查規則順序。Mihomo 會由上而下評估路由規則。路由文件

如果沒有出現任何相符的連線,請先確認該用戶端是否使用 Clash。瀏覽器可正常運作,並不能證明另一個獨立程序所使用的路徑。

比較解析路徑

在 macOS 上,檢查系統解析器及其目前的回應:

scutil --dns
dscacheutil -q host -a name chatgpt.com

若要進行加密比較,請將 7890 替換為你的 Clash HTTP/mixed 連接埠:

curl --noproxy '' --proxy http://127.0.0.1:7890 \
  --connect-timeout 10 --max-time 20 \
  -H 'accept: application/dns-json' \
  'https://1.1.1.1/dns-query?name=chatgpt.com&type=A'

此請求使用 Cloudflare 的 DNS JSON 介面。請檢查連線面板:明確指定本機代理可保證流量進入 Clash,但最終出口仍由 Clash 規則決定。

僅僅 IP 位址不同,並不能證明存在干擾。CDN 選路、快取、位址家族與 Fake-IP 都可能解釋差異。來自 Clash Fake-IP 範圍的合成位址,本身並不一定可疑。請將異常回應與錯誤路由及失敗情況對照,再與另一條已驗證的網路路徑比較。啟用 TUN 時,連 dig @resolver 也可能被攔截;它不會自動成為獨立的上游測試。

套用針對性的 Clash Verge Rev 增強設定

此範本需要搭配使用 Mihomo 的 Clash Verge Rev、既有訂閱,以及可正常運作的代理節點。這是訂閱 Script,不是完整的獨立設定檔。請先備份目前設定。若你已經使用 script,請將變更整合到現有的 main(config) 函式中。請在所有增強步驟完成後,檢查最終執行階段設定。Clash Verge Rev Script 文件

CODEX_PROXY_GROUP 設為現有的群組,並在該群組中選取可正常運作的代理節點。將 NODE_DNS 設為在代理連線前即可運作,且能正確解析節點主機名稱的 DoH 解析器。AliDNS 範例是為了在中國大陸網路上驗證而提供;若不適用請替換。它不會用來解析下方的 AI 網域。

// Clash Verge Rev subscription Script. Use with an existing Mihomo profile.
// Replace this with the exact name of a working proxy group in that profile.
const CODEX_PROXY_GROUP = "REPLACE_WITH_EXISTING_PROXY_GROUP";

// Example bootstrap resolver for a mainland-China network. Verify reachability
// and node-hostname answers on your network, or replace with your trusted DoH.
// It must work BEFORE the proxy is established. It does not resolve AI domains.
const NODE_DNS = ["https://223.5.5.5/dns-query#DIRECT"];

function main(config) {
  const groups = config["proxy-groups"] || [];
  if (!groups.some((group) => group.name === CODEX_PROXY_GROUP)) {
    throw new Error("Set CODEX_PROXY_GROUP to an existing working proxy group.");
  }
  if (/[#&,\r\n]/.test(CODEX_PROXY_GROUP)) {
    throw new Error("Use a proxy group name without #, &, commas or newlines.");
  }

  const domains = ["chatgpt.com", "openai.com", "oaistatic.com", "oaiusercontent.com"];
  const doh = [
    "https://1.1.1.1/dns-query#" + CODEX_PROXY_GROUP,
    "https://8.8.8.8/dns-query#" + CODEX_PROXY_GROUP,
  ];
  const dns = config.dns || {};
  const policy = Object.assign({}, dns["nameserver-policy"] || {});
  domains.forEach((domain) => { policy["+." + domain] = doh.slice(); });
  dns.enable = true;
  dns["nameserver-policy"] = policy;
  dns["proxy-server-nameserver"] = NODE_DNS.slice();
  if (!Array.isArray(dns.nameserver) || dns.nameserver.length === 0) {
    dns.nameserver = NODE_DNS.slice();
  }
  config.dns = dns;

  const oldRules = Array.isArray(config.rules) ? config.rules : [];
  const aiRules = domains.map((domain) =>
    "DOMAIN-SUFFIX," + domain + "," + CODEX_PROXY_GROUP
  );
  config.rules = aiRules.concat(oldRules.filter((rule) => !aiRules.includes(rule)));
  return config;
}

此腳本會新增特定網域的 DNS 政策,並將代理規則前置,同時保留其他規則與網域政策。它會變更節點主機名稱的解析方式。這 4 個網域後綴是起始範圍,並非涵蓋每個 Codex 功能、自訂提供者、MCP 服務或任務下載的完整清單。

Mihomo 支援針對網域的 nameserver-policy,以及在 DNS 伺服器位址上明確指定代理後綴。節點解析需要獨立路徑,以避免循環相依。DNS 設定參考

此目標腳本會保留既有的 fallback 設定。在替換之前,請另外檢視更廣泛的 DNS 相依性。也請檢查是否有過時的 hosts 對應或彼此衝突、且更具體的政策。

另外檢查 TUN

對於未使用系統代理的程序,請在 Clash Verge Rev 中啟用 TUN,並確認其正在執行。將下列欄位合併到你現有的 TUN 物件中,並保留其餘設定:

tun:
  enable: true
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53
    - tcp://any:53

這些設定涵蓋 53 埠上的 UDP 與 TCP DNS。Mihomo 文件說明了 macOS 與 Windows 上導向 LAN 的 DNS 限制;由應用程式管理的加密 DNS 也不在這些 53 埠規則的涵蓋範圍內。請驗證解析器與介面行為,而不要假設此切換開關涵蓋了每一個請求。TUN 參考

分別驗證設定、路由與 Codex

首先檢查最終設定是否有錯誤、群組參照是否正確,以及規則順序是否妥當。若可使用 Mihomo CLI,mihomo -t -f <final-config-path> 可檢查設定是否能成功解析。這不代表連線能力已獲得證明。

接著檢查實際的連線路由,並透過你實際使用的本機連接埠執行一個會驗證憑證的 HTTPS 探測:

curl --noproxy '' --proxy http://127.0.0.1:7890 \
  --connect-timeout 10 --max-time 20 \
  -o /dev/null -sS \
  -w 'HTTP=%{http_code} TLS=%{time_appconnect}s TOTAL=%{time_total}s\n' \
  https://chatgpt.com/

若在憑證驗證成功後收到預期服務的回應,即可證明此探測已建立 HTTP 交換。401 或 403 仍可能阻擋存取。這不代表已驗證通過驗證的 Codex 請求可正常運作,而且若停用憑證驗證,此檢查就會失效。

最後,在原先失敗的用戶端中完成一個小型任務。若已安裝並完成驗證的 CLI 可用,還可以執行下列選用檢查;這會發送真實的模型請求並使用帳戶額度:

codex exec --skip-git-repo-check --sandbox read-only \
  'Reply with exactly: PONG. Do not use tools.'

CLI 成功只表示該 CLI 請求成功;若失敗發生在桌面應用程式,請另外測試桌面應用程式。在訂閱更新、網路變更,以及睡眠/喚醒之後請重新檢查。後續的設定層或重新命名的群組仍可能讓某項增強功能失效。

常見問題

將系統 DNS 改成 8.8.8.8 就足夠了嗎?

不一定。單有解析器位址,並不能建立加密、代理路由或可達性。請一併驗證解析器、傳輸與出口路徑。

為什麼 Codex 會在 Clash 執行中仍然失敗?

該程序可能繞過代理、符合直連規則,或依賴無法使用的節點 DNS。問題也可能與 DNS 無關。在一次變更多項設定之前,先找出實際的連線路徑。

如果它仍然斷線怎麼辦?

如果 DNS、TLS 與路由都正常運作,請調查服務狀態、對話大小、用戶端版本、節點連線穩定性,以及精確的錯誤內容。OpenAI 文件說明了回饋與日誌位置;分享前請先檢查日誌中是否包含機密資訊。疑難排解與日誌

我要如何還原變更?

停用新增的 Script,並還原已備份的設定檔、TUN 設定,以及你曾變更的任何系統 DNS 設定。之後可用獨立的 proxy-providers 架構,將節點訂閱與本機 DNS 及規則隔離,但這不是此針對性修正的必要條件。

安裝與匯入步驟請參閱 Clash Verge 設定。其他失敗情況請參閱 Clash 疑難排解。你可以搭配現有且相容的訂閱使用這套診斷流程;測試 DNS 並不以購買另一項服務為前提。