Занимался вчера перенастройкой OpenVPN сервера. Потратил немало времени из-за маленького нюанса, про который забыл. Поделюсь информацией для тех, кто тоже использует OpenVPN. Всем остальным читать большого смысла нет.
Люблю OpenVPN Server за гибкость в настройках. У меня обычное дело, когда на небольшой виртуалке под VPN поднято несколько туннелей. Пример разделения.
1️⃣ В этот туннель заводим все устройства Mikrotik. Так как у них своеобразная реализация OpenVPN, для них приходится поднимать отдельный туннель со своими настройками.
2️⃣ Стандартный туннель на UDP для удалённых пользователей. Типовые настройки.
3️⃣ Тот же туннель, что и выше, только на 443 TCP порту для обхода некоторых ограничений.
4️⃣ Ещё один туннель для удалённых филиалов, только уже не на базе Mikrotik. Тут тоже свои настройки, маршруты и т.д.
Я обычно не боюсь сильно дробить абонентов по разным туннелям, так ими удобнее управлять. Главное сильно не переусложнить, иначе можно запутаться.
Я одних абонентов, за которыми есть свои подсети, к которым нужен доступ через VPN, пересадил с одного туннеля на другой. Добавил новый и подключил их к нему. Перенастроил клиентов, они подключились. На вид всё нормально. Но вижу, что к некоторым сеткам за этими клиентами не могу подключиться.
Начинаю всё проверять. Для начала проверил на всех сторонах firewall. Вроде всё правильно. Для надёжности включил логирование всех заблокированных пакетов, там моих пакетов нет. Из чего делаю вывод, что проблема в маршрутизации.
Смотрю внимательно на маршруты. Иногда это непростая задача, когда путь пакета длинный, особенно если проходит через несколько VPN, как было у меня. Хоть садись и схему пути рисуй, сопоставляя с маршрутами на каждом устройстве. Какое-то время не могу понять в чём проблема, но в итоге заметил.
Оказалось, что я ошибся в настройках туннелей и не полностью перенёс подсети, за которые отвечают абоненты из настроек одного туннеля в другой. Заметил это в маршрутах на сервере. Банально, подсеть 192.168.13.0/24 уехала на интерфейс tun4, а я её оставил в старом конфиге с tun2. В итоге OpenVPN все запросы отправлял в tun2 и они там пропадали.
Во время диагностики просто не обратил внимание на разные имена туннелей. Проверяю, что маршрут завёрнут в tun и на этом успокаиваюсь, ожидая, что OpenVPN сама разберётся в какой туннель отправить запрос. Но на самом деле нет. Надо аккуратно самому расписать, какой туннель за какую подсеть отвечает в конфигах сервера. В итоге всё перепроверил и аккуратно расписал все подсетки по своим туннелям. И трафик поехал как надо.
Я мало работал с другими реализациями VPN. Немного pptp делал, и на микротиках l2tp. На Linux всегда использую OpenVPN. Мне он нравится за простоту и удобство реализации. У каждого туннеля свой отдельный конфиг, где описаны все настройки и маршрутизация, относящаяся к этому туннелю. Удобно быстро оценить настройки, сделать копию туннеля, поменяв пару параметров. Можно по отдельности перезапускать туннели, не трогая остальные. При этом база пользователей со своими персональными сертификатами и настройками может быть общей для всех туннелей. Их можно спокойно перемещать между ними. Где-то ещё есть подобная реализация?
#openvpn