Два профілі, що відрізняються одним рядком, поводяться по-різному тієї миті, коли на тому ж хості запускається другий клієнт. Один несе 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 показує високий локальний порт і налаштований віддалений порт, що і є очікуваною формою. Сервер показує сокет, що слухає, на своєму налаштованому порту, і якщо цього сокета немає, профіль або не слухач, або не зміг прив'язатися. Коли потік є, але пакети не повертаються, порівняйте вибраний вихідний порт із будь-яким фільтром портів на шляху, перш ніж редагувати профіль. Змініть одну річ, перепідключіться і знову прочитайте сокет.

Схожі статті