Aplikacija vezana na VPN adresu i dalje koristi pogrešnu rutu
Socket vezan na VPN adresu slijedi uobičajenu zadanu rutu. Provjerite vlasništvo nad adresom i pretragu svjesnu izvora prije dodavanja pravila politike.
Aplikacija se veže na VPN adresu, a veza ipak izlazi kroz uobičajenu zadanu rutu. Ništa u vezivanju nije neuspjelo; ono je učinilo točno ono što vezivanje čini. Vezivanje socketa na lokalnu adresu bira izvornu adresu koju jezgra stavlja u zaglavlje. Ono ne instalira rutu i ne stvara pravilo politike koje pakete s tim izvorom šalje u određeni tunel.
Ostatak ovog priručnika je redoslijed provjere koji koristim, zajedno s naredbom koja daje svako opažanje.
Što vezivanje zapravo odlučuje
Vezivanje dodjeljuje lokalnu adresu socketu. Zatim jezgra izvodi isto traženje rute koje bi izvela i inače, osim ako pravilo politike promijeni koju tablicu to traženje čita.
Zato paket može izaći s VPN izvornom adresom na fizičkom sučelju. Na drugoj strani dolazi iz privatnog raspona koji mreža nikada nije očekivala na tom putu, povratni promet nema rutu natrag, a veza se blokira ili resetira.
Linux referenca za IP sockete dokumentira semantiku vezivanja. Polovica za usmjeravanje živi u ip-rule i ip-route, i to su odvojeni priručnici s razlogom.
Potvrdite da adresa pripada ovom imenskom prostoru
Adresa na koju se možete vezati mora postojati na sučelju unutar mrežnog imenskog prostora u kojem aplikacija radi. Adresa partnera, adresa pristupnika ili adresa koja postoji samo u drugom imenskom prostoru ne može se vezati, a poziv pada s EADDRNOTAVAIL.
ip -br addr show
ip netns identify <pid>
ss -tanp | grep <port>Pokrenite te tri u istom kontekstu kao aplikaciju: isti imenski prostor i isti korisnik ako ga možete dobiti. Stari net30 dijagram nije dokaz koju je adresu vaša trenutna topologija dodijelila klijentu. Čitajte sučelje koje je zaista podignuto.
Pročitajte traženje za taj izvor i odredište
Jedna naredba odgovara na pitanje na koje vezivanje nije odgovorilo:
ip route get 203.0.113.10 from 10.8.0.2
ip rule showPrvi red ispisuje rutu koju bi paket od tog izvora do tog odredišta prošao, uključujući izlazno sučelje i preferirani izvor. Ako imenuje fizičko sučelje, vezivanje i ruta se ne slažu, a paket će izaći s izvorom u koji put ne može da se vrati.
ip rule show zatim kaže je li neko pravilo odabralo drugu tablicu. Prioriteti su ovdje važni, jer prvo pravilo koje se poklopi pobjeđuje, a pravilo koje hvata sve iznad vašeg čini vaše pravilo nevidljivim.
Instalirajte pravilo politike samo ako je to dizajn
Usmjeravanje na temelju izvora namjeran je dizajn, a ne popravak za jednu aplikaciju. Ako vlasnik politike želi da promet iz tunelske podmreže koristi tunel, pravilo pripada u njegovu konfiguraciju, a ne u jednokratnu naredbu na vašem prijenosniku.
Izvediv oblik je namjenska tablica sa zadanom rutom kroz tunel, plus pravilo koje šalje VPN izvorni raspon u tu tablicu. Dodajte iznimke koje dizajn zahtijeva, jer tablica samo s tunelskim zadanim unosom uhvatit će odredišta koja trebaju ostati lokalna ili dostupna preko fizičkog puta.
ip route add default dev tun0 table 100
ip rule add from 10.8.0.2 table 100 priority 100
ip route get 203.0.113.10 from 10.8.0.2Poništite s ip rule del i ip route flush table 100. Sve tako dodano nestaje nakon restarta ako to ne zapiše neki upravitelj, što je istovremeno sigurnosno svojstvo i razlog da jedinu kopiju ne držite u povijesti svog shella.
Provjerite s tri opažanja
Zabilježite izvor koji je aplikacija tražila, rutu koju je traženje odabralo i izvor koji je poslužitelj zaista vidio.
Ta tri mogu se razlikovati, a svaka razlika pokazuje na drugo mjesto. Snimka na tunelskom sučelju dokazuje da je paket izašao s ispravnim izvorom. Snimka na fizičkom sučelju dokazuje da je izašao pogrešnim putem. Pogled sa strane poslužitelja jedini dokazuje put od početka do kraja.
Ako aplikacija nudi opciju vezivanja na uređaj ili način usmjeravanja po aplikaciji, tretirajte to kao drugi mehanizam s drugim ograničenjima. Slične postavke ne vode sve do iste odluke jezgre.