Як покращити надійність OpenVPN через високу затримку?


11

Ми запускаємо VPN OpenVPN через супутникове посилання BGAN, де тривалість пінг - близько 3 секунд. Ми використовуємо його в конфігурації tun , і ми працюємо на Linux (CentOS). Це в основному електронна пошта буде надіслана через посилання, але як тільки пошта містить великі вкладення, VPN, здається, зупиняється.

«Я можу свистіти через тунель, але будь-яка реальна робота змушує його замкнути. Є чи це проблемою MTU?» Питання в OpenVPN FAQ , здається , щоб описати мою проблему точно, але з використанням mssfixі до fragmentсих пір , здається, не зробити багато , щоб поліпшити ситуацію.

Моє основне тестування - скопіювати файл 2MB через VPN за допомогою scp . Він скопіює близько 192 кбайт, а потім повідомить про стан - затримка - . Якщо я зачекаю пару секунд, воно знову почне копіювати, а потім знову зупиниться через ще пару кілобайт.

Це затримка відбувається, незалежно від того, я встановив параметри fragmentабо mssfixпараметри в моїй конфігурації OpenVPN (хоча налаштування fragment 1000, здавалося, зменшує затримку, але не усуває її). OpenVPN mtu-testповідомив про 1542 як розмір MTU.

Я шукав в Інтернеті для отримання додаткової консультації про те , як і коли використовувати mssfixі fragment, але я тільки знайти сторінки говорять те ж саме , як часто задають питання, і не вдаючись в подробиці про те , як і коли використовувати , які параметри.

Мої запитання тоді:

  • Коли я використовую mssfixі fragment?
  • Чи використовую я mssfixі fragmentв поєднанні?
  • Якщо mssfixі fragmentце рішення, які tun-mtu, link-mtuі mtu-discпараметри?

Крім того, я використовував інструмент iperf для вимірювання пропускної здатності. Без VPN він постійно вимірює порядку 210 Кбіт / сек.

При використанні iperf через VPN ( $ iperf -c remoteserver -t60 -i5) він починається зі швидкістю 10 Кбіт / сек, потім стабільно піднімається вгору, поки не повідомить про 1,2 Мбіт / с, а потім, здається, зупиниться, де він повідомляє 0 кбіт / сек за ряд ітерацій (я думаю, що 1,2 Мбіт / сек може бути через деяку буферизацію OpenVPN тощо.

Чи найкращий спосіб вимірювання пропускної здатності є iperf ?

Будь-яка допомога в цій ситуації буде дуже вдячна.


Чи в даний час openvpn використовує TCP або UDP?
pjc50

Наразі використовується UDP
iWerner

Дякую за всі відповіді, але мені довелося тимчасово зупинитись, оскільки у підрозділу BGAN закінчився ефірний час. Сьогодні я сподіваюся продовжити. Я мушу зазначити, що ми вважаємо за краще залишатися з UDP, оскільки використання TCP дозволило б подвоїти дані, що надсилаються по мережі (а значить, і вартість, для якої наш клієнт вже дуже чутливий)
iWerner

Відповіді:


5

1542 як МТУ? Ніколи про це не чули за посиланням WAN. Зазвичай MTU - це максимальна корисна навантаження, розмір ip пакета за вирахуванням заголовка для IP (20 байт) та ICMP (8 байт). Це означає MTU = 1500 для традиційної Ethernet LAN. Крім того, більшість VPN вводять накладні витрати на інкапсуляцію пакетів. Типовий VPN MTU - 1400.

У сучасних мережах важко зробити висновок про те, якою буде MTU в будь-який момент, оскільки шляхи входу та виходу можуть бути різними, а також можуть змінюватися через автоматичне перенаправлення шляху. У такій мережі може бути ефективніше встановити MTU низько на своїх хостах, які знаходяться по обидва боки посилання VPN, наприклад 576.

MSS (максимальний розмір сегмента) - MTU мінус IP + заголовки TCP (40 байт). Зазвичай це узгоджується мережевим стеком і зазвичай не має тих самих питань переговорів, що й MTU, якщо MTU не помиляється. (Узгодження MTU зазвичай порушується заблокованими ICMP або маршрутизаторами чорних дір).

Перше, що я зробив би - зробити захоплення мережевих пакетів на своєму відправляючому кінці та сортувати відображення за розміром кадру (можливо, вам потрібно буде додати цей стовпець у Wireshark). Ви повинні переконатися, що ви не надсилаєте жодних кадрів з великим розміром, якими ви б їх очікували. Сучасні мережеві картки не є незвичайними для надсилання кадрів негабаритного розміру, якщо такі параметри, як Large Send Offload або Jumbo Frames включені. Я бачив 30 000+ байтових кадрів, коли ці параметри включені.


+1 для захоплення пакетів, перш ніж щось змінювати. навіть якщо ви не знайдете жодного величезного кадру, ви можете десь побачити "звичайні" пакети, фрагментовані.
Хав'єр

1
За замовчуванням OpenVPN встановлює MTU пристрою tun на 1500 (це те саме, що MTU на пристроях Ethernet на наших машинах). Я досі не впевнений, чи роздробленість пакетів VPN - це добре чи погано. Відповіді в цій темі, мабуть, означають, що це погано, тоді як інші посилання, які я знайшов в Інтернеті, означають, що це добре.
iWerner

2
@iwerner: Ви намагалися визначити розмір mtu за допомогою ping? Якщо ICMP десь не вимкнений, ви можете скористатись наступним на windows: ping -f -l 1372 <призначення ip>. Продовжуйте зменшувати кількість, поки це не вдасться. У Linux Linux ping -s 1372 -M do <призначення ip>. FYI, FAQ FAQ OpenVPN рекомендує використовувати mssfix 1200, але це не стосується першопричини. Використання VPN-рішень для фрагментації завжди має потенціал для досягнення ефективності. Якщо у вас велика установка VPN, ви не зможете використовувати фрагментацію на кінці центрального концентратора, лише на віддаленому офісному кінці.
Грег Аскеу

2

Щойно з цікавості ви спробували знизити MTU мережевого інтерфейсу? Можливо, супутниковий зв’язок погано розкручує фрагментацію. Як протиінтуїтивна примітка, ви можете спробувати openvpn через TCP для зміни. Я знаю, що це повинно зменшити продуктивність, але якщо ви не маєте контролю над фрагментацією по лінії, це може допомогти вам.


Я збирався запропонувати навпаки :) - цей випадок із високою затримкою є тим, де виявляються проблеми TCP-in-TCP, а UDP уникне цього.
pjc50

Я припускав, що він використовує порт UDP за замовчуванням для openvpn, і, таким чином, запропонував протилежне .. так, зазвичай я погоджуся з вами. Але ей, всі ми знаємо, що sysadmin - це проба і помилка, і зазвичай '
пробуй

Спасибі. Наразі ми використовуємо UDP, і спробу TCP мені не сталося. (Якби у мене було більше представників, я б виголосив вас)
iWerner

@iWerner: спасибі :) також спробуйте поступово зменшувати MTU на iface, і дивіться, коли він зупиняється (якщо він є).
lorenzog

2

Під час використання TCP збільште розмір вікна TCP; це допоможе з "кількістю пакетів у повітрі".

Минув час, коли мені довелося пограти з цими речами, але ось для мене знайдено один посилання Google.

Після того як я перечитав ваше запитання, я бачу, що ви працюєте з BGAN - я б добре ознайомився з цим (або просто google для: "BGAN spoofing").

Що стосується вимірювання пропускної здатності, я вважаю, що iperf є досить пристойним, якщо ви використовуєте розумні розміри пакетів.


Це цікаво - тут згадується, що прискорювач TCP доступний для Redhat, тоді як люди, які ми розмовляли з інмарсатом, говорили, що він доступний лише для Windows і OS X (і це дійсно те, що говорить веб-сайт Inmarsat / BGAN)
iWerner

Вони можуть цього не мати зараз; Я бачу, що дата документа - 07. Якщо ви досить наполягаєте і розмовляєте з достатньою кількістю людей; ви можете знайти когось зі старою його копією. Як правило, коли ви телефонуєте, ви отримуєте підтримку першого рівня. Я спробую деякі мої контакти, але жодних гарантій.
Едді

Я пробігся від нашого супутникового провайдера; важко знайти когось, хто знає, про що вони говорять. Я продовжую намагатися, тим часом тут є що спробувати: sourceforge.net/projects/pepsal З опису проекту він робить дуже багато того, що робить програмне забезпечення Inmarsat: PEPsal - це інтегрований, багатошаровий, прозорий TCP Проксі-сервер для підвищення продуктивності, який розбиває з'єднання на дві частини, використовуючи розширення Linux TCP при надсиланні даних і значною мірою покращуючи продуктивність у зв’язках з різними характеристиками
Едді,

2

Я думаю, ти можеш гавкати на неправильному дереві. Кожного разу, коли у мене виникли помилки з питаннями MTU, трафік припинявся до 192 КБ. Я думаю, що це більше пов'язане з деяким у вікні "в пакетах польотів", або з вікном TCP, або, можливо, з деякими буферами в самій супутниковій висхідній лінії зв'язку.

Безумовно зробити деякі довгий Packet захоплень (як «всередині» і «зовні» в VPN) і подивитися , якщо ви отримуєте все ACK«S

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.