Уредите што рутираат за LAN и истовремено се поврзуваат со VPN запаѓаат во истиот спор сами со себе: тунелот сака да ја поседува стандардната рута, а на LAN му е потребна назад. Кога OpenVPN ќе се поврзе, може да инсталира стандардна рута низ тунелот или пар полу-стандардни рути, што е точно за преносен сметач, а погрешно за порта чии соседи очекуваат одговори од нејзината LAN адреса. Одговорот не е да се прескокне VPN. Одговорот е на двете одлуки да им се дадат различни табели.

Една стандардна рута, два сопственици

Пренесениот сообраќај и сообраќајот создаден локално не мора да одат по ист пат. LAN клиентите имаат потреба од тунелот само за одредиштата што ќе ги изберете, додека сопствените сесии за управување на домаќинот и неговите одговори до тие клиенти имаат потреба од стандардната рута на LAN. Мешањето на двете во главната табела наметнува еден одговор на две различни прашања.

OpenVPN има прекинувач токму за ова. route-noexec го спречува клиентот воопшто да ја допре главната табела, а вредностите што би ги користел се извезуваат во скрипта route-up како route_vpn_gateway, dev и адресите на интерфејсот. Потоа вие одлучувате која табела која рута ја добива, во код што можете да го прочитате подоцна.

Табела со политики наспроти препишување на главната

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

Одделната табела е единствената опција што се шири надвор од една подмрежа. Дајте ѝ име еднаш, потоа повикувајте се на неа по име за никој да не мора да памти број:

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

Поврзани статии