Проследи једну LAN подмрежу кроз OpenVPN и задржи подразумевану руту
Задржи подразумевану руту LAN док једна подмрежа иде кроз тунел. Упореди табелу политика са изменама главне табеле, затим изабери NAT или руту на страни сервера.
Уређаји који рутирају за LAN и истовремено се повезују на VPN западају у исти спор сами са собом: тунел жели да поседује подразумевану руту, а LAN му је потребна назад. Када се OpenVPN повеже, може да инсталира подразумевану руту кроз тунел или пар полу-подразумеваних рута, што је исправно за преносни рачунар а погрешно за мрежни пролаз чији суседи очекују одговоре са његове LAN адресе. Одговор није прескочити VPN. Одговор је дати двема одлукама различите табеле.
Једна подразумевана рута, два власника
Прослеђени саобраћај и саобраћај настао локално не морају да иду истим путем. LAN клијентима је тунел потребан само за одредишта која изаберете, док сопственим сесијама управљања хоста и његовим одговорима тим клијентима треба подразумевана рута LAN-а. Мешање оба у главној табели намеће један одговор на два различита питања.
OpenVPN има прекидач управо за ово. route-noexec спречава клијента да уопште дира главну табелу, а вредности које би користио извозе се у скрипту route-up као route_vpn_gateway, dev и адресе интерфејса. Затим ви одлучујете која табела добија коју руту, у коду који можете касније да прочитате.
Табела политика наспрам преписивања главне
| 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 |
Засебна табела је једина опција која се скалира даље од једне подмреже. Дајте јој име једном, а затим је помињите по имену да нико не мора да памти број:
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Адресе овде су заменице. Замените префикс LAN, пролаз тунела и име уређаја из сопственог распоређивања пре него што било шта покренете.
Правило мора да одговара и хосту
Правило које одговара само префиксу LAN покрива прослеђене пакете. Оно не покрива саобраћај који сам пролаз ствара, нити покрива одговоре које враћа LAN клијентима, а они носе LAN адресу пролаза као свој извор. Те претраге падају на main и још увек могу да изађу кроз тунел.
Додајте друго правило за сопствену LAN адресу пролаза или проширите прво правило на скуп који укључује оба. Редослед је важан: ставите конкретније правило прво и проверите резултат претрагом која изричито наводи извор.
ip route get 203.0.113.9 from 192.168.50.1Ако то пријави уређај тунела за одредиште које би требало да остане локално, скуп правила је погрешан без обзира на то шта табела садржи.
NAT или рута на даљој страни
VPN сервер познаје подмрежу тунела и ништа друго. Пакети који пристижу са LAN изворном адресом немају повратни пут осим ако га неко не обезбеди, а постоје тачно два начина да се он обезбеди. Додавање руте за префикс LAN на серверу задржава оригинални извор видљивим од краја до краја, што ревидирани дизајн обично жели. Маскирање на пролазу преписује извор на адресу тунела и не захтева сарадњу сервера.
iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o tun0 -j MASQUERADEИзаберите NAT када не контролишете сервер и не можете тамо да додате руте. Изаберите руту на страни сервера када су важни дневници, контрола приступа или симетрија повратног пута, јер маскирање брише оригиналну адресу из свега што даља страна бележи.
У сваком случају прослеђивање мора бити омогућено, а строго филтрирање повратног пута може да одбаци одговор када main не би изабрао тунел за тај извор. Проверите стварну вредност пре него што окривите тунел.
Учините да подела преживи поновно повезивање
Правила и руте додате ручно нестају када се интерфејс поново створи, а застарео унос у табели може да надживи сесију која га је оправдавала. Ставите правило табеле, руту тунела и унос маскирања у скрипту route-up клијента и испразните табелу на почетку скрипте да стари пролаз не може да преживи у нову сесију.
Проверите са оба краја: претрагу на пролазу са LAN извором и стварни захтев од LAN клијента ка одредишту које треба да прође кроз тунел. Рута која постоји али се никада не бира понаша се тачно као да руте нема, док не прочитате бројаче.