VPN-osoitteeseen sidottu sovellus käyttää silti väärää reittiä
VPN-osoitteeseen sidottu socket noudattaa tavallista oletusreittiä. Tarkista osoitteen omistus ja lähdetietoinen haku ennen käytäntösääntöjen lisäämistä.
Sovellus sitoutuu VPN:n osoitteeseen, ja yhteys lähtee silti tavallista oletusreittiä. Sidonnassa ei epäonnistunut mikään; se teki täsmälleen sen, mitä sidonta tekee. Socketin sitominen paikalliseen osoitteeseen valitsee lähdeosoitteen, jonka ydin asettaa otsakkeeseen. Se ei asenna reittiä eikä luo käytäntösääntöä, joka lähettäisi kyseistä lähdettä kantavat paketit tiettyyn tunneliin.
Tämän ohjeen loppuosa on tarkistusjärjestys, jota käytän, sekä komento, joka tuottaa kunkin havainnon.
Mitä sidonta todella päättää
Sidonta antaa socketille paikallisen osoitteen. Sen jälkeen ydin tekee saman reittihaun, jonka se olisi muuten tehnyt, ellei käytäntösääntö muuta sitä, mitä taulukkoa haku lukee.
Siksi paketti voi lähteä VPN:n lähdeosoitteella fyysiseltä liitännältä. Vastapuolella se saapuu yksityisestä alueesta, jota verkko ei koskaan odottanut tällä polulla, paluuliikenteellä ei ole reittiä takaisin ja yhteys jää jumiin tai nollautuu.
Linuxin IP-socket-viite dokumentoi sidonnan semantiikan. Reitityksen puoli asuu ip-rule- ja ip-route-sivuilla, ja ne ovat syystä erillisiä käsikirjoja.
Varmista, että osoite kuuluu tähän nimiavaruuteen
Osoitteen, johon voit sitoa, täytyy olla liitännällä verkkonimiavaruudessa, jossa sovellus toimii. Vastapuolen osoite, yhdyskäytävän osoite tai osoite, joka on vain toisessa nimiavaruudessa, ei ole sidottavissa, ja kutsu epäonnistuu virheellä EADDRNOTAVAIL.
ip -br addr show
ip netns identify <pid>
ss -tanp | grep <port>Suorita nuo kolme samassa kontekstissa kuin sovellus: sama nimiavaruus ja sama käyttäjä, jos saat sen. Vanha net30-kaavio ei todista, minkä osoitteen nykyinen topologiasi antoi asiakkaalle. Lue liitäntä, joka on todella käytössä.
Lue haku kyseiselle lähteelle ja kohteelle
Yksi komento vastaa kysymykseen, johon sidonta ei vastannut:
ip route get 203.0.113.10 from 10.8.0.2
ip rule showEnsimmäinen rivi tulostaa reitin, jonka paketti kulkisi kyseisestä lähteestä kyseiseen kohteeseen, mukaan lukien lähtevä liitäntä ja ensisijainen lähde. Jos se nimeää fyysisen liitännän, sidonta ja reitti ovat ristiriidassa, ja paketti lähtee lähteellä, johon polku ei voi palata.
Sen jälkeen ip rule show kertoo, olisiko jokin sääntö valinnut toisen taulukon. Prioriteetit merkitsevät täällä, koska ensimmäinen osuva sääntö voittaa, ja kaiken sieppaava sääntö oman sääntösi yläpuolella tekee säännöstäsi näkymättömän.
Asenna käytäntösääntö vain jos se on suunnitelma
Lähteeseen perustuva reititys on tarkoituksellinen suunnitelma, ei yhden sovelluksen korjaus. Jos käytännön omistaja haluaa tunnelin aliverkon liikenteen käyttävän tunnelia, sääntö kuuluu hänen konfiguraatioonsa eikä kertaluontoiseen komentoon kannettavallasi.
Toimiva muoto on erillinen taulukko, jossa on tunnelin kautta kulkeva oletusreitti, sekä sääntö, joka lähettää VPN:n lähdealueen tähän taulukkoon. Lisää poikkeukset, joita suunnitelma tarvitsee, koska taulukko, jossa on vain tunnelin oletus, sieppaa kohteet, joiden on tarkoitus pysyä paikallisina tai olla tavoitettavissa fyysisen polun kautta.
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.2Peru ip rule del- ja ip route flush table 100 -komennoilla. Kaikki näin lisätty katoaa uudelleenkäynnistyksessä, ellei jokin hallintaohjelma kirjoita sitä, mikä on sekä turvaominaisuus että syy olla pitämättä ainoaa kopiota shell-historiasi varassa.
Vahvista kolmella havainnolla
Kirjaa lähde, jota sovellus pyysi, reitti, jonka haku valitsi, ja lähde, jonka palvelin todella näki.
Nämä kolme voivat poiketa toisistaan, ja jokainen poikkeama osoittaa eri paikkaan. Kaappaus tunnelin liitännällä todistaa, että paketti lähti oikealla lähteellä. Kaappaus fyysisellä liitännällä todistaa, että se lähti väärää kautta. Vain palvelimen puolen näkymä todistaa polun päästä päähän.
Jos sovellus tarjoaa laitteeseen sidonnan vaihtoehdon tai sovelluskohtaisen reititystilan, käsittele sitä eri mekanismina, jolla on eri rajoitukset. Samannäköiset asetukset eivät kaikki johda samaan ytimen päätökseen.