From ebbe96e4e14f0d045a63760678b0d6cd394cc0b7 Mon Sep 17 00:00:00 2001 From: ospab Date: Thu, 28 May 2026 18:51:30 +0300 Subject: [PATCH] fix(client): prefer IPv6 on Android to support NAT64 mobile networks --- ostp-client/src/runner.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ostp-client/src/runner.rs b/ostp-client/src/runner.rs index f6e7d22..eaff88e 100644 --- a/ostp-client/src/runner.rs +++ b/ostp-client/src/runner.rs @@ -157,11 +157,15 @@ pub async fn run_client_core( // Resolve the server IP before we override system routing and DNS. // This prevents DNS deadlock if the VPN disconnects and tries to reconnect, // and also ensures we add the direct route to the exact IP the bridge connects to. - let resolved_addrs: Vec = tokio::net::lookup_host(&config.ostp.server_addr) + #[allow(unused_mut)] + let mut resolved_addrs: Vec = tokio::net::lookup_host(&config.ostp.server_addr) .await .map_err(|e| anyhow::anyhow!("Failed to resolve server address {}: {}", config.ostp.server_addr, e))? .collect(); + #[cfg(target_os = "android")] + resolved_addrs.sort_by_key(|addr| if addr.is_ipv6() { 0 } else { 1 }); + let target_addr = resolved_addrs.first() .ok_or_else(|| anyhow::anyhow!("No IP addresses resolved for {}", config.ostp.server_addr))?;