Два узлазна канала, један тунел, а саобраћај излази кроз онај који нисте изабрали. Приватне подмреже су доступне, дневник пријављује успешну везу, и управо мерена веза га носи. Ништа у излазу OpenVPN-а не помиње шљуз, јер га клијент никада није изабрао. Отворио је сокет ка удаљеној адреси и препустио језгру да одлучи како да до те адресе стигне.

Адреса тунела није крајња тачка

У свакој сесији постоје два различита пута. Спољашњи пут носи шифровани саобраћај до јавне адресе сервера. Унутрашњи пут носи све што сервер гура у тунел, а правила рутирања за један не утичу на други.

Унос remote у профилу именује спољашње одредиште, па је то адреса коју треба причврстити. То је и вредност која се мења када се име хоста разреши другачије или профил наведе више remote уноса.

Пронађите адресу на коју је клијент заиста позвао

Читајте живи сокет, а не конфигурациону датотеку. Табела сокета показује партнера са којим се процес заиста повезао, и то је вредност са којом изузетак мора да се поклопи. Профил се може уређивати после почетка сесије, а сокет је једини доказ шта је позвано:

ss -tunp | grep -i openvpn
journalctl -u openvpn-client@work --no-pager | grep -i "Peer Connection Initiated"

Линија у дневнику наводи адресу и порт партнера у тренутку повезивања. Ако се не слаже са профилом, нешто испред клијента преписује одредиште пре него што веза почне.

Проверите и фамилију адреса. Профил са два стека може да се повеже преко IPv6, док ваш изузетак покрива само IPv4, и тада саобраћај следи друго правило од оног које сте написали. Исто важи за прокси који одговара у име крајње тачке. Оба случаја дају тунел који ради док ваша рута не ради ништа.

Причврстите крајњу тачку и прочитајте редослед политике

Рута до хоста је специфичнија од било које подразумеване. Зато /32 за адресу партнера побеђује у табели која га садржи. Уобичајени облик изричито наводи шљуз и уређај:

ip route add 203.0.113.40/32 via 192.168.10.1 dev eth0

Та рута помаже само ако претрага стигне до те табеле. Правила политике се оцењују по реду и прво поклапање одлучује, па правило које све шаље у другу табелу заобилази вашу руту до хоста у main. Прочитајте правила пре него што претпоставите да је рута меродавна:

ip rule show
ip route get 203.0.113.40

Питајте другу команду са истом изворном адресом или ознаком коју клијент користи када политика зависи од њих. Она пријављује руту коју би језгро изабрало, што је доказ о претрази, а не доказ да живи сокет користи тај пут.

Када се крајња тачка помери

Име хоста које се разрешава на више адреса поништава трајни /32 чим се одговор промени. Профил са више remote линија има исти проблем, јер клијент може да слети на било коју од њих. Освежавајте руту из клијентових сопствених кука животног циклуса уместо да је додајете ручно. up скрипта која чита договореног партнера и инсталира руту до хоста држи изузетак усклађен са стварношћу, а одговарајућа down скрипта га уклања.

Забележите освежавање на исто место као и остатак конфигурације рутирања хоста. Рута која постоји само до следећег рестарта је тест, а не поправка.

Држите унутрашњу политику одвојено

Премештање спољашњег пута не даје приступ новој приватној подмрежи и не мења која одредишта сервер гура у тунел. Рута доњег слоја бира жицу; гурнуте руте бирају шта улази у тунел. Управо одвајање те две одлуке чини поделу предвидивом.

Ако је циљ само да држите шифровани саобраћај даље од мерене везе, оставите подразумевану руту на миру и додајте једини изузетак за хост. Замена машински широке подразумеване руте да би се преместила једна VPN веза квари сваку другу апликацију на хосту.

Потврдите резултат са два независна запажања: локалном адресом и уређајем сокета, и рутом у коју се разрешава приватно одредиште. Када се обоје поклопи са вашом намером, подела је стварна. Приручник за OpenVPN 2.6 покрива опције remote и локалног везивања које одлучују на коју адресу клијент позива.

Повезани чланци