Smeruj jednu podsiev LAN cez OpenVPN a zachovaj predvolenú trasu
Zachovaj predvolenú trasu LAN, kým jedna podsiev ide tunelom. Porovnaj tabuľku pravidiel s úpravami hlavnej tabuľky a potom vyber NAT alebo trasu na strane servera.
Zariadenia, ktoré routujú pre LAN a zároveň sa pripájajú k VPN, sa dostanú do toho istého sporu samy so sebou: tunel chce vlastniť predvolenú trasu a LAN ju potrebuje späť. Keď sa OpenVPN pripojí, môže nainštalovať predvolenú trasu cez tunel alebo dvojicu polovičných predvolených trás, čo je správne pre notebook a nesprávne pre bránu, ktorej susedia očakávajú odpovede z jej adresy v LAN. Odpoveď nie je vynechať VPN. Odpoveď je dať obom rozhodnutiam rôzne tabuľky.
Jedna predvolená trasa, dvaja vlastníci
Preposielaná prevádzka a prevádzka vzniknutá lokálne nemusia ísť tou istou cestou. Klienti LAN potrebujú tunel len pre ciele, ktoré zvolíte, zatiaľ čo vlastné správcovské relácie hostiteľa a jeho odpovede týmto klientom potrebujú predvolenú trasu LAN. Zmiešanie oboch v hlavnej tabuľke vnutí jednu odpoveď dvom rôznym otázkam.
OpenVPN má prepínač presne na toto. route-noexec zabráni klientovi, aby sa hlavnej tabuľky vôbec dotkol, a hodnoty, ktoré by použil, sa exportujú do skriptu route-up ako route_vpn_gateway, dev a adresy rozhrania. Potom rozhodujete, ktorá tabuľka dostane ktorú trasu, v kóde, ktorý si môžete neskôr prečítať.
Tabuľka pravidiel verzus prepisovanie hlavnej
| 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 |
Samostatná tabuľka je jediná možnosť, ktorá škáluje za jednu podsiev. Pomenujte ju raz a potom na ňu odkazujte menom, aby si nikto nemusel pamätať číslo:
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 vpnAdresy sú tu zástupné. Pred spustením čohokoľvek nahraďte prefix LAN, bránu tunela a názov zariadenia z vlastného nasadenia.
Pravidlo musí sedieť aj s hostiteľom
Pravidlo, ktoré sedí len s prefixom LAN, pokrýva preposielané pakety. Nepokrýva prevádzku, ktorú sama brána vytvára, ani odpovede, ktoré vracia klientom LAN, a tie nesú adresu brány v LAN ako svoj zdroj. Tieto vyhľadania prepadnú do main a stále môžu odísť tunelom.
Pridajte druhé pravidlo pre vlastnú adresu brány v LAN alebo rozšírte prvé pravidlo na množinu, ktorá obsahuje obe. Na poradí záleží: konkrétnejšie pravidlo dajte prvé a výsledok overte vyhľadaním, ktoré zdroj výslovne uvedie.
ip route get 203.0.113.9 from 192.168.50.1Ak to pre cieľ, ktorý má zostať lokálny, hlási zariadenie tunela, sada pravidiel je nesprávna bez ohľadu na to, čo tabuľka obsahuje.
NAT alebo trasa na opačnej strane
Server VPN pozná podsiev tunela a nič iné. Pakety prichádzajúce so zdrojovou adresou LAN nemajú spiatočnú cestu, ak ju niekto neposkytne, a poskytnúť ju možno práve dvoma spôsobmi. Pridanie trasy pre prefix LAN na serveri udrží pôvodný zdroj viditeľný od začiatku do konca, čo auditovaný návrh zvyčajne chce. Maskovanie na bráne prepíše zdroj na adresu tunela a nepotrebuje žiadnu súčinnosť servera.
iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o tun0 -j MASQUERADEVyberte NAT, keď server neovládate a nemôžete tam pridať trasy. Vyberte trasu na strane servera, keď záleží na protokoloch, riadení prístupu alebo symetrii spiatočnej cesty, pretože maskovanie vymaže pôvodnú adresu zo všetkého, čo druhá strana zaznamená.
V oboch prípadoch musí byť preposielanie zapnuté a striktné filtrovanie spätnej cesty môže odpoveď zahodiť, keď by main pre tento zdroj tunel nezvolil. Pred obviňovaním tunela skontrolujte skutočnú hodnotu.
Nech rozdelenie prežije opätovné pripojenie
Ručne pridané pravidlá a trasy zmiznú, keď sa rozhranie znovu vytvorí, a zastaraný záznam v tabuľke môže prežiť reláciu, ktorá ho ospravedlňovala. Vložte pravidlo tabuľky, trasu tunela a záznam maskovania do skriptu route-up klienta a na začiatku skriptu tabuľku vyprázdnite, aby stará brána nemohla prežiť do novej relácie.
Overte z oboch koncov: vyhľadanie na bráne so zdrojom z LAN a skutočnú požiadavku z klienta LAN na cieľ, ktorý má prejsť tunelom. Trasa, ktorá existuje, ale nikdy sa nevyberie, sa správa presne ako žiadna trasa, kým neprečítate počítadlá.