OpenVPN: local наспрам адресе тунела, два различита сокета
Адреса која контактира сервер није адреса унутар тунела. Читање local, remote и nobind као одвојених улога објашњава већину грешака при повезивању.
Клијент одбија да се покрене и жали се да не може да повеже локалну адресу, а очигледно решење изгледа као да га треба усмерити на адресу тунела коју очекује да добије. То не може да ради, а разлог вреди разумети: пре него што тунел постоји нема унутрашње адресе, а сокет који контактира сервер мора да постоји први. У игри су две различите адресе, а само једна од њих може се изабрати локално.
Грешка при повезивању именује локалну адресу
Када OpenVPN јави да не може да повеже локалну адресу, говори о транспортном сокету: UDP или TCP крајњој тачки која носи шифровану везу до пира.
Експлицитна local директива тражи од демона да тај сокет повеже са одређеном локалном адресом. Адреса мора да постоји у мрежном именском простору у ком процес ради и мора бити додељива у тренутку када клијент креће.
Јавна адреса преведена на рутеру или на ивици облака није локална адреса коју демон може да повеже, иако је то адреса коју сервер види. Та разлика објашњава зашто један профил ради код куће, а пада на инстанци у облаку. Објашњава и зашто додавање јавне адресе на loopback интерфејс не помаже, јер би транспорт тада узимао извор са адресе на коју мрежа не може да рутира назад. Прочитајте листу интерфејса пре него што измените профил.
Шта local и remote заиста бирају
remote именује пира са којим треба контактирати. local повезује ближи крај истог сокета. nobind пушта оперативни систем да изабере и локалну адресу и порт, због чега клијенти иза кућних рутера обично раде без иједне од те две директиве.
Ниједна од тих директива нема никакве везе са адресом унутар тунела.
У контејнеру или мрежном именском простору важи исто правило са ужим границама: адресе хоста нису присутне унутра, па линија local копирана из конфигурације хоста пада из потпуно другог разлога него што би пала погрешна адреса.
ip -brief address show
ip route get 203.0.113.10Унутрашња адреса долази од сервера
Адреса унутар тунела се преговара или додељује након што се успостави контролни канал. Са динамичким пулом сервер то одлучује у тренутку повезивања, а са конфигурацијом специфичном за клијента може бити фиксна по идентитету.
Писање local са унутрашњом адресом не тражи од сервера да додели ту адресу. У најбољем случају повезивање пада; у најгорем клијент нађе неповезану адресу хоста исте вредности и почне да је користи за транспорт.
Интерфејси које треба читати су такође другачији. Параметри ifconfig и конфигурација пула описују унутрашњост, док remote, local, proto и nobind описују спољашњост. Држање те две листе одвојеним објашњава скоро сваки збуњујући пример који ћете наћи на форуму. Зато их OpenVPN 2.6 приручник документује у одвојеним одељцима.
Замка: пун тунел који хвата сопствени транспорт
Када је тунел подигнут и носи задату руту, пакети који га одржавају не смеју се рутирати у њега. То је проблем рутирања, а не адресирања, и демон га решава тако што инсталира специфичнију руту до серверове сопствене адресе кроз оригинални гејтвеј.
Ако транспорт приквачите за одређену локалну адресу и касније промените путању коју та адреса користи, спољна веза може изгубити пут док унутрашњост остаје конфигурисана. Тунел наставља да јавља да је повезан јер је унутрашњост у реду. Само је транспорт покварен, због чега се логови читају као противречности.
Симптоми тада изгледају као тунел који се повеже и замрзне, или као онај који се поново повезује у петљи без корисне грешке. Проверите руту до пирове адресе пре него што проверите било шта унутар тунела, и потврдите да локална адреса коју сте повезали још припада интерфејсу који сте очекивали.
Навика која спречава забуну
Прочитајте сваку адресу у профилу и одлучите ком слоју припада пре него што је измените.
Ако именује даљи крај транспорта или повезује његов ближи крај, то је спољна адреса и мора да постоји пре покретања. Ако описује шта се дешава унутар тунела, долази од сервера или од топологије, и ниједна локална директива не може да је замени.
Запишите те две листе у напомене о имплементацији поред профила. Следећа сесија решавања проблема тада почиње слојем, а не нагађањем.