Repository navigation
[BUG] Cowork Windows: API UNREACHABLE despite working NAT — MITM proxy not binding to VM gateway (172.16.0.1), multi-IP NIC routing mismatch #25944
Description
Preflight Checklist
- I have searched existing issues and this hasn't been reported yet
- This is a single bug report (please file separate reports for different bugs)
- I am using the latest version of Claude Code
What's Wrong?
Cowork on Windows boots the VM successfully, reaches CONNECTED state, but always fails with API reachability: UNREACHABLE → ConnectionRefused. Extensive debugging over multiple sessions has identified two distinct root causes not covered by existing issues (#24962, #25136, #25155, #25205, #25474, #25513).
Environment
| Component | Details |
|---|---|
| OS | Windows 11 Pro for Workstations (Build 26200, 25H2) |
| CPU | AMD Ryzen Threadripper PRO 9955WX 16-Cores (32 threads) |
| Claude Desktop | v1.1.3189.0 |
| Subscription | Max |
| Hyper-V | Enabled |
| Virtual Machine Platform | Enabled |
| Windows Hypervisor Platform | Enabled |
Network Configuration (Unusual)
NSi HQ (Intel X710-TL):
IPv4 Address: 192.168.1.62 ← NAT picks this as ExternalSourceAddress
IPv4 Address: 192.168.2.62
IPv4 Address: 192.168.3.62
Default Gateway: 192.168.3.247 ← Gateway is on .3.x subnet!
vEthernet (cowork-vm-nat): 172.16.0.1/24 (Up)
vEthernet (Default Switch): 172.30.176.1/16 (Up)
Bluetooth: Disconnected
Ethernet 2 (Intel X710-TL #2): Disconnected
3 IP addresses on one NIC — this is a production server-class workstation configuration.
Root Cause 1: WinNAT creation silently fails (TCP NAT broken)
Problem
The HNS service creates the cowork-vm-nat network (type: NAT), but New-NetNat fails silently because Windows only allows one NAT network and the Default Switch's hidden ICS NAT conflicts.
Evidence
PS> Get-NetNat
# Returns EMPTY — no NAT rules exist
# Yet HNS network exists and VM gets IP 172.16.0.124
PS> New-NetNat -Name "CoworkNAT" -InternalIPInterfaceAddressPrefix "172.16.0.0/24"
# FAILS: "An attempt was made to create an object and the object name already existed"
# Even though Get-NetNat shows NOTHINGHidden NAT discovered
PS> Get-NetNatSession
# Shows UDP sessions through hidden NAT "NATA557FDEC-F10E-4607-9C91-277A58227833"
# BUT only UDP (Protocol 17) — NO TCP sessionsThe VM can resolve DNS (UDP 53 works through HNS NAT) but cannot make TCP connections (HTTPS/443 fails).
Workaround found
Stop-Service winnat
New-NetNat -Name "CoworkNAT" -InternalIPInterfaceAddressPrefix "172.16.0.0/24"
Start-Service winnatAfter this, Get-NetNat shows the rule as Active, and TCP NAT sessions appear:
Protocol: 6 (TCP), InternalPort: various → ExternalPort: 443
ExternalSourceAddress: 192.168.1.62
This needs to be automated by cowork-svc.exe — the service should detect when NAT creation fails and apply this workaround.
Root Cause 2: MITM proxy not listening on 172.16.0.1
Problem
Even after fixing NAT (Root Cause 1), API calls still fail with ConnectionRefused. The MITM proxy that the VM needs to connect through does not bind to the cowork-vm-nat interface.
Evidence (from admin PowerShell)
PS> netstat -an | Select-String "172.16"
TCP 172.16.0.1:139 0.0.0.0:0 LISTENING # NetBIOS only
UDP 172.16.0.1:137 *:* # NetBIOS
UDP 172.16.0.1:138 *:* # NetBIOS
UDP 172.16.0.1:1900 *:* # SSDP
UDP 172.16.0.1:51199 *:*
UDP 172.16.0.1:58874 *:*
UDP 172.16.0.1:58877 *:*No MITM proxy listening on 172.16.0.1. Only Windows system services (NetBIOS, SSDP).
PS> netstat -anb | Select-String "claude" -Context 2,0
# All Claude.exe connections are OUTBOUND on 192.168.3.62:
TCP 192.168.3.62:51982 160.79.104.10:443 ESTABLISHED [Claude.exe]
TCP 192.168.3.62:57200 34.36.57.103:443 ESTABLISHED [Claude.exe]
TCP 192.168.3.62:64160 18.97.36.9:443 ESTABLISHED [Claude.exe]Claude.exe connects out on the physical NIC but nothing listens for inbound VM connections on the cowork network.
The log confirms the proxy initializes:
OAuth token approved with MITM proxy
Spawn succeeded in 656ms
But the VM process then hits ConnectionRefused when trying to reach the API through the proxy.
Multi-IP NAT routing mismatch
NAT sessions show ExternalSourceAddress: 192.168.1.62 but the default gateway is 192.168.3.247. Response packets destined for 192.168.1.62 may not route correctly back since the gateway expects traffic from the .3.x subnet. This could cause the NAT to appear functional (sessions created) while actual TCP connections fail or reset.
Root Cause 3: cowork-svc.exe has no network listeners
PS> Get-Process cowork-svc
# PID 11904, running
PS> netstat -ano | findstr 11904
# EMPTY — no listeners, no connectionsThe Cowork service process has zero network activity. It's not listening on any port and not connected to anything. On macOS this likely works differently (perhaps vsock or a local socket), but on Windows the service appears to not be bridging the VM to the API at all.
Timeline & Log Evidence
Phase 1: yukonSilver unsupported (Jan 23 – Feb 10)
2026-01-23 10:46:36 [info] [cleanupVMBundleIfUnsupported] yukonSilver not supported (status=unsupported)
2026-01-23 10:46:38 [error] [SwiftVM] Failed to load module: Cannot find package '...\resources\@anthropic-ai\claude-swift'
Repeated at every startup. Windows Cowork was not yet released.
Phase 2: Module loads, API unreachable (Feb 11+)
2026-02-11 10:39:25 [info] [VM] Module loaded successfully
2026-02-12 09:05:41 [info] [VM] Network status: CONNECTED
2026-02-12 09:05:46 [info] [VM] API reachability: PROBABLY_UNREACHABLE
2026-02-12 09:06:14 [info] [VM] API reachability: UNREACHABLE
Phase 3: After app update to v1.1.2998+ (Feb 13)
2026-02-13 18:24:46 [info] [VM] Network status: CONNECTED
2026-02-13 18:24:51 [info] [VM] API reachability: PROBABLY_UNREACHABLE
2026-02-13 18:26:58 [info] [VM] API reachability: UNREACHABLE
Phase 4: Process spawns but API fails (Feb 13, after further updates)
2026-02-13 ... [info] Process "adoring-epic-curie" created
2026-02-13 ... [info] OAuth token approved with MITM proxy
2026-02-13 ... [info] Spawn succeeded in 656ms
... (process runs 28 minutes) ...
2026-02-13 ... [error] API Error: Unable to connect to API (ConnectionRefused)
The VM has NEVER once reached API reachability: REACHABLE across dozens of attempts.
What Should Happen
- cowork-svc.exe should detect and fix WinNAT conflicts — apply the
Stop-Service winnat→New-NetNat→Start-Service winnatworkaround when NAT creation fails - MITM proxy must bind to 172.16.0.1 (the VM gateway) — currently nothing listens there for VM connections
- Multi-IP NIC support — NAT should use the IP address that shares a subnet with the default gateway (192.168.3.62), not an arbitrary one (192.168.1.62)
- cowork-svc.exe should have active network listeners — the service currently has zero network connections
Additional Diagnostic Data
IP forwarding is enabled on the VM adapter:
PS> Get-NetIPInterface -InterfaceIndex 11 | Select ifIndex, InterfaceAlias, Forwarding
11 vEthernet (cowork-vm-nat) EnabledFirewall was disabled during testing (no improvement):
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
# No change — API still unreachableExisting related issues
- Cowork VM fails on Windows 11 Home: wrong DNS config, missing sessiondata.vhdx, no NAT #24962 — DNS config + missing sessiondata.vhdx + no NAT (Windows Home)
- [BUG] Cowork tab not showing on Windows 11 Pro x64 — "yukonSilver" marked as unsupported + CoworkVMService cannot be removed #25136 — yukonSilver marked unsupported
- [BUG] Cowork Windows - VM boots but cannot reach Claude API (Windows 10 Pro, Hyper-V) #25155 — NAT creation fails
- [BUG] Cowork API connection issue + Coworke Tab disappears on restart #25205 — Cowork tab disappears after API failure
- [BUG] Cowork VM never creates on Windows — connection timeout + macOS diagnostics running on Windows #25474 — Windows NAT networking
- [BUG] Cowork incompatible with VPN - Hyper-V NAT routing prevents VM from reaching Claude API #25513 — VPN incompatibility with Hyper-V NAT
This report differs from all of the above in that:
- NAT has been manually fixed and confirmed working (TCP + UDP sessions visible)
- The issue persists AFTER NAT fix — pinpointed to MITM proxy not binding to VM gateway
- Multi-IP NIC configuration creates additional NAT routing mismatch
- Full netstat evidence shows zero listeners on 172.16.0.1
Error Messages/Logs
API Error: Unable to connect to API (ConnectionRefused)
[VM] API reachability: UNREACHABLE
Steps to Reproduce
- Install Claude Desktop on Windows 11 Pro for Workstations with multi-IP NIC
- Enable Hyper-V, VMP, WHP
- Open Cowork tab
- VM boots to CONNECTED but API always UNREACHABLE
- Even after manually creating WinNAT rule, ConnectionRefused persists
netstatshows no process listening on 172.16.0.1
Claude Model
Sonnet (default)
Is this a regression?
Not applicable (first time Windows Cowork available)
Claude Code Version
1.1.3189
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
PowerShell
Additional Information
Hardware: AMD Ryzen Threadripper PRO 9955WX on ASUS Pro WS WRX90E-SAGE SE (server-class workstation)
Network adapter: Intel X710-TL (enterprise dual-port 10GbE) with 3 IPs on one NIC — this is a legitimate production configuration, not a misconfiguration.
Unique aspects of this report:
- Most thorough diagnostic of the Windows Cowork networking stack to date
- Identified and resolved the WinNAT creation bug (workaround provided)
- Proved the remaining issue is MITM proxy binding, not NAT/firewall/DNS
- Multi-IP NIC creates a NAT routing mismatch (ExternalSourceAddress on wrong subnet)
- Full packet-level evidence via Get-NetNatSession showing TCP vs UDP behavior
Happy to provide any additional diagnostics or test proposed fixes.
Activity
github-actions commentedon Feb 15, 2026
Found 3 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
antar4 commentedon Feb 15, 2026
Update: Root cause identified — NAT is irrelevant, hvsock MITM proxy is the actual API path
After 6+ hours of deep debugging across 4 sessions, I can now confirm this is not a NAT/routing issue. The VM does not use TCP NAT to reach the Anthropic API. Here's what's actually happening:
Architecture (confirmed via reverse engineering + network forensics)
The Cowork VM uses Hyper-V sockets (hvsock) to communicate with
cowork-svc.exeon the host. Inside the VM,sdk-daemon(Go binary) usesgoproxyas a MITM proxy for OAuth token validation. API calls follow this path:The HNS NAT network (172.16.0.0/24) is only used for DNS resolution (UDP 53). API traffic never touches NAT.
Evidence
1. Zero TCP NAT sessions — ever
2. No MITM proxy listener exists on Windows
3. cowork-svc.exe has zero network connections
4. Named pipe confirms non-TCP architecture
5. Hyper-V socket registrations exist
6. Adding NAT + forwarding does nothing
Manually created
New-NetNatrule + enabled IP forwarding onvEthernet (cowork-vm-nat)— still UNREACHABLE. Confirms API path doesn't use NAT.What works vs what doesn't
ping 172.16.0.72succeedsThe one time it worked (Feb 13)
On 2026-02-13 18:27:12, Cowork successfully spawned a process:
This was with SDK version 2.1.40 (current is 2.1.41) and followed a rootfs update. The session ran for ~28 minutes before being killed. Something about that specific boot allowed the hvsock proxy path to function. Every boot before and after has failed.
Additional confirmed issues
CSP blocks
a-api.anthropic.com(same as #25024):This fires every ~10 minutes in
claude.ai-web.log. While this appears to only affect Segment analytics, it indicates the CSPconnect-srcis missing*.anthropic.com.Network diagnostics runs macOS commands on Windows (same as #25474):
What we tried (all ineffective for API reachability)
New-NetNatrule — no effect on APIHcnCreateNetwork— no effectConclusion
The Windows MITM proxy (inside cowork-svc.exe) is not reliably forwarding API traffic from the VM to the internet. The hvsock communication works (VM reports CONNECTED), but the proxy layer that should route
api.anthropic.comrequests from the VM through the host's internet connection is broken.This cannot be fixed from the host side.
cowork-svc.exehas zero logging — no proxy logs, no hvsock connection logs, no error output. Adding diagnostic logging to the Windows proxy path would be the single most impactful improvement for debugging this.Requested fixes
a-api.anthropic.comto CSPconnect-src(same fix as [BUG] Claude Cowork "API Error: Connection error" #18006 for macOS)ipconfig,Get-NetAdapter,netsh)Current state (clean baseline for Anthropic testing)
All manual modifications have been reverted. The system is in the default state that Claude Desktop creates:
cowork-vm-nat(Type: NAT, 172.16.0.0/24) — created by cowork-svcNew-NetNatrulesEnvironment
Related issues
mojjow commentedon Feb 17, 2026
Very thorough @antar4 I'm having the same issue!
ErosEleutherios commentedon Feb 17, 2026
Excellent analysis @antar4! This may explain issues I documented in #25513 (VPN incompatibility).
I found Cowork worked intermittently with VPN - sometimes connecting, sometimes timing out. If the API path uses hvsock (not TCP NAT), that would explain why extensive routing/NAT configuration had inconsistent results.
My experience:
Your discovery that cowork-svc.exe has zero logging is critical - debugging these issues without proxy logs is impossible.
Adding my vote for:
MarshallOfSound commentedon Feb 26, 2026
We just released v1.1.4328 which should fix these networking issues some users were facing, please update and you should be able to use Cowork now 🥳
github-actions commentedon Mar 7, 2026
This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.