Два профила која се разликују у једном реду понашају се другачије оног тренутка када на истом хосту крене други клијент. Један носи nobind и узима било који локални порт који му језгро додели; други резервише 1194, а друга инстанца умире са адресом која је већ у употреби. Тај ред одлучује ко бира изворни порт, што опет одлучује може ли профил да коегзистира са било чиме другим на машини. Три питања то решавају, а прво одговара за већину профила пре него што дођете до осталих двају.

Шта nobind заправо прескаче

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

Оно што се не мења јесте друга страна. Сервер и даље слуша тамо где профил каже да слуша, а одредишни порт у конфигурацији и даље је одредишни порт. Динамички изворни порт мења повратну адресу вашег сокета и ништа на серверовом.

Такође ништа не скрива. Ваша јавна адреса је оно у шта је пут претвори, пакет и даље прелази локалну мрежу, а ко год њоме управља и даље види ток. nobind није ни функција приватности ни заобилажење заштитног зида.

Три услова која то одлучују

Једно питање одлучује остала два, па одговорите на њега пре било каквог уређивања. Ако се партнер јавља, преостала питања само прецизирају већ донету одлуку. Ако прихвата долазне везе, никакво подешавање локалног порта не чини га доступним.

Да ли тај партнер покреће везу? Ако се јавља, динамички изворни порт је безопасан и обично пожељнији, јер одговор следи исти ток назад. Ако чека долазне везе, динамички порт чини га недоступним осим ако нешто испред не објави порт. Тај један одговор раздваја сваки клијентски профил од сваког серверског.

Да ли пут филтрира по изворном порту? Строго правило написано за један познати порт захтева изричит локални порт, а профил треба да забележи којем правилу удовољава. Већина мрежа филтрира само по одредишту, па је тај услов ређи од првог. Где се примењује, надјачава склоност динамичком порту.

Да ли више инстанци дели хост? Један фиксни порт не може да послужи две од њих, а рестартована инстанца може да нађе 1194 још у стању затварања. Динамички портови уклањају тај сукоб не мењајући ништа друго. Ако на ово не можете поуздано да одговорите, претпоставите да дели и пустите језгро да бира.

Где је прикован порт прави одговор

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

Иначе прикован порт купује невољу: два клијента на једној машини не могу оба да држе 1194, а други пада са грешком која показује на порт, а не на профил. Контејнер који се брзо рестартује удара у исти зид. Поправка је директива коју су испоручени профили већ садржали.

Сервер и клијент нису симетрични

приручник OpenVPN 2.6 ставља nobind поред lport, што је аргумент у једном реду: једна опција каже да бира језгро, друга да бирате ви. Динамички локални порт ради само за партнера који се јавља, јер страна која одговара не може унапред да зна порт. Зато копирање клијентског профила на сервер ствара слушаоца до којег нико не може да дође.

На хосту са више мрежних интерфејса адреса је одвојена одлука од порта. Везивање одређене локалне адресе и везивање одређеног порта две су различите поставке, а сервер са два узлазна линка обично прикива оба. Клијент који прикива оба преузео је исту крутост без икакве користи.

Сажетак се односи на улоге, а не на безбедност: ко се јавља може бити флексибилан у погледу свог извора, а ко одговара не може. Ниједан избор не мења шта друга страна сазнаје о вашем идентитету. Зато се директива појављује у клијентским примерима и готово никад у серверским.

Проверите порт који је језгро изабрало

Након повезивања читајте сокет, а не конфигурацију, јер конфигурација казује намеру, а сокет оно што се догодило. Чињенице које вреди забележити су локални порт, удаљена крајња тачка и да ли још нешто слуша. На Linux хосту све троје је удаљено једну команду.

ss -unp | grep openvpn
ss -lunp | grep openvpn
sudo lsof -nP -i | grep openvpn

Клијент са nobind показује висок локални порт и конфигурисани удаљени порт, што је очекивани облик. Сервер показује сокет који слуша на свом конфигурисаном порту, а ако тај сокет недостаје, профил или није слушалац или није успео да се веже. Када ток постоји али пакети се не враћају, упоредите изабрани изворни порт са било којим филтером портова на путу пре него што уредите профил. Промените једну ствар, поново се повежите и поново прочитајте сокет.

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