Commit 29a1de2
committed
fix(vpn): resolve ERR_QUIC_PROTOCOL_ERROR and DNS failures on Android 16 TUN mode (issue #32)
Root cause: FakeDNSProxy forwarded non-DNS UDP (QUIC) to upstream SOCKS5
UDP_ASSOCIATE, which rejects non-53 targets and closes the association,
black-holing subsequent DNS queries. IPv6 ::/0 was also routed into the
TUN without an IPv6 DNS server to advertise, so IPv6 QUIC had no path.
Changes (uniform across all Android versions for easier debugging):
* MasterDnsVpnService.kt
- Drop IPv6 ::/0 route and fc00::1 address from VpnService.Builder;
FakeDNSProxy has no IPv6 DNS to advertise and upstream SOCKS5
UDP_ASSOCIATE rejects non-53 traffic, so ::/0 only black-holes IPv6
QUIC. Re-enablement conditions documented in ponytail comment.
- setBlocking(true) on the TUN fd: tun2socks/gVisor fdbased reads
require a blocking fd to avoid busy-loop polling.
- Add NetworkCallback.onLost override calling setUnderlyingNetworks(null)
so Android 16 does not retain stale underlying-network state after
onLost fires (onAvailable only set it, never reset).
- TUN MTU 1500 to 1400 on both Builder.setMtu and the startTunBridge
call, leaving headroom for SOCKS5/transport overhead so QUIC
datagrams do not exceed the upstream path MTU and black-hole.
* mobile/mobile.go
- StartTun engine.Key.MTU 1500 to 1400 to match the Android side.
* mobile/tun/fakedns_proxy.go
- Stop forwarding non-53 UDP to upstream. Browsers QUIC probes now
time out fast and fall back to TCP instead of hanging on a rejected
UDP_ASSOCIATE that would also kill following DNS queries.
- Parse atyp==4 (IPv6) BND address in the UDP_ASSOCIATE reply so the
forward-compat path is correct when IPv6 is re-enabled later.1 parent 1c04a2f commit 29a1de2
3 files changed
Lines changed: 27 additions & 20 deletions
File tree
- android/app/src/main/java/com/masterdns/vpn/service
- mobile
- tun
Lines changed: 16 additions & 14 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
287 | 287 | | |
288 | 288 | | |
289 | 289 | | |
290 | | - | |
| 290 | + | |
291 | 291 | | |
292 | 292 | | |
| 293 | + | |
293 | 294 | | |
294 | | - | |
295 | | - | |
296 | | - | |
297 | | - | |
298 | | - | |
299 | | - | |
300 | | - | |
301 | | - | |
302 | | - | |
303 | | - | |
304 | | - | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
305 | 301 | | |
306 | 302 | | |
307 | 303 | | |
| |||
368 | 364 | | |
369 | 365 | | |
370 | 366 | | |
371 | | - | |
| 367 | + | |
372 | 368 | | |
373 | 369 | | |
374 | 370 | | |
| |||
384 | 380 | | |
385 | 381 | | |
386 | 382 | | |
387 | | - | |
| 383 | + | |
388 | 384 | | |
389 | 385 | | |
390 | 386 | | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
391 | 393 | | |
392 | 394 | | |
393 | 395 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
109 | 109 | | |
110 | 110 | | |
111 | 111 | | |
112 | | - | |
| 112 | + | |
113 | 113 | | |
114 | 114 | | |
115 | 115 | | |
| |||
210 | 210 | | |
211 | 211 | | |
212 | 212 | | |
213 | | - | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
214 | 216 | | |
215 | 217 | | |
216 | 218 | | |
| |||
276 | 278 | | |
277 | 279 | | |
278 | 280 | | |
279 | | - | |
280 | 281 | | |
281 | 282 | | |
282 | 283 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
244 | 244 | | |
245 | 245 | | |
246 | 246 | | |
| 247 | + | |
| 248 | + | |
247 | 249 | | |
248 | 250 | | |
249 | 251 | | |
| |||
334 | 336 | | |
335 | 337 | | |
336 | 338 | | |
337 | | - | |
338 | | - | |
339 | | - | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
340 | 344 | | |
341 | 345 | | |
342 | 346 | | |
| |||
0 commit comments