**Workaround that got browser apps (WebSockets, WebRTC video, non-443 ports) working again**
The “connect by real IP” trick works from the shell, but the browser still uses the fake DNS (198.18.0.1) and the proxy. So you have to tell Chrome itself to use the real addresses and skip the proxy for those hosts.
1. **Find every hostname the app uses.** Open the app, let it fail, then check Chrome’s log for names it couldn’t reach:
`grep -a “Failed to resolve” /tmp/chrome*.log`
Also check open connections with `ss -tnp | grep chrome`. Don’t skip WebRTC relay or TURN servers (names with “turn” or “stun”). Mine only worked once I added the video relay.
2. **Look up each host’s real IPv4 address** over DNS-over-HTTPS. Have your bot run curl against dns [dot] google, on the path /resolve?name=HOSTNAME&type=A (https, with -s).
3. **Confirm the port is open by IP:**
`timeout 8 bash -c “echo > /dev/tcp/IP/PORT” && echo OPEN`
4. **Edit the Chrome launcher** at `/usr/local/bin/box-chrome` (make a backup first):
-
Add the hosts to the existing `–proxy-bypass-list`, separated by semicolons.
-
Add a flag that maps each host to its real IP:
`–host-resolver-rules=“MAP host1 1.2.3.4, MAP host2 5.6.7.8”`
- **Important:** also add a trailing-dot version of each host (for example, MAP host1 followed by a dot, then the IP). WebRTC looks names up with the dot on the end, and without it the video relay still fails.
5. **Restart Chrome** (`pkill -f ‘chrome.*remote-debugging-port’`, then relaunch with `box-chrome`). You’ll probably need to sign back in to the site.
6. **Recheck the log** for new “Failed to resolve” lines and repeat for any new hostnames.
**Notes:**
- Outbound UDP to real IPs worked for me, so WebRTC can connect once the names resolve.
- IPs can change, so redo the DNS lookup if it breaks again.
- This is a temporary workaround. It goes around the platform’s network setup, so revert it once there’s a real fix.