Пускаем внешний траффик мимо VPN

Written by elwood

Из-за медленного VPN на работе озаботились настройкой маршрутизации. Нужно было настроить так, чтобы весь трафик, кроме того, для которого реально требовался VPN, шел обычным образом – через шлюз по умолчанию. В результате нашли путь, который нам нужен:

1. В свойствах адаптера VPN-соединения зайти в IPv4 -> Advanced и снять галочку “Use default gateway on remote network”, в IPv6 тоже. После снятия галочки весь траффик, который раньше шел через VPN – будет идти так, как было без него. После этого нам будет нужно явно добавить маршрут (маршруты), для которых VPN необходим.
vpn-1
2. Определить адрес шлюза VPN-соединения – открыть статус адаптера на вкладке Details. В нашем случае это адрес 172.19.71.70
vpn-2
3. Определить номер интерфейса VPN-соединения командой route print. В нашем случае это номер 42.
vpn-3
4. Определить, какая подсеть (или отдельные адреса) нуждается в том, чтобы быть маршрутизируемой через VPN. Для этого уже не получится просто подсмотреть куда-нибудь, нужно знать, к каким IP-адресам вы подключаетесь. Либо задайте сами (если вы знаете), либо спросите у знающего коллеги. В моём случае это адреса 192.168.*.*, поэтому маска будет 255.255.0.0
5. Записать команду

route -p add 192.168.0.0 mask 255.255.0.0 172.19.71.70 if 42

Параметр -p означает, что добавляемый маршрут будет сохранён (persistent). Параметр if 42 означает, что этот маршрут будет применяться только при поднятом интерфейсе 42 (то бишь при подключенном VPN). Если не указывать if, то маршрут будет работать только до дисконнекта VPN. При дисконнекте Windows увидит, что маршрут неприменим, и уберёт его. И даже после переподключения, несмотря на то, что маршрут создан с параметром -p, он не активизируется. Придётся его удалять и добавлять снова вручную – и так при каждом переподключении. А если указать if, то при отключении от VPN система поймёт, что маршрут не нужно убирать, а нужно только деактивировать его до повторного поднятия интерфейса.

6. Переподключиться к VPN

7. Проверить маршрутизацию до публичных серверов (yandex.ru, например) и до внутренних компьютеров, доступных только в контексте VPN.

tracert yandex.ru
tracert 192.168.1.4

Первый маршрут должен идти так же, как и при отключенном VPN. Второй – через шлюз VPN-подключения.

  • Paul Melekhov

    Большое вам спасибо. Ваша статья мне очень помогла. Жаль, что вы забросили свой блог. Роскомпозор заблокировал несколько наших VDS серверов в США на Digital Ocean, которые я администрирую (необоснованно, конечно, просто подсетями с миллионами адресов банил) и срочно пришлось начать использовать VPN, а это в свою очередь породило некоторые неудобства. Благодаря вашей статье я смог восстановить потерянный доступ к серверам и сохранить удобства прямого подключения к интернету. Однако, в процессе применения вашей инструкции, у меня возникла проблема с добавление маршрута. Я добавлял в маршрут для VPN не подсетями, а отдельными IP адресами. Соответственно маску указывал 255.255.255.255. Но команда route отказывалась добавлять маршрут, отвечая лишь: “Сбой добавления маршрута: Параметр задан неверно.” Какой именно параметр задан неверно — пойди угадай. Опытным путём я нашёл, что дело в маске. Команде не нравится маска под 1 адрес. Нужно просто удалить слово MASK и саму маску из команды. Соответственно моя команда выглядела так:

    route -p add 165.***.***.142 198.***.***.111 if 26

    (звездочками закрыл цифры, которые знать не надо)