Vypnutí WireGuardu v cílové síti

Vypnutí WireGuardu v cílové síti
« kdy: 27. 08. 2022, 09:15:28 »
Nazdárek, řeším jeden praktický problémek při používání Wireguard tunelu   v režimu road warrior právě na tom "floating" zařízení (připojuje se na globálně veřejného peera  a z něj je dostupná cílová sít.naroutovaná přes dalšího peera, kvůli neveřejné IP).

Zařízení je android s "appkou wireguard z f-droidu", což stejně nic neznamená, protože defakto jen ta appkaa je agent s teplou vodou co přenáší příkazy wg set. NE že by to nešlo přes root terminál, Ale zrovna pro přehlednost a zrychlení je boží.

Jde o to, že když jsem v cílové síti (obligátní 192.168.1.0/24) a je zapnutý tunel, tak pakety z  smartphonu zbytečně proudí na veřejný peer a zpět, když mohou jít na lokální síti (dokonce on-link) . Ale ještě hůř, když vypadne upstream konektivita, tak se  k wireguard veřejnému peeru nedostanu . Interní síť wg je 172.16.1.0/24


Jak tohle elegentně řešit? Je to možná komplexní dotaz, protože se týká konkrétního OS android AOSP, konkrétní appky, jde o spíš soft dotaz, jakým způsobem to řešit nejlépe.

Konkrétní vymyšlený příklad, mám například appku na prohlížení webkamery v lokální síti,  jdou tam zadat do seznamu položky webkamer, které budou uložené - stačí název , IP adresa/hostname, port, nějaké heslo... V tomto případě mám 192.168.1.160

Konkrétně způsobů řešení je víc, split-dns, více ip, více připojovacích profilů v aplikaci, používání DNS jmen a v aplikaci, NATování... ale některé jsou vyloženě hnusné

Obviously, jedno řešení je vypínat tunel v cílové síti... Ale zatím jsem nepřišel jak to udělat automatizovaně (hádám, asi by to musela umět appka a nějak sledovat k jaké wifi je spojená a porovnávat čistě podle SSID( ::) ) a nebo podle  IP+gateway+masky) . Všechny řešení předpokládám že by byly na vyloženě smartphonu ( až na to NATování).

Nebo je chyba(přičina problému), že  telefon (192.168.1.5) se a cílové zařízení v(192.168.1.160) cílové síti má IP ze stejné sítě (192.168.0.1./24) a nějak by se to snad řešilo natováním (třeba symetricky na to 172.16.1.x=192.168.1.x) . ALe chtěl bych zůstat, abych v appkách měl uložený jen jeden profil(jeden záznam)




Hint: šlo by nějak využít fakt, že smartphon je fakticky v dané síti k dané síti připojen on-link? (těmhle věcem v ip addr jsem moc nerozumel)
« Poslední změna: 27. 08. 2022, 09:34:47 od Petr Krčmář »


Re:Jak řešit wireguard dilema(nutnost vypnout v cílové síti)
« Odpověď #1 kdy: 27. 08. 2022, 09:33:07 »
Přídávám se k dotazu, řeším něco podobného (zatím jsem se tím netrápil).

Když se připojím s telefonem do sítě, do které tuneluji, tak data tečou zbytečně přes tunel. Několik sítí mám rovněž tunelem propojených přímo mezi routery, takže zařízení už vlastní tunel nepotřebují.

rmrf

Re:Vypnutí WireGuardu v cílové síti
« Odpověď #2 kdy: 27. 08. 2022, 10:22:42 »
Podle mě to vyřešit nejde.
Tedy pokud má fungovat tunel odkudkoliv do vzdálené domácí sítě, i v případě, že se v lokální síti (kam je zařízení připojeno) používá stejný rozsah ip adres, jako doma.
A to ještě mám pocit, že můj Androidí Wireguard klient umí nastavit pouze defaultní routu, takže tam je ta nefunkčnost dokonale zajištěna.

Re:Vypnutí WireGuardu v cílové síti
« Odpověď #3 kdy: 27. 08. 2022, 10:23:33 »
Nemá to rozumné řešení. V těch telefonech se kolem VPN dělá spoustu harakiri, aby šel provoz vždy do VPN, do toho se tam řeší aby seamless fungovalo přepínání mezi WiFi a mobilními daty, aby se VPN provoz neleakoval těmito kanály ven, aby nějaké lowlevel štěnice (např. Najít iPhone) mohly komunikovat přes data/wifi, i přestože je aktivní VPN, ...

Nakonec je na tom Androidu opravdu nejjednodušší řešení pomocí nějaké utility co něco udělá podle připojené WiFi.

Re:Vypnutí WireGuardu v cílové síti
« Odpověď #4 kdy: 27. 08. 2022, 10:37:09 »
Ještě mě napadl jeden ošklivý, ale funkční workaround. V místní síti si vytvořit druhý Wireguard server se stejnými klíči a přes DNAT unést požadavky z IP adresy telefonu směrem na veřejnou IP VPN. Když se telefon připojí na Wifi, tak se mu provoz nasměruje na místní Wireguard server a naváže si tu VPN jen v rámci sítě.


rmrf

Re:Vypnutí WireGuardu v cílové síti
« Odpověď #5 kdy: 27. 08. 2022, 11:00:17 »
To by sice šlo, ale ztratí se ona kouzelná vlastnost Wireguardu a to ta, že když jsem připojen k wireguard vpn, tak přehození z jedné wifi na druhou nebo na mobilní data nemá vliv na moji externí ip adresu a dokonce se při takovém přehození nepřeruší žádná navázaná spojení a neztratí se ani jeden ping.

Re:Vypnutí WireGuardu v cílové síti
« Odpověď #6 kdy: 27. 08. 2022, 11:42:34 »
To by sice šlo, ale ztratí se ona kouzelná vlastnost Wireguardu a to ta, že když jsem připojen k wireguard vpn, tak přehození z jedné wifi na druhou nebo na mobilní data nemá vliv na moji externí ip adresu a dokonce se při takovém přehození nepřeruší žádná navázaná spojení a neztratí se ani jeden ping.

Je treba premistit WG server na lokalni stroj s neverejnou adresou (takze WG server bude stale jen jeden) a z toho stroje s verejnou IP adresou forwardovat WG UDP traffic. Pak odchyceni a presmerovani smartfonu bude pro WG server jen bezna zmena IP adresy pohybujiciho se klienta.

_Jenda

  • *****
  • 1 605
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Vypnutí WireGuardu v cílové síti
« Odpověď #7 kdy: 27. 08. 2022, 14:14:46 »
Jak tohle elegentně řešit? Je to možná komplexní dotaz, protože se týká konkrétního OS android AOSP, konkrétní appky, jde o spíš soft dotaz, jakým způsobem to řešit nejlépe.
Tohle je doslova práce pro network manager (ne nutně ten co se jmenuje NetworkManager) - celou jeho pointou je zjistit, kam jsi právě přišel, a podle toho nastavit IP adresy, DNS, firewall, nahodit a poshazovat VPNky a nastavit routování do všech tvých sítí.

Já jsem kdysi používal NetworkManager, pak Wicd, ale pak jsem oboje vykopal, protože mi přišlo neúměrně složité to nastavit když to jsou věci, co zvládne párřádkový shell script. Takže teď mám skript "cn" (jako že connect) a když někam přijdu, tak napíšu třeba "cn prace", "cn skola", "cn zakaznik1" atd. a ono se to stane: spustí to wpa_supplicant s konfiguračním souborem co se jmenuje jako ten argument (v tom souboru je SSID a heslo, samozřejmě), dhclient, restartuje openvpnky (tady si přidáš, že když argument je "prace" tak se vypne wireguard), a taky to třeba dělalo, že to ve škole ztlumilo zvuk.

Wireguard android, verze 13, eBPF, kompatibilní
« Odpověď #8 kdy: 28. 08. 2022, 07:58:53 »
Můj com.wireguard.android zase neumí přiřadit víc IP adres k wg interface, ip addr mi hlásí jen tu posledí z vyplněného pole Addresses:<10.0.1.0/24,...,...,tato>

A do toho  jsem zaregistroval vypuštění Lineageos verze 19, android 13(asi), changelog číslo 26: https://lineageos.org/Changelog-26/
tam čtu něco že to má nový network engine .Mám se bát , že síťové utility nebudou fungovat( třeba i tcp dump z root sh) nebo právě wireguard to rozhodí nebo oblíbený DNS filtr který funguje přes root a nějak přepisuje porty 5300 a 53 přes DNAT,SNAT?
Kód: [Vybrat]
Exec 'iptables -t nat -I OUTPUT -p udp --dport 53 -j DNAT --to-destination 127.0.0.1:5300' !
Exec 'ip6tables -A OUTPUT -p udp --destination-port 53 -j DROP' !
Exec 'ip6tables -A OUTPUT -p tcp --destination-port 53 -j DROP' !
Exec 'iptables -A OUTPUT -p tcp --destination-port 53 -j DROP' !
DNSFILTER proxy running on port 5300