O aplicație legată de adresa VPN folosește în continuare ruta greșită
Un socket legat de adresa VPN urmează ruta implicită obișnuită. Verificați proprietatea adresei și căutarea conștientă de sursă înainte de a adăuga reguli de politică.
O aplicație se leagă de adresa VPN, iar conexiunea iese totuși prin ruta implicită obișnuită. Nimic nu a eșuat în bind; a făcut exact ce face un bind. Legarea unui socket de o adresă locală alege adresa sursă pe care nucleul o pune în antet. Nu instalează o rută și nu creează o regulă de politică ce ar trimite pachetele cu acea sursă într-un anumit tunel.
Restul acestui ghid este ordinea de verificare pe care o folosesc, împreună cu comanda care produce fiecare observație.
Ce decide de fapt un bind
Un bind atribuie socketului o adresă locală. Apoi nucleul execută aceeași căutare de rută pe care ar fi executat-o altfel, dacă o regulă de politică nu schimbă ce tabel citește acea căutare.
De aceea un pachet poate ieși cu o adresă sursă VPN pe o interfață fizică. Pe cealaltă parte sosește dintr-un interval privat pe care rețeaua nu l-a așteptat niciodată pe acea cale, traficul de retur nu are rută înapoi, iar conexiunea se blochează sau se resetează.
Referința pentru socketuri IP din Linux documentează semantica bind-ului. Jumătatea de rutare trăiește în ip-rule și ip-route, iar acestea sunt manuale separate dintr-un motiv.
Confirmați că adresa aparține acestui spațiu de nume
O adresă de care vă puteți lega trebuie să existe pe o interfață din spațiul de nume de rețea în care rulează aplicația. O adresă de partener, o adresă de gateway sau o adresă care există doar în alt spațiu de nume nu poate fi legată, iar apelul eșuează cu EADDRNOTAVAIL.
ip -br addr show
ip netns identify <pid>
ss -tanp | grep <port>Rulați cele trei în același context ca aplicația: același spațiu de nume și același utilizator, dacă îl puteți obține. O diagramă net30 veche nu dovedește ce adresă a atribuit topologia actuală clientului. Citiți interfața care este efectiv activă.
Citiți căutarea pentru acea sursă și destinație
O singură comandă răspunde la întrebarea la care bind-ul nu a răspuns:
ip route get 203.0.113.10 from 10.8.0.2
ip rule showPrima linie tipărește ruta pe care ar urma-o un pachet de la acea sursă la acea destinație, inclusiv interfața de ieșire și sursa preferată. Dacă numește interfața fizică, bind-ul și ruta sunt în dezacord, iar pachetul va ieși cu o sursă la care calea nu poate reveni.
Apoi ip rule show vă spune dacă vreo regulă ar fi ales alt tabel. Prioritățile contează aici, pentru că prima regulă potrivită câștigă, iar o regulă care prinde tot ce e deasupra ei face regula dumneavoastră invizibilă.
Instalați o regulă de politică doar dacă acesta este proiectul
Rutarea bazată pe sursă este un proiect deliberat, nu o reparație pentru o singură aplicație. Dacă proprietarul politicii vrea ca traficul din subrețeaua tunelului să folosească tunelul, regula aparține configurației acestuia, nu unei comenzi unice pe laptopul dumneavoastră.
O formă funcțională este un tabel dedicat cu o rută implicită prin tunel, plus o regulă care trimite intervalul sursă VPN în acel tabel. Adăugați excepțiile de care are nevoie proiectul, pentru că un tabel care conține doar un implicit de tunel va captura destinații care trebuie să rămână locale sau accesibile pe calea fizică.
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.2Anulați cu ip rule del și ip route flush table 100. Orice este adăugat astfel dispare la repornire, dacă nu cumva un manager îl scrie, ceea ce este atât o proprietate de securitate, cât și un motiv să nu păstrați unica copie în istoricul shell-ului.
Verificați cu trei observații
Notați sursa cerută de aplicație, ruta aleasă de căutare și sursa pe care serverul a văzut-o efectiv.
Acestea trei pot fi în dezacord, iar fiecare dezacord indică altundeva. O captură pe interfața tunelului dovedește că pachetul a ieșit cu sursa corectă. O captură pe interfața fizică dovedește că a ieșit pe calea greșită. Doar vederea din partea serverului dovedește calea de la un capăt la altul.
Dacă aplicația oferă o opțiune de legare la un dispozitiv sau un mod de rutare per aplicație, tratați-o ca pe un alt mecanism cu alte restricții. Setările cu aspect similar nu ajung toate la aceeași decizie a nucleului.