Помічник сервера OpenVPN: мережа плюс маска, ніколи не CIDR
Помічник сервера IPv4 приймає вирівняну мережу й крапкову маску, а не суфікс CIDR. Перевірте діапазон, підтвердьте пул у журналі, а потім безпечно змініть розмір.
Рядок сервера, який змішує суфікс CIDR із крапковою маскою, зупиняє демон ще до того, як він відкриє хоч один порт. Помічник server для IPv4 хоче два окремі аргументи: вирівняну адресу мережі, а потім маску мережі в крапковій формі. Усе інше в цьому рядку — здогад, і саме в здогаді ламаються розміри пулу та маски клієнтів.
Два аргументи, які приймає помічник
Спочатку напишіть мережу, потім маску, нічого не приєднуючи до адреси:
server 10.72.16.0 255.255.240.0Це форма для /20. Рядок нижче — помилка, і вона падає під час розбору параметрів, а не під час роботи:
server 10.72.16.0/20 255.255.240.0Під час налагодження тримайте дві ідеї окремо. Довжина префікса й крапкова маска описують той самий діапазон, але помічник не приймає обидві одразу, а відхилений рядок дає помилку параметрів, яка називає директиву, а не арифметику.
Вирівняйте мережу, перш ніж вводити маску
Перша адреса — це адреса мережі діапазону, а не зручна адреса клієнта всередині нього. Для /20 діапазон іде від 10.72.16.0 до 10.72.31.255, і лише перша з них є припустимим аргументом мережі. /21 використовує 255.255.248.0 і охоплює від 10.72.16.0 до 10.72.23.255, тому його рядок — server 10.72.16.0 255.255.248.0.
Зміна префікса змінює діапазон і нічого більше. Вона не змінює, скільки адрес отримує один клієнт, бо це властивість топології, а не маски в цьому рядку.
Підтвердьте пул з боку сервера
Запустіть екземпляр на передньому плані з докладним журналюванням і прочитайте рядки, які видає помічник. Пул, який він побудував, друкується під час запуску, і це надійніше, ніж рахувати арифметику вручну:
openvpn --config /etc/openvpn/server.conf --verb 4 --dev tun9 --port 1195Шукайте зведення пулу ближче до верхньої частини виводу. У ньому перелічено діапазон, який зарезервував помічник, і якщо цей діапазон не відповідає вашому задуму, аргументи в рядку неправильні, хоч би що казала арифметика маски.
Потім підключіть одного клієнта й знайдіть рядок, який записує видану йому адресу. Ця єдина адреса поруч із діапазоном пулу каже вам, чи клієнт потрапив усередину зарезервованого блоку, чи кудись, де ви цього не чекали. Якщо вони не збігаються, виправляйте аргументи, а не клієнта. Якщо збігаються, а клієнт усе одно нічого не досягає, пул ніколи не був проблемою.
Читайте маску клієнта з урахуванням топології
Клієнт, який показує /30 на своєму тунельному інтерфейсі, не є доказом зламаного пулу. За адресації «точка-точка» кожен клієнт отримує невеликий блок, і маска його інтерфейсу описує цей блок, тоді як пул сервера покриває ціле. За топології підмережі маска клієнта, навпаки, збігається з маскою пулу. Отже, сама маска каже, яка топологія в грі, а не те, чи пул написано правильно.
Перевірте налаштовану топологію й призначену адресу разом, перш ніж робити висновок:
ip -4 addr show tun0Якщо адреса всередині пулу, а маска вужча за пул, це топологія робить свою роботу. Якщо адреса поза пулом, пул неправильний, і жодна перевірка з боку клієнта цього не виправить.
Зміна робочого пулу
Виберіть діапазон, який не перетинається з поточним пулом, локальною мережею або будь-яким маршрутом, уже надісланим клієнтам. Перетин — це збій, який переживає перезапуск і потім через кілька днів проявляється як один сайт, недоступний з одного напрямку.
Змініть рядок, перезапустіть і ще раз прочитайте пул під час запуску, перш ніж пускати користувачів назад. Якщо новий діапазон із чимось конфліктує, той самий вивід під час запуску покаже це одразу, а відкат — це правка одного рядка плюс ще один перезапуск.
Тримайте старий діапазон зарезервованим ще деякий час після зміни. Клієнти, які підключаються пізно, все ще можуть тримати адресу з попереднього пулу, а новий діапазон, який повторно використовує ці адреси, створює подвійні призначення, що виглядають як збій маршрутизації. Посібник OpenVPN 2.6 документує аргументи помічника та його розширення, і це варто прочитати, перш ніж припускати, що директива використовує той самий запис, що й її сусідка.