Codex cứ kết nối lại hoài? Kiểm tra DNS và định tuyến Clash
Các lỗi của Codex như Reconnecting..., stream disconnected before completion, và error sending request có thể liên quan đến sự can thiệp của DNS hoặc định tuyến Clash không đúng. Hướng dẫn này giải thích cách điều tra khả năng đó, áp dụng một cải tiến Clash Verge Rev có mục tiêu, và xác minh kết quả.
Báo cáo từ cộng đồng thực sự cho thấy gì
Người dùng Reddit đã báo cáo các tác vụ bị gián đoạn nhắm tới chatgpt.com/backend-api/codex/responses, các lần thử kết nối lại lặp đi lặp lại, và lỗi nội dung phản hồi. Những báo cáo này chỉ xác lập triệu chứng, không phải chẩn đoán DNS. Yêu cầu bị gián đoạn, vòng lặp kết nối lại
Một cuộc thảo luận riêng mô tả các lỗi trong quá trình nén gọn ngữ cảnh từ xa. Một người bình luận đề xuất kiểm tra proxy, nhưng cuộc thảo luận không xác lập được nguyên nhân đã được xác minh. Thảo luận về nén gọn
Các báo cáo trên X cho thấy những câu hỏi tương tự: một bài đăng ngày 9 tháng 9 mô tả các lỗi luồng liên tục, trong khi một bài đăng ngày 6 tháng 9 báo cáo SSE timeout khi nén gọn từ xa. Không bài nào đưa ra so sánh DNS. Đây là những ví dụ hữu ích về vấn đề của người dùng, nhưng chúng không xác lập một nguyên nhân chung. Báo cáo luồng trên X, Báo cáo nén gọn trên X
| Triệu chứng | Cần điều tra gì |
|---|---|
| Timeout ngay lập tức kèm lỗi trình phân giải | DNS, khả năng tiếp cận nút, và việc lưu lượng có đi vào Clash hay không |
| ChatGPT hoạt động trong trình duyệt nhưng Codex thất bại | Khác biệt về proxy, DNS, chứng chỉ, và egress |
| Đầu ra bắt đầu rồi luồng bị ngắt | Kết nối kéo dài, thay đổi mạng, và lỗi dịch vụ |
| Chỉ các cuộc trò chuyện dài hoặc nén gọn thất bại | So sánh với một tác vụ mới nhỏ; điều tra phiên và lỗi máy chủ |
| HTTP 401, 403, 429, hoặc 5xx | Kiểm tra nguồn gốc và nội dung phản hồi để tìm xác thực, chính sách, giới hạn, hoặc lỗi dịch vụ |
Kiểm tra trạng thái dịch vụ OpenAI và ghi lại thời điểm cùng phiên bản client. Với các cuộc trò chuyện bị kẹt, OpenAI cũng khuyến nghị kiểm tra các phê duyệt đang chờ và thử một cuộc trò chuyện mới nhỏ hơn, tập trung hơn. Phiên bản desktop và CLI có thể khác nhau. Khắc phục sự cố chính thức
Một trường hợp cục bộ: câu trả lời DNS bất thường đã kích hoạt DIRECT
Trong một cuộc điều tra macOS được ghi lại sử dụng Clash Verge Rev và Mihomo, các nút proxy vẫn có thể truy cập được, nhưng chatgpt.com khớp với quy tắc GeoIP/CN và cố gắng thực hiện một kết nối trực tiếp dẫn đến timeout. Việc so sánh với DNS được mã hóa đi qua proxy cho thấy một câu trả lời bất thường trên đường phân giải cục bộ.
Request to chatgpt.com
→ anomalous DNS answer
→ no earlier matching OpenAI domain rule
→ GeoIP selects DIRECT
→ connection times out and Codex retries
Có hai vấn đề cấu hình cần xử lý: đường phân giải và quyết định định tuyến. Trường hợp được ghi lại này không phải là một mốc chuẩn hay bằng chứng rằng các lỗi Codex khác có cùng nguyên nhân. Chỉ một câu trả lời bất thường cũng không thể xác định trung gian chịu trách nhiệm hay chứng minh cụ thể việc đầu độc cache DNS.
Chẩn đoán trước khi thay đổi cấu hình
Kiểm tra nhật ký kết nối
Tìm tên máy chủ thực tế trong lỗi, bao gồm chatgpt.com hoặc openai.com. Ghi lại quy tắc được khớp, chuỗi kết nối, và lỗi tại thời điểm thất bại. Một kết nối lẽ ra phải dùng proxy nhưng lại chọn DIRECT thì cần xem lại thứ tự quy tắc. Mihomo đánh giá các quy tắc định tuyến từ trên xuống dưới. Tài liệu định tuyến
Nếu không thấy kết nối khớp nào, trước tiên hãy xác định liệu client đó có dùng Clash hay không. Việc trình duyệt hoạt động không chứng minh được đường đi được một tiến trình khác sử dụng.
So sánh các đường phân giải
Trên macOS, kiểm tra bộ phân giải hệ thống và câu trả lời hiện tại:
scutil --dns
dscacheutil -q host -a name chatgpt.com
Với so sánh được mã hóa, thay 7890 bằng cổng HTTP/mixed của Clash của bạn:
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'
Yêu cầu sử dụng giao diện DNS JSON của Cloudflare. Kiểm tra bảng điều khiển kết nối: một proxy cục bộ được khai báo rõ ràng đảm bảo đi vào Clash, nhưng các quy tắc của Clash vẫn quyết định đường thoát cuối cùng.
Chỉ khác nhau về địa chỉ IP không phải là bằng chứng của sự can thiệp. Việc lựa chọn CDN, bộ nhớ đệm, họ địa chỉ, và Fake-IP có thể giải thích sự khác biệt. Một địa chỉ tổng hợp từ dải Fake-IP của Clash không tự thân đáng ngờ. Hãy đối chiếu một câu trả lời bất thường với tuyến đi sai và lỗi, rồi so sánh với một đường mạng đã được xác minh khác. Với TUN được bật, ngay cả dig @resolver cũng có thể bị chặn; nó không tự động là một kiểm tra upstream độc lập.
Áp dụng một cải tiến Clash Verge Rev có mục tiêu
Mẫu này yêu cầu Clash Verge Rev với Mihomo, một subscription hiện có, và một nút proxy đang hoạt động. Đây là một Script của subscription, không phải một profile độc lập hoàn chỉnh. Sao lưu cấu hình hiện tại trước. Nếu bạn đã dùng một script, hãy tích hợp thay đổi vào hàm main(config) hiện có của nó. Kiểm tra cấu hình chạy cuối cùng sau tất cả các bước cải tiến. Tài liệu Script của Clash Verge Rev
Đặt CODEX_PROXY_GROUP thành một nhóm hiện có và chọn một node proxy đang hoạt động trong nhóm đó. Đặt NODE_DNS thành một trình phân giải DoH hoạt động trước khi proxy kết nối và phân giải đúng tên miền của node. Ví dụ AliDNS chỉ nhằm mục đích xác thực trên mạng ở Trung Quốc đại lục; hãy thay thế nó khi không phù hợp. Nó không được dùng để phân giải các miền AI bên dưới.
// 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;
}
Script sẽ thêm chính sách DNS theo miền và chèn các quy tắc proxy lên trước, đồng thời vẫn giữ các quy tắc và chính sách miền khác. Nó thay đổi việc phân giải tên miền của node. Bốn hậu tố miền là phạm vi khởi đầu, không phải danh sách đầy đủ mọi tính năng Codex, nhà cung cấp tùy chỉnh, dịch vụ MCP hay lượt tải tác vụ.
Mihomo hỗ trợ nameserver-policy theo miền và một hậu tố proxy rõ ràng trên địa chỉ máy chủ DNS. Việc phân giải node cần một đường đi độc lập để tránh phụ thuộc vòng. Tài liệu tham chiếu cấu hình DNS
Script được nhắm mục tiêu vẫn giữ các cài đặt dự phòng hiện có. Hãy xem xét riêng các phụ thuộc DNS rộng hơn trước khi thay thế chúng. Đồng thời kiểm tra các ánh xạ hosts cũ hoặc các chính sách cụ thể hơn đang xung đột.
Kiểm tra TUN riêng biệt
Đối với các tiến trình không dùng system proxy, hãy bật TUN trong Clash Verge Rev và xác minh rằng nó đang chạy. Hợp nhất các trường sau vào đối tượng TUN hiện có của bạn, đồng thời giữ nguyên các cài đặt khác:
tun:
enable: true
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
- tcp://any:53
Những thiết lập này bao gồm DNS UDP và TCP trên cổng 53. Mihomo ghi nhận các hạn chế đối với DNS hướng LAN trên macOS và Windows; DNS mã hóa do ứng dụng quản lý cũng nằm ngoài các quy tắc cổng 53 này. Hãy xác minh hành vi của resolver và giao diện thay vì cho rằng công tắc này bao phủ mọi yêu cầu. Tài liệu tham chiếu TUN
Xác minh cấu hình, định tuyến và Codex riêng biệt
Trước hết hãy kiểm tra cấu hình cuối cùng để tìm lỗi, tham chiếu nhóm và thứ tự quy tắc. Nếu có sẵn CLI của Mihomo, mihomo -t -f <final-config-path> sẽ kiểm tra cấu hình có được phân tích cú pháp hay không. Nó không chứng minh được khả năng kết nối.
Tiếp theo hãy kiểm tra định tuyến kết nối thực tế và chạy một probe HTTPS có xác minh chứng chỉ qua cổng cục bộ thực của bạn:
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/
Phản hồi từ dịch vụ dự định sau khi xác minh chứng chỉ thành công sẽ thiết lập một trao đổi HTTP cho probe này. Mã 401 hoặc 403 vẫn có thể chặn truy cập. Nó không chứng minh rằng một yêu cầu Codex đã xác thực hoạt động, và việc vô hiệu hóa xác minh chứng chỉ sẽ làm mất hiệu lực kiểm tra này.
Cuối cùng, hãy hoàn thành một tác vụ nhỏ trong client vốn trước đây đã thất bại. Một CLI đã cài đặt và đã xác thực có thể chạy kiểm tra tùy chọn sau, kiểm tra này sẽ gửi một yêu cầu model thực và sử dụng hạn ngạch tài khoản:
codex exec --skip-git-repo-check --sandbox read-only \
'Reply with exactly: PONG. Do not use tools.'
Một lần thành công của CLI chỉ xác minh yêu cầu CLI đó; hãy kiểm tra riêng ứng dụng desktop nếu lỗi xảy ra ở đó. Kiểm tra lại sau khi cập nhật gói thuê bao, thay đổi mạng và ngủ/thức. Các lớp cấu hình về sau hoặc nhóm được đổi tên vẫn có thể làm hỏng một cải tiến.
Câu hỏi thường gặp
Đổi DNS hệ thống thành 8.8.8.8 có đủ không?
Không nhất thiết. Chỉ một địa chỉ resolver thôi thì chưa thiết lập được mã hóa, định tuyến proxy hoặc khả năng truy cập. Hãy xác minh resolver, transport và đường thoát cùng nhau.
Tại sao Codex lại thất bại khi Clash đang chạy?
Tiến trình có thể bỏ qua proxy, khớp với một quy tắc direct, hoặc phụ thuộc vào DNS của node không khả dụng. Vấn đề cũng có thể không liên quan đến DNS. Hãy xác định kết nối thực tế trước khi thay đổi nhiều cài đặt cùng lúc.
Nếu nó vẫn bị ngắt kết nối thì sao?
Nếu DNS, TLS và định tuyến đang hoạt động, hãy điều tra trạng thái dịch vụ, kích thước cuộc hội thoại, phiên bản client, độ ổn định kết nối của node và phần nội dung lỗi chính xác. OpenAI có tài liệu về vị trí phản hồi và log; hãy xem log để tìm bí mật trước khi chia sẻ. Khắc phục sự cố và log
Làm sao để hoàn tác thay đổi?
Tắt Script đã thêm và khôi phục profile đã sao lưu, cài đặt TUN và mọi cài đặt DNS hệ thống mà bạn đã thay đổi. Một kiến trúc proxy-providers riêng biệt có thể về sau cô lập các subscription node khỏi DNS cục bộ và các quy tắc, nhưng không bắt buộc cho bản sửa lỗi nhắm mục tiêu này.
Để xem các bước cài đặt và import, hãy xem Cài đặt Clash Verge. Đối với các lỗi khác, hãy xem Khắc phục sự cố Clash. Bạn có thể dùng quy trình chẩn đoán này với một subscription tương thích sẵn có; việc mua thêm một dịch vụ khác không phải là điều kiện tiên quyết để kiểm tra DNS.