ChatGPT from restricted networks shows several distinct failures: stuck login, blank page, captcha loops, or unsupported_country—and they are different problems with different fixes. Separate "proxy not on," "bad region," and DNS/IP risk before jumping to Tun, or you will chase the wrong layer for an hour.
The web app follows the system proxy in most browsers. For the CLI/API path, see Codex; for the whole toolkit approach, Tun & AI.
The one check that decides everything
Before any fix, confirm the path actually reaches the site. With the proxy on, run:
curl -sI -x http://127.0.0.1:7897 https://chatgpt.com | grep -iE "^HTTP|cf-mitigated|cf-ray"
A cf-mitigated: challenge header means the path works and you were handed a verification—this is a Cloudflare loop, not a region block (handle it in human verification loops). A 403 with unsupported_country_region_territory is a region problem. No response at all is a path problem. The header tells you which section below to read.
Triage by symptom
| Symptom | Layer | First move |
|---|---|---|
| unsupported_country (403) | Exit region unsupported | Change region node (latency, provider) |
| Blank page / endless spin | Path or DNS | Connections present? (system proxy, sites blocked) then DNS |
| Captcha / "verify you are human" loops | Exit IP reputation | Cleaner node IP, pin the challenge host |
| Login succeeds, then logged out | Exit IP churn | Disable auto-switching for chatgpt.com |
unsupported_country vs Access denied
These two are easy to confuse and need opposite responses. unsupported_country_region_territory means the exit node sits in a region OpenAI does not serve—switch to a supported-region node and it clears. Access denied / Error 1020 means the exit IP itself is blocklisted—switching regions does not help, you need a different, cleaner node in any supported region. When both appear, region comes first: clear the 403, then deal with the IP if a 1020 remains. Account-side "unusual activity" prompts belong to exit-IP risk control.
Acceptance
- System proxy on; chatgpt.com shows hits in Connections.
- Login/chat works without a region reject.
- Still weird: try a private window (rules out stale cookies/extensions); for mobile, mobile or LAN share.
Share one stack with Cursor/Claude
Browser OK does not mean CLI/IDE OK. The web app uses the system proxy; the editors and terminals need their own capture—system proxy for web, Tun for editors/terminals. See Cursor, Claude Code, Gemini. Push domestic bulk traffic back out of the tunnel with DIRECT rules so the proxy hop does not slow downloads.
Apps and stop
Official apps (iOS/Android/desktop) often ignore the system proxy and need Tun to be captured. Region rejects need new nodes, not endless DNS edits—if you have swapped three nodes in three regions and still get 403, the account's region setting, not the config, is the limit. Builds: download center.