Laitteet, jotka reitittävät LANia ja soittavat samalla VPN:ään, päätyvät samaan väittelyyn itsensä kanssa: tunneli haluaa omistaa oletusreitin ja LAN tarvitsee sen takaisin. Kun OpenVPN yhdistää, se voi asentaa oletusreitin tunnelin kautta tai parin puolikkaita oletusreittejä, mikä on oikein kannettavalle ja väärin yhdyskäytävälle, jonka naapurit odottavat vastauksia sen LAN-osoitteesta. Vastaus ei ole VPN:n ohittaminen. Vastaus on antaa kahdelle päätökselle eri taulukot.

Yksi oletusreitti, kaksi omistajaa

Edelleen välitetyn ja paikallisesti syntyneen liikenteen ei tarvitse kulkea samaa tietä. LAN-asiakkaat tarvitsevat tunnelin vain valitsemiisi kohteisiin, kun taas isännän omat hallintasessiot ja sen vastaukset näille asiakkaille tarvitsevat LANin oletusreitin. Molempien sekoittaminen päätaulukkoon pakottaa yhden vastauksen kahteen eri kysymykseen.

OpenVPN:ssä on kytkin juuri tähän. route-noexec estää asiakasta koskemasta päätaulukkoon lainkaan, ja arvot, joita se olisi käyttänyt, viedään route-up skriptiin niminä route_vpn_gateway, dev ja liitännän osoitteet. Sen jälkeen sinä päätät, mikä taulukko saa minkä reitin, koodissa jonka voit lukea myöhemmin.

Käytäntötaulukko vai päätaulukon uudelleenkirjoitus

ApproachWhat it buysWhat it costs
Separate table plus source ruleLAN traffic and host traffic keep independent defaultsEvery lookup now depends on rule order
Editing the main table onlyFewer moving parts on a single-purpose hostOne mistake takes the gateway offline entirely
Two half-default routesWorks for a full-tunnel clientAmbiguous on a host that must answer on its LAN address

Erillinen taulukko on ainoa vaihtoehto, joka skaalautuu yhden aliverkon yli. Nimeä se kerran ja viittaa siihen sitten nimellä, jotta kenenkään ei tarvitse muistaa numeroa:

echo "10 vpn" >> /etc/iproute2/rt_tables
ip rule add from 192.168.50.0/24 table vpn
ip route add default via 10.8.0.1 dev tun0 table vpn

Osoitteet tässä ovat paikkamerkkejä. Korvaa LAN-etuliite, tunnelin yhdyskäytävä ja laitteen nimi omasta käyttöönotostasi ennen kuin ajat mitään.

Säännön on vastattava myös isäntää

Sääntö, joka vastaa vain LAN-etuliitettä, kattaa edelleen välitetyt paketit. Se ei kata liikennettä, jonka yhdyskäytävä itse tuottaa, eikä vastauksia, jotka se lähettää takaisin LAN-asiakkaille ja jotka kantavat yhdyskäytävän LAN-osoitetta lähteenään. Ne haut putoavat mainiin ja voivat silti lähteä tunnelin kautta.

Lisää toinen sääntö yhdyskäytävän omalle LAN-osoitteelle tai laajenna ensimmäinen sääntö joukoksi, joka sisältää molemmat. Järjestys on tärkeä: aseta täsmällisempi sääntö ensin ja tarkista tulos haulla, joka nimeää lähteen nimenomaisesti.

ip route get 203.0.113.9 from 192.168.50.1

Jos se raportoi tunnelilaitteen kohteelle, jonka pitäisi pysyä paikallisena, sääntöjoukko on väärä riippumatta siitä, mitä taulukko sisältää.

NAT vai reitti kaukopäässä

VPN-palvelin tuntee tunnelin aliverkon eikä mitään muuta. Paketeilla, jotka saapuvat LAN-lähdeosoitteella, ei ole paluureittiä, ellei joku tarjoa sitä, ja sen tarjoamiseen on täsmälleen kaksi tapaa. Reitin lisääminen LAN-etuliitteelle palvelimella pitää alkuperäisen lähteen näkyvissä päästä päähän, mitä auditoitu suunnittelu yleensä haluaa. Naamiointi yhdyskäytävällä kirjoittaa lähteen tunnelin osoitteeksi eikä vaadi palvelimelta yhteistyötä.

iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o tun0 -j MASQUERADE

Valitse NAT, kun et hallitse palvelinta etkä voi lisätä sinne reittejä. Valitse palvelinpuolen reitti, kun lokit, pääsynvalvonta tai paluureitin symmetria ovat tärkeitä, koska naamiointi pyyhkii alkuperäisen osoitteen kaikesta, mitä kaukopää tallentaa.

Kummassakin tapauksessa edelleenvälityksen on oltava käytössä, ja tiukka käänteisen reitin suodatus voi pudottaa vastauksen, kun main ei olisi valinnut tunnelia kyseiselle lähteelle. Tarkista tehollinen arvo ennen kuin syytät tunnelia.

Tee jaosta uudelleenyhdistämisen kestävä

Käsin lisätyt säännöt ja reitit katoavat, kun liitäntä luodaan uudelleen, ja vanhentunut taulukkomerkintä voi elää pidempään kuin sen oikeuttanut istunto. Laita taulukkosääntö, tunnelin reitti ja naamiointimerkintä asiakkaan route-up skriptiin ja tyhjennä taulukko skriptin alussa, jotta vanha yhdyskäytävä ei voi selvitä uuteen istuntoon.

Varmista molemmista päistä: haku yhdyskäytävällä LAN-lähteellä ja todellinen pyyntö LAN-asiakkaalta kohteeseen, jonka pitäisi kulkea tunnelin kautta. Reitti, joka on olemassa mutta jota ei koskaan valita, käyttäytyy täsmälleen kuin reittiä ei olisi, kunnes luet laskureita.

Aiheeseen liittyvät artikkelit