Зачем нужны маршруты для VPN-клиентов
Когда VPN-клиент подключается к серверу, он получает IP-адрес из виртуальной подсети и набор правил, определяющих, какие сетевые адреса должны быть доступны через туннель. Эти правила называются маршрутами. Без них клиент не сможет обмениваться данными с внутренними ресурсами компании: серверами, базами данных, телефонией или принтерами.
Маршруты решают две основные задачи. Во-первых, они указывают, какой трафик должен идти через VPN, а какой — напрямую через интернет-провайдера. Во-вторых, они обеспечивают обратную связь: чтобы устройства из локальной сети могли ответить клиенту, они должны знать, как достичь его виртуального адреса. Если маршруты настроены неправильно, возможны ситуации, когда клиент видит серверы, но серверы не видят клиента, что особенно критично для входящих звонков IP-телефонии или доступа к рабочим станциям.
Понимание принципов маршрутизации помогает избежать типичных ошибок и построить стабильную инфраструктуру удалённого доступа. В этой статье мы разберём основные подходы, их преимущества и ограничения, а также приведём практические примеры для популярных платформ.
Основные типы маршрутизации: разделение и принудительное туннелирование
Существуют две базовые стратегии маршрутизации VPN-трафика: разделение туннеля (split tunneling) и принудительное туннелирование (full tunneling).
Разделение туннеля предполагает, что через VPN передаётся только трафик, предназначенный для определённых подсетей, указанных в маршрутах. Весь остальной трафик (например, веб-сёрфинг) идёт напрямую через интернет-соединение клиента. Это снижает нагрузку на VPN-сервер и канал, уменьшает задержки для обычного интернета и позволяет использовать локальные ресурсы, такие как принтеры или файловые серверы. Однако с точки зрения безопасности такой подход менее строг: если клиентское устройство заражено вредоносным ПО, оно может атаковать внутреннюю сеть через VPN, а также возможна утечка трафика, если маршруты настроены неверно.
Принудительное туннелирование отправляет весь трафик клиента через VPN, включая интернет-запросы. Это обеспечивает централизованный контроль и фильтрацию, но увеличивает нагрузку на сервер и может замедлить доступ в интернет. Кроме того, если VPN-сервер расположен в другом регионе, возрастают задержки. Принудительное туннелирование часто используется в корпоративных средах, где требуется строгая политика безопасности.
Выбор между этими режимами зависит от задач: для доступа к нескольким внутренним ресурсам обычно достаточно разделения туннеля, а для полного контроля над трафиком сотрудников — принудительное туннелирование.
Как VPN-сервер передаёт маршруты клиентам
VPN-сервер может передавать маршруты клиентам несколькими способами. В OpenVPN это делается с помощью директивы push "route ..." в конфигурационном файле сервера. Например, чтобы клиент получил маршрут к подсети 192.168.24.0/23, сервер отправляет команду push "route 192.168.24.0 255.255.254.0". Клиент автоматически добавляет этот маршрут в свою таблицу маршрутизации при подключении.
В MikroTik, который часто используется в качестве VPN-сервера, маршруты можно передавать через профили PPP, настройки L2TP или OpenVPN. Для этого в профиле указываются маршруты, которые будут назначены клиенту после установления соединения. Например, для L2TP можно использовать параметр routes в профиле.
В Windows, если используется встроенный VPN-клиент, маршруты могут быть заданы статически через команду Add-VpnConnectionRoute или через интерфейс свойств подключения. Однако эти маршруты действуют только для конкретного подключения и автоматически удаляются при отключении.
Важно понимать, что маршруты, переданные сервером, добавляются в таблицу маршрутизации клиента только на время активного VPN-соединения. При разрыве связи они удаляются, что предотвращает утечку трафика в неверном направлении.
Настройка маршрутов на стороне клиента: Windows
В Windows существует несколько способов настройки маршрутов для VPN-подключения. Самый простой — использовать графический интерфейс. В свойствах VPN-подключения на вкладке «Сеть» → «Протокол IP версии 4 (TCP/IPv4)» → «Дополнительно» нужно снять галочку «Использовать основной шлюз в удаленной сети». Это отключает маршрут по умолчанию через VPN, и весь трафик, кроме явно указанных маршрутов, будет идти через локальный шлюз.
Затем можно добавить статические маршруты командой route add. Например, чтобы направить трафик к подсети 192.168.111.0/24 через VPN-шлюз 172.239.0.1, выполните:
route add 192.168.111.0 mask 255.255.255.0 172.239.0.1Однако такие маршруты не сохраняются после перезагрузки или отключения VPN. Для автоматического добавления маршрутов при подключении можно использовать PowerShell-командлеты. Сначала включите разделение туннеля:
Set-VpnConnection -Name "workVPN" -SplitTunneling $TrueЗатем добавьте маршруты:
Add-VpnConnectionRoute -ConnectionName "workVPN" -DestinationPrefix "192.168.111.0/24" -PassThru
Add-VpnConnectionRoute -ConnectionName "workVPN" -DestinationPrefix "10.1.0.0/16" -PassThruЭти маршруты будут автоматически добавляться при каждом подключении к VPN и удаляться при отключении. Для управления маршрутами можно использовать Get-VpnConnectionRoute и Remove-VpnConnectionRoute.
В более старых версиях Windows (7, Server 2008 R2) приходилось использовать скрипты netsh и планировщик заданий, но современные версии предоставляют более удобные средства.
Настройка маршрутов на стороне сервера: OpenVPN и MikroTik
На стороне сервера маршруты задаются для того, чтобы клиенты получали их автоматически и чтобы внутренние устройства могли отвечать клиентам.
OpenVPN: В файле конфигурации сервера (например, server.ovpn) добавьте строки:
push "route 192.168.24.0 255.255.254.0"Это заставит клиентов добавить маршрут к указанной подсети. Также необходимо включить IP-пересылку на сервере и настроить правила iptables, разрешающие трафик между VPN-интерфейсом и внутренней сетью. Если используется NAT, убедитесь, что он не блокирует обратный трафик. В некоторых случаях NAT может мешать входящим подключениям к клиентам, поэтому лучше использовать маршрутизацию без NAT.
MikroTik: Для L2TP или OpenVPN сервера маршруты задаются в профиле PPP. Например, создайте профиль с параметром routes=192.168.24.0/23 и назначьте его пользователю. Также необходимо настроить маршрут на самом маршрутизаторе до VPN-подсети (например, 10.8.0.0/30) через VPN-интерфейс. Это позволит устройствам из локальной сети достигать VPN-клиентов.
Важно также настроить firewall, чтобы разрешить трафик между VPN-подсетью и локальной сетью. В MikroTik это делается правилами в цепочке forward.
Правильная настройка сервера гарантирует, что клиенты получат маршруты автоматически и смогут обмениваться данными с внутренними ресурсами без ручного вмешательства.
Обратная маршрутизация: как сделать клиента доступным из локальной сети
Часто возникает ситуация, когда VPN-клиент может инициировать соединение с серверами в локальной сети, но серверы не могут ответить клиенту. Это происходит из-за отсутствия обратного маршрута: устройства в локальной сети не знают, как достичь виртуального IP-адреса клиента.
Решение заключается в добавлении маршрута на шлюзе локальной сети (например, MikroTik) до VPN-подсети. Если VPN-подсеть — 10.8.0.0/30, а VPN-сервер имеет адрес 192.168.25.30, то на маршрутизаторе нужно добавить маршрут:
/ip route add dst-address=10.8.0.0/30 gateway=192.168.25.30Этот маршрут сообщает устройствам, что пакеты для сети 10.8.0.0/30 должны отправляться на VPN-сервер. Однако если в локальной сети есть несколько подсетей, маршрут нужно добавить на каждом шлюзе, через который проходит трафик.
Альтернативный подход — использовать DHCP-опции для автоматической раздачи маршрута клиентам локальной сети. Например, на DHCP-сервере можно указать опцию 121 (Classless Static Routes), которая передаёт клиентам статические маршруты. Это удобно для больших сетей, где ручная настройка каждого компьютера затруднительна.
Также важно проверить, не блокирует ли межсетевой экран на VPN-сервере входящие соединения от локальной сети к VPN-клиентам. В некоторых конфигурациях с NAT обратный трафик может не проходить, поэтому рекомендуется использовать маршрутизацию без NAT или настроить соответствующие правила.
Автоматизация добавления маршрутов при подключении
Ручное добавление маршрутов каждый раз при подключении к VPN неудобно и чревато ошибками. Современные операционные системы предоставляют средства для автоматизации этого процесса.
В Windows, как уже упоминалось, можно использовать командлеты Add-VpnConnectionRoute, которые привязывают маршруты к конкретному VPN-подключению. Эти маршруты автоматически активируются при установлении соединения и удаляются при разрыве. Это надёжный способ, не требующий написания скриптов.
В OpenVPN маршруты передаются сервером через директиву push, поэтому клиенту не нужно ничего настраивать вручную. Это наиболее простой и централизованный подход.
В MikroTik, если VPN-клиент использует встроенный клиент L2TP или OpenVPN, маршруты можно задать в профиле PPP. При подключении клиент получит их автоматически.
Для нестандартных сценариев можно использовать сценарии на стороне клиента, которые запускаются при подключении VPN. Например, в Windows можно создать задание в планировщике, которое срабатывает на событие установки VPN-соединения (Event ID 20225 в журнале RasMan). Однако этот метод сложнее и менее надёжен, чем встроенные механизмы.
Автоматизация снижает риск ошибок и упрощает администрирование, особенно при большом количестве удалённых сотрудников.
Типичные ошибки и способы их устранения
При настройке маршрутов для VPN-клиентов часто возникают следующие проблемы:
- Клиент не получает маршруты от сервера. Проверьте конфигурацию сервера: в OpenVPN убедитесь, что директива
pushуказана корректно; в MikroTik — что профиль PPP назначен пользователю. Также проверьте, не блокирует ли брандмауэр передачу маршрутов.
- Клиент видит серверы, но серверы не видят клиента. Это указывает на отсутствие обратного маршрута. Добавьте маршрут на шлюзе локальной сети до VPN-подсети, как описано выше.
- Весь трафик идёт через VPN, хотя нужен только частичный. Отключите опцию «Использовать основной шлюз в удаленной сети» в настройках VPN-подключения Windows или настройте разделение туннеля на сервере.
- Маршруты исчезают после перезагрузки. Используйте команду
route -p addдля постоянных маршрутов в Windows или настройте автоматическое добавление через PowerShell.
- Конфликты маршрутов. Если в таблице маршрутизации есть несколько маршрутов к одной сети, может использоваться маршрут с наименьшей метрикой. Проверьте метрики и при необходимости измените их.
- Проблемы с NAT. NAT на VPN-сервере может мешать обратному трафику. Рассмотрите возможность отключения NAT и использования чистой маршрутизации.
- Брандмауэр блокирует трафик. Убедитесь, что правила firewall разрешают трафик между VPN-интерфейсом и внутренней сетью в обоих направлениях.
Систематическая проверка этих аспектов поможет быстро выявить и устранить неполадки.
Практические примеры настройки для разных сценариев
Рассмотрим несколько типовых сценариев.
Сценарий 1: Удалённый сотрудник получает доступ к офисной сети (192.168.24.0/23) через OpenVPN.
На сервере OpenVPN (адрес 192.168.25.30) в конфигурации добавьте:
push "route 192.168.24.0 255.255.254.0"На маршрутизаторе MikroTik (шлюз 192.168.25.1) добавьте маршрут до VPN-подсети 10.8.0.0/30 через 192.168.25.30. Убедитесь, что firewall разрешает трафик. Клиент подключается и автоматически получает маршрут к офисной сети.
Сценарий 2: Использование разделения туннеля в Windows для доступа только к двум подсетям.
Настройте VPN-подключение, отключите использование удалённого шлюза, затем выполните:
Set-VpnConnection -Name "workVPN" -SplitTunneling $True
Add-VpnConnectionRoute -ConnectionName "workVPN" -DestinationPrefix "192.168.111.0/24"
Add-VpnConnectionRoute -ConnectionName "workVPN" -DestinationPrefix "10.1.0.0/16"Теперь только трафик к этим сетям пойдёт через VPN, остальной — напрямую.
Сценарий 3: Организация VPN между двумя офисами.
Настройте на каждом маршрутизаторе MikroTik туннель L2TP или OpenVPN. В профиле PPP укажите маршруты к удалённым подсетям. Настройте маршрутизацию между локальными сетями через туннель. Убедитесь, что firewall разрешает трафик между подсетями.
Эти примеры демонстрируют основные принципы, которые можно адаптировать под конкретные требования.
Заключение и рекомендации
Правильная настройка маршрутов для VPN-клиентов — ключевой элемент стабильной и безопасной удалённой работы. Выбор между разделением и принудительным туннелированием зависит от требований к безопасности и производительности. Для большинства корпоративных сценариев рекомендуется разделение туннеля с явным указанием необходимых подсетей, чтобы минимизировать нагрузку на сервер и сохранить скорость интернета у клиентов.
Важно помнить о необходимости обратной маршрутизации: без неё клиенты не смогут принимать входящие соединения, что критично для IP-телефонии и удалённого управления. Автоматизация добавления маршрутов через серверные директивы или PowerShell-командлеты снижает риск ошибок и упрощает администрирование.
Регулярно проверяйте таблицы маршрутизации на клиентах и серверах, а также логи брандмауэра для выявления проблем. При возникновении неполадок используйте описанные выше методы диагностики.
Надеемся, что это руководство поможет вам настроить маршруты для VPN-клиентов быстро и без ошибок.
Вопросы и ответы
Что такое разделение туннеля в VPN?
Разделение туннеля (split tunneling) — это режим, при котором через VPN передаётся только трафик, предназначенный для определённых подсетей, указанных в маршрутах. Весь остальной трафик идёт напрямую через интернет-соединение клиента. Это позволяет снизить нагрузку на VPN-сервер и сохранить высокую скорость для обычного интернета. Однако с точки зрения безопасности такой режим менее строг, так как трафик клиента не проходит через корпоративные фильтры.
Как сделать так, чтобы VPN-клиент был доступен из локальной сети?
Для этого необходимо добавить маршрут на шлюзе локальной сети до VPN-подсети. Например, если VPN-подсеть — 10.8.0.0/30, а VPN-сервер имеет адрес 192.168.25.30, выполните на маршрутизаторе: ip route add 10.8.0.0/30 via 192.168.25.30. Также убедитесь, что брандмауэр разрешает трафик между локальной сетью и VPN-подсетью. В противном случае устройства не смогут отвечать клиенту.
Почему маршруты, добавленные командой route add, исчезают после перезагрузки?
Команда route add добавляет маршрут только в текущую сессию, и он не сохраняется после перезагрузки. Чтобы сделать маршрут постоянным, используйте ключ -p в Windows: route -p add .... Либо настройте автоматическое добавление маршрутов при подключении VPN с помощью PowerShell-командлетов Add-VpnConnectionRoute.
Как в OpenVPN передать клиенту маршрут к внутренней сети?
В конфигурационном файле сервера OpenVPN добавьте директиву push "route 192.168.24.0 255.255.254.0", где 192.168.24.0/23 — внутренняя сеть. Клиент автоматически получит этот маршрут при подключении. Также убедитесь, что на сервере включена IP-пересылка и настроены правила iptables для разрешения трафика.
Что такое принудительное туннелирование и когда его использовать?
Принудительное туннелирование (full tunneling) отправляет весь трафик клиента через VPN-сервер, включая интернет-запросы. Это обеспечивает централизованный контроль и фильтрацию, но увеличивает нагрузку на сервер и может замедлить доступ в интернет. Его используют, когда требуется строгая политика безопасности, например, для защиты данных компании от утечек.
Как настроить маршруты для VPN-клиентов в MikroTik?
В MikroTik маршруты для VPN-клиентов задаются в профиле PPP. Создайте профиль, укажите в поле Routes нужные подсети (например, 192.168.24.0/23) и назначьте его пользователю. Также необходимо добавить маршрут на самом маршрутизаторе до VPN-подсети через VPN-интерфейс, чтобы локальные устройства могли достигать клиентов.
Почему клиент видит серверы, но серверы не видят клиента?
Это происходит из-за отсутствия обратного маршрута: устройства в локальной сети не знают, как достичь VPN-подсети. Добавьте маршрут на шлюзе локальной сети до VPN-подсети через VPN-сервер. Также проверьте, не блокирует ли межсетевой экран трафик от локальной сети к VPN-клиентам, и не использует ли VPN-сервер NAT, который может мешать обратным соединениям.