Найти тему
Smart home Russia

История одной проблемы с VPN и ее решение [Mikrotik]

Ни в коем случае не хочу обвинить провайдера в том, что у меня в один день перестали работать на нем VPN соединения, тем более что он мне сознался что проблем и блокировок с его стороны нет, очевидно, что во всем виноват я сам и мои кривые руки☺. Как говорится, вся история вымышлена, а все совпадения - случайность.

Translation to English is here. Также основной канал в telegram.

Публикация является решением одной конкретной проблемы, в одной конкретной квартире, одного конкретного провайдера.... Просто расскажу историю и решение, которое пока работает.

Внимательный читатель догадывается о том, каким провайдером интернета я пользуюсь. Скажу сразу, что он не при чем и им я продолжаю пользоваться и по настоящее время. Его имя я не буду напоминать, т.к. за рекламу они мне не платили ☺.

Однако, было время, когда у меня в квартиру заходило сразу 2 провайдера. Это было выгодно, основной провайдер предоставлял все то, что использует вся семья, а второй давал бесплатный белый IP и резервный канал на всякий случай. Будем называть его X. Реальное его имя я не раскрою по двум причинам. Во-первых, проблема, которой со слов того провайдера - нет, может действительно "внезапно" исчезнуть и на эту статью пожалуются. Во-вторых, если вы пользуетесь провайдером Y, то это не значит, что с Вами не может случиться таже история.

Провайдер X у меня был очень давно, он локальный, довольно крупный и существует сразу в нескольких городах, правда не понятно, на сколько они имеют друг к другу отношения, кроме имени. Несмотря на то, что он был не очень технологичный, все же имел 3 несомненных преимущества: цена; белый, динамический IP; отсутствие блокировок к сайтам из списка запрещенных. Но как это бывает со всем хорошим - оно заканчивается. Сначала смекнули, что блокировки все же нужно включить, затем перестал работать VPN, а затем, когда я на них нажаловался, меня спрятали за NAT и отключили мне белый IP, а цена у них к этому времени была уже совсем не конкурентной.

Теперь, когда вводная часть пройдена я напомню ответ на вопрос "Зачем нужен VPN?". Нет, я не обхожу блокировки и надо признаться - мне это даже не интересно. Вот конкретные примеры моего использования:

Так вот, возвращаясь к теме неработающего VPN, расскажу, как это выглядело. В воскресение мне пишет друг и говорит, что не может воспользоваться моим VPN, а другой отвечает, что все работает нормально (у нас был один общий проект, над которым мы работали вместе). Я также не смог подключиться ни с одного из 3 своих устройств. Ровно в 12:00 все заработало у всех. Вывод - блокировка работала не для всех провайдеров, строго по расписанию и не для всех типов соединений (но про это я узнал позже). Дальше, история повторилась, я связался с поддержкой и нажаловался на подобное поведение с их стороны. Ну и, как вы уже знаете, провайдер меня решил наказать по полной, отключив мне белый IP и спрятав за NAT.

Перейдя с провайдера Х на своего текущего провайдера (который был вторым), у меня остался месяц предоплаченного интернета, и я мог свободно проводить с ним эксперименты. Я взял Mikrotik роутер и настроил его просто и банально, согласно стандартной конфигурации:

Теперь, когда IP серый, то подключиться к этому роутеру уже невозможно, ведь IP который соответствует моему роутеру также соответствует еще неизвестному количеству абонентов. Однако, если нельзя подключится к роутеру, то можно попробовать подключиться из него. Создаю в роутере различные типы VPN и пытаюсь подключиться к своему основному Mikrotik. Единственный тип подключения, который устанавливается - L2TP. Однако, оператор сказал, что блокировок нет и все проблемы только на моей стороне. Конечно же, ни капельки не верим, но сомнения есть. Далее - банальный эксперимент. Подключаемся телефоном к мобильной сети - VPN через PPTP работает, подключаемся к новому провайдеру - работает, подключаемся к провайдеру Х - не работает. Сомнений нет - блокируют. Про различные причины блокировок VPN можно широко почитать в интернете, тут нет политики или злого умысла, просто бизнес.

ОК, теперь мы знаем, что L2TP еще пока работает, но связи через него нет. Пинг идет нормально, роутер виден через winbox, но любое соединение или данные сразу рвутся. Посмотрим на настройки подключения:

Профиль безопасности — это первое, что я проверил. Какие только конфигурации я не тестировал, все не имело значения. Но вот MTU и MRU я никогда не трогал. Я даже не знал, что это такое. Ответ нашел тут:

Maximum transmission unit (MTU) – это максимальный объём данных, который может быть передан протоколом за одну итерацию. К примеру, MTU для Ethernet равняется 1500, что означает, что максимальный объём данных, переносимый кадром Ethernet не может превышать 1500 байт (без учёта Ethernet-заголовка и FCS).
Для других протоколов, MTU, как правило, в каждом случае разное. Обычно, чем медленнее скорость протокола, тем меньше MTU, например: Fast Ethernet 100Base-T – 64 байта, Gigabit Ethernet 1000Base-T – 512 байт (но для ряда устаревших протоколов могут быть исключения из этого правила). В PPPoE обычно используется 1492 байта, а в беспроводной сети MTU равен 2304. Если же устройству нужно передать больше информации чем MTU, то его объем делится на блоки, равные MTU этого протокола (либо максимального MTU из используемых.

И вот важный комментарий:

Важно отметить, что при использовании VPN-туннелей значение MTU должно быть уменьшено, чтобы избежать потерь пакетов. Потери пакетов при проблемах с MTU могут выглядеть как зависание TCP-сессии, например, в течении процесса TLS Handshake или при доступе по SSH.

Теперь процитируем про MRU:

Maximum receive unit (MRU) — максимальный размер данных, передаваемых в пакете конкретного протокола, не включая заголовок пакета. Наприимер, для PPP значение MRU определяется протоколом LCP, входящим в семейство PPP, и принимается по умолчанию равным 1500 байт. В случае, если запрашивается меньшее значение, система обязана быть готовой к приёму полноразмерного пакета при потере синхронизации.
Поскольку максимальный размер данных в кадре Ethernet (он используется для протокола PPPoE) равен 1500 байт, из которых 6 байт занимает заголовок PPPoE и 2 — идентификатор протокола, величина MRU не должна превышать 1492 байт. При использовании jumbo-кадров (их размер больше длины стандартного пакета Ethernet) значение MRU должно увеличиваться сверх 1492 байт для уменьшения фрагментации данных.
Важно уточнить, что в случае установки значения MRU более 1492 байт должна производиться проверка способности принимающей стороны и связующего оборудования на предмет обработки пакетов такой длины путём отправки одного или нескольких полноразмерных пакетов с эхо-запросом. В случае, если эхо-ответ не получен, проверяется прохождение эхо-пакетов нормального размера и используется стандартное значение MRU.

Методом последовательного уменьшения MTU и MRU удалось добиться полноценной работы VPN туннелей. Я не могу гарантировать, что метод решения, описанный выше поможет решить конкретно вашу проблему, однако он уже помог нескольким людям, а значит может полноправно считаться полезным.

Как только данный метод мне сломают, я смогу протестировать еще несколько методов, в том числе Open VPN и SSTP, давно уже пора полностью перейти с PPTP, но руки все никак не доходят...

UPD1: Как мне объяснили, такая проблема может случится в том случае если туннель идет через туннель. Например, первый со стороны провайдера. Тогда уменьшение длины MTU и MRU является рабочим способом заставить работать VPN.

Если знаете свои методы - описывайте в комментариях, многим будет полезно.

Всем добра, учимся на ошибках, пытаемся сделать мир лучше.

Подпишитесь, чтобы не пропускать следующий контент.
Нажмите лайк, если интересно, так я пойму какие публикации больше нужны моей публике.

Также публикации можно найти на других площадках: Instagram, telegram (RU, EN, DE), Medium, LiveJournal, YouTube.

Мой блог является некоммерческим, поэтому позитивный комментарий, лайк или репост поможет публикациям выходить чаще ☺.