Насочи една 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 клиент до одредиште што треба да помине низ тунелот. Рута што постои но никогаш не се избира се однесува точно како да нема рута, додека не ги прочитате бројачите.