Rut eit LAN-undernett gjennom OpenVPN og hald på standardruta
Hald på LAN-standardruta medan eitt undernett går gjennom tunnelen. Samanlikn ein policytabell med endringar i hovudtabellen, og vel deretter NAT eller ei rute på serversida.
Boksar som rutar for eit LAN og samstundes ringer opp ein VPN, hamnar i same diskusjonen med seg sjølve: tunnelen vil eige standardruta, og LAN-et treng henne attende. Når OpenVPN koplar til, kan det installere ei standardrute gjennom tunnelen eller eit par halve standardruter, noko som er rett for ein berbar PC og gale for ein gateway der grannane ventar svar frå LAN-adressa. Svaret er ikkje å hoppe over VPN-en. Svaret er å gje dei to avgjerdene ulike tabellar.
Éi standardrute, to eigarar
Vidaresend trafikk og lokalt oppstått trafikk treng ikkje ta same vegen. LAN-klientar treng berre tunnelen for målpunkta du vel, medan dei eigne administrasjonsøktene til verten og svara hans til desse klientane treng LAN-standardruta. Å blande båe i hovudtabellen tvingar eitt svar på to ulike spørsmål.
OpenVPN har ein brytar nettopp for dette. route-noexec hindrar klienten i å røre hovudtabellen i det heile, og verdiane han ville brukt, blir eksporterte til eit route-up skript som route_vpn_gateway, dev og grensesnittadressene. Deretter avgjer du kva tabell som får kva rute, i kode du kan lese seinare.
Policytabell kontra omskriving av hovudtabellen
| Approach | What it buys | What it costs |
|---|---|---|
| Separate table plus source rule | LAN traffic and host traffic keep independent defaults | Every lookup now depends on rule order |
| Editing the main table only | Fewer moving parts on a single-purpose host | One mistake takes the gateway offline entirely |
| Two half-default routes | Works for a full-tunnel client | Ambiguous on a host that must answer on its LAN address |
Den særskilde tabellen er det einaste alternativet som skalerer ut over eitt undernett. Gje han namn éin gong, og vis deretter til han ved namn, så ingen må hugse eit tal:
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 vpnAdressene her er plasshaldarar. Bytt ut LAN-prefikset, gatewayen til tunnelen og eininga sitt namn frå din eigen utrulling før du køyrer noko.
Regelen må også passe verten
Ein regel som berre passar LAN-prefikset, dekkjer vidaresende pakkar. Han dekkjer ikkje trafikk som gatewayen sjølv startar, og han dekkjer ikkje svara han sender attende til LAN-klientar, som ber LAN-adressa til gatewayen som kjelde. Dei oppslaga fell til main og kan framleis gå ut gjennom tunnelen.
Legg til ein andre regel for gatewayen si eiga LAN-adresse, eller utvid den første regelen til eit sett som omfattar båe. Rekkjefølgja er viktig: set den meir spesifikke regelen først, og kontroller resultatet med eit oppslag som namngjev kjelda eksplisitt.
ip route get 203.0.113.9 from 192.168.50.1Viss det rapporterer tunnel-eininga for eit målpunkt som skulle halde fram med å vere lokalt, er regelsettet feil uansett kva tabellen inneheld.
NAT eller ei rute på den andre sida
VPN-tenaren kjenner undernettet til tunnelen og ingenting anna. Pakkar som kjem med ei LAN-kjeldeadresse, har ingen returveg med mindre nokon skaffar ein, og det er nøyaktig to måtar å skaffe han på. Å leggje til ei rute for LAN-prefikset på tenaren held den opphavlege kjelda synleg heile vegen, noko eit revidert design vanlegvis ønsker. Maskering på gatewayen skriv om kjelda til tunneladressa og treng ingen samarbeid frå tenaren.
iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o tun0 -j MASQUERADEVel NAT når du ikkje kontrollerer tenaren og ikkje kan leggje til ruter der. Vel ruta på serversida når loggar, tilgangskontroll eller returvegsymmetri er viktig, fordi maskering slettar den opphavlege adressa frå alt den andre sida registrerer.
Uansett må vidaresending vere slått på, og streng reverse-path-filtrering kan droppe svaret når main ikkje ville valt tunnelen for den kjelda. Kontroller den faktiske verdien før du gir tunnelen skulda.
Få oppdelinga til å overleve ei ny tilkopling
Reglar og ruter som er lagde til for hand, forsvinn når grensesnittet blir gjenskapt, og ein forelda tabelloppføring kan overleve økta som rettferdiggjorde henne. Legg tabellregelen, tunnelruta og maskeringsoppføringa inn i route-up skriptet til klienten, og tøm tabellen øvst i skriptet så ein gammal gateway ikkje kan overleve inn i den nye økta.
Kontroller frå båe endar: eit oppslag på gatewayen med LAN-kjelda, og ei ekte førespurnad frå ein LAN-klient til eit målpunkt som skal gå gjennom tunnelen. Ei rute som finst men aldri blir vald, oppfører seg nøyaktig som inga rute i det heile, heilt til du les teljarane.