Repository navigation
fix(network): Server auch bei aktivem Tunnel erreichbar; GateDrop mit mehreren Bildern - #185
Merged
Merged
Conversation
added 2 commits
November 4, 2026 11:03
… mehreren Bildern DNS des Servers (ApiClientProvider → neu VpnSafeDns): - Der Resolver im Tunnel (dnsmasq auf dem Gateway) beantwortet den Servernamen absichtlich mit der VPN-Adresse (Split-Horizon). Läuft die App selbst durch den Tunnel (keine Split-Tunnel-Ausnahme für GateControl), ist das der richtige Weg: die Adresse wird jetzt genutzt, bekannte öffentliche Adressen folgen als Ausweichweg. Bisher wurde sie verworfen – ohne Cache (z. B. nach einem Neustart der App bei aktivem Tunnel) schlug jeder API-Aufruf mit UnknownHostException fehl, mit Cache ging der Aufruf an die öffentliche Adresse durch den Tunnel und lief in Timeouts. - Ist die App vom Tunnel ausgenommen, wird eine VPN-Adresse weiter verworfen; dann wird der Name über ein Netz außerhalb des VPN aufgelöst (Network.getAllByName), danach aus den Adressen dieses Laufs und zuletzt aus den zuletzt bekannten öffentlichen Adressen, die jetzt dauerhaft gespeichert werden. - Ob die App durch den Tunnel geht, entscheidet ihr eigenes Standardnetz (TRANSPORT_VPN), nicht eine Annahme über die Split-Tunnel-Einstellung. - Unit-Tests für die Regeln. GateDrop (Teilen-Blatt): - Das Blatt schließt sich beim Senden an Geräte nicht mehr sofort mit einem Toast, sondern zeigt den Fortschritt, „Gesendet – An …“ oder den Fehler; Schließen ist jederzeit möglich, das Senden läuft weiter. - Ist der Server nicht erreichbar, sagt das Blatt und eine Mitteilung „Noch nicht gesendet – GateControl versucht es von selbst erneut“ (bisher bis zu Stunden ohne jede Rückmeldung). - Nicht lesbare geteilte Dateien werden genannt statt still ausgelassen. - „Gesendet und Empfangen ansehen“ im Blatt öffnet Einstellungen › Geteilt; die Gruppe dort heißt jetzt „GateDrop“. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD
VpnSafeDns fragt das Standardnetz der App und die Netze außerhalb des VPN ab (ConnectivityManager); Lint verlangt die Berechtigung im Modul selbst. Die App deklarierte sie schon, am Verhalten ändert sich nichts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD
CallMeTechie
pushed a commit
that referenced
this pull request
Nov 4, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Worum es geht
Aus dem App-Log (04.11., ~10:50–11:45): Dutzende
UnknownHostException: DNS lookup failed for … (system DNS returned only VPN-internal addresses, no cache)und Connect-Timeouts von der Tunnel-Adresse 10.8.0.6 zur öffentlichen Server-IP. Dazu: Bilder per GateDrop an „FEC Laptop“ – sie kamen an, aber die App zeigte gar nichts, und der Verlauf („Geteilt“) war nicht zu finden.1. Server bei aktivem Tunnel erreichbar (core/network)
Ursache: Der Server beantwortet seinen eigenen Namen im Tunnel absichtlich mit der Gateway-Adresse (dnsmasq
host-record=<API-Host>,10.8.0.1, Split-Horizon, sieheentrypoint.shdes Servers): API-Verkehr eines getunnelten Clients soll über wg0 zu Caddy gehen. Die App selbst geht durch den Tunnel, wenn sie nicht per Split-Tunnel ausgenommen ist (WireGuardexcludeApplications/includeApplications, es gibt keine automatische Ausnahme für GateControl).vpnSafeDnsverwarf die VPN-Adresse trotzdem immer:UnknownHostException;Fix:
VpnSafeDns(rein, getestet) entscheidet nach dem tatsächlichen Weg des eigenen Verkehrs:TRANSPORT_VPN) → VPN-Adresse zuerst, bekannte öffentliche Adressen dahinter (OkHttp Fast-Fallback probiert beide);Network.getAllByName, validierte Netze zuerst), dann Adressen dieses Laufs, dann die dauerhaft gespeicherten zuletzt bekannten öffentlichen Adressen (SharedPreferences, nur IP-Literale).clearDnsCache()beim Trennen vergisst nur den Lauf; die zuletzt bekannte Adresse bleibt als letzter Ausweg.2. Connect-Timeouts / NAT64
OkHttp 5.5.1 mit Fast-Fallback (Happy Eyeballs) ist aktiv – im Log laufen IPv6 (64:ff9b::…) und IPv4 (192.0.0.4, CLAT) parallel (
Suppressed). Beide Wege laufen über NAT64 des Mobilfunknetzes und scheiterten gleichzeitig nach 15 s; die Timeouts von 192.168.27.19 (WLAN) ebenso – der Server war von dort zeitweise nicht erreichbar. Kein App-Fehler, 15 s Connect-Timeout angemessen, daher unverändert.3. GateDrop: Rückmeldung beim Senden und auffindbarer Verlauf
Retryingim Blatt und Mitteilung „Noch nicht gesendet – GateControl versucht es von selbst erneut“ (wird durch „Gesendet“/„Nicht gesendet“ ersetzt).Plugin-seitig (nur beschrieben, nicht geändert)
targets.deviceslistet jede App-Installation (gc.devices.list), unabhängig davon, ob deren Client GateDrop kann; eine Zustellung über den Server wird bei online-Geräten alsdeliveredmarkiert, auch wenn der Client sie nie abholt.transfers/<id>/result: Meldet der Empfängerokbevor alle Teile eines Mehrdatei-Push angekommen sind und scheitert danach der Sender, gibt es keinen Ausweichweg mehr (Lieferung schondelivered). Hängt am Windows-Empfänger (meldet er erst nach allen Teilen?).Tests
VpnSafeDnsTest(13 Fälle: getunnelt/ausgenommen, Neustart ohne Cache, Auflösung außerhalb des VPN, gespeicherte Adresse, gemischte Antworten, Fehler der Netzabfrage, Literal-Speicherung):core:network:testDebugUnitTest,:app:testDebugUnitTest(1640 Tests grün),:app:lintReleaseGenerated by Claude Code