Когда вы настраиваете VPN, встаёт вопрос выбора размера MTU (maximum transmission unit) внутри туннеля. Это размер полезного блока с данными в одном пакете. Как известно, в сетевом пакете часть информации уходит для служебной информации в заголовках. Различные технологии VPN используют разный объём служебных заголовков. А если VPN пущен поверх другого VPN канала, то этот вопрос встаёт особенно остро.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Реклама ИП Скоромнов Д.А. ИНН 331403723315
Если ошибиться с размером MTU, то пакеты начнут разбиваться на несколько, чтобы передать полезный блок с данными. Это очень сильно снижает скорость передачи данных. Минимум в 2 раза, но на деле гораздо больше.
Правильно выбрать размер MTU можно с помощью готового калькулятора - Visual packet size calculator. К сожалению, в калькуляторе нет OpenVPN. И я как-то сходу не смог найти информацию, сколько места занимают служебные заголовки этого протокола. Покажу пример для WireGuard, если я всё правильно понимаю. Если ошибаюсь, прошу поправить.
Выбор MTU для WireGuard
Мы устанавливаем туннель WireGuard, чтобы гонять по нему ipv4 трафик. Идём в калькулятор и выстраиваем там цепочку:
IPv4 (20 bytes) ⇨ WireGuard (40 bytes) ⇨ IPv4 (20 bytes)
Имея на родительском интерфейсе MTU 1500, внутри туннеля нам необходимо установить его 1420. Если не ошибаюсь, это как раз значение по умолчанию для WireGuard.
Тема выбора MTU довольно сложная. Если вы не сетевой инженер и специально ей не интересовались, то вникнуть непросто. На практике я сталкивался с подобными проблемами. Решал их в меру своих сил и способностей - просто уменьшал MTU до некоторых значений, когда проблем пропадала. Если вы не разбираетесь детально в этой теме, рекомендую поступать так же. И важно знать, что если у вас PPPoE соединение от провайдера, то оно дополнительно 8 байт занимает на свои заголовки. Часто дефолтные значения различного софта не учитывают этого нюанса и нужно будет поправить вручную.
Пример расчёта MTU для PPTP
Вот ещё реальный пример на тему выбора размера MTU. При создании PPTP интерфейса Mikrotik предлагает выбрать MTU 1450. Я немного погуглил, но не понял, а почему именно это значение ставить? Есть рекомендации сделать либо больше, либо меньше. Не понятно.
Взял под Windows утилиту mturoute. Это лучшее решение для быстрого определения MTU. Она отправляет нефрагментированные ICMP пакеты разного размера, определяя максимальный размер, который доходит до адресата. В настройках Mikrotik для начала указал MTU 1500, запустил туннель и выполнил проверку:
> mturoute 192.168.10.1 * ICMP Fragmentation is not permitted. * * Speed optimization is enabled. * * Maximum payload is 10000 bytes. * - ICMP payload of 1472 bytes is too big. + ICMP payload of 92 bytes succeeded. + ICMP payload of 1299 bytes succeeded. - ICMP payload of 1466 bytes is too big. + ICMP payload of 1463 bytes succeeded. + ICMP payload of 1464 bytes succeeded. - ICMP payload of 1465 bytes is too big. Path MTU: 1492 bytes.
В Linux можно использовать tracepath:
# tracepath 192.168.10.1 1?: [LOCALHOST] pmtu 1500 1: ??? 0.586ms 1: ??? 0.256ms 2: 10.8.2.1 5.685ms 3: 10.8.0.3 11.253ms 4: 10.8.0.3 14.199ms pmtu 1492 4: 192.168.10.1 17.783ms reached Resume: pmtu 1492 hops 4 back 4
Обе утилиты показали максимальный размер пакета 1492. Его я и установил в настройках PPTP интерфейса. Если бы я оставил то, что предлагалось по умолчанию 1450, то проблемы бы тоже не было. Но теоретически, с 1492 скорость будет немного выше. А вот если поставить 1500, то наверняка будут проблемы, так как стандартные пакеты начнут дополнительно фрагментироваться.
Задался вопросом. А почему, собственно, рабочее MTU 1492? Ведь по идее PPTP уменьшает стандартный размер пакета как минимум на следующие заголовки: IPv4+TCP+GRE. То есть там как минимум будет уменьшение на 20+20+8 = 48 байт. MTU должно быть 1452. Дело тут скорее всего в том, PPTP для передачи данных использует отдельное соединение с помощью протокола GRE. Сначала выполняется управляющее подключение по TCP порту 1723. А потом данные передаются по отдельному GRE соединению. Если верить калькулятору, то GRE с ключом как раз забирает для своих заголовков 8 байт и MTU будет 1492.
Данный вопрос 100% актуален, если у вас используется PPPoE соединение с интернетом, а поверх него VPN туннель. Там точно нужно будет делать поправку на PPPoE. У меня есть одна точка с таким соединением. Без VPN mturoute показывает MTU 1480.
Надеюсь вам эта информация будет полезна и где-то пригодится. Писал больше для себя, чтобы разобраться. Тема с MTU сложная. Нужно хорошо понимать, как вообще устроена передача данных, из чего состоят пакеты, как передаются, фрагментируются и т.д. Я в отдельности всё это изучал, но без практики информация быстро забывается.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Реклама ИП Скоромнов Д.А. ИНН 331403723315