Или, выражаясь умными словами, split tunneling.
Преамбула
Есть желание при подключении VPN в Windows использовать его только для доступа к внутренним ресурсам.
Проблемы
Проблема состоит в том, что по-умолчанию можно либо весь трафик перенаправлять через VPN-соединение (и тогда каждый раз нужно настраивать прокси-сервер, если такой вообще есть), либо лишится всякой разумной возможности работы с внутренними ресурсами (весь трафик будет перенаправляться через стандартный канал, который не имеет возможности попасть внутрь сети).
Возможное решение
Итак, хочется настроить split tunneling, чтобы для внутренних ресурсов трафик ходил через VPN и использовался внутренний DNS-сервер (чтобы можно было просто обращаться к внутренним ресурсам), а весь оставшийся трафик продолжал ходить через стандартный шлюз. Понятно, что всё это можно автоматизировать скриптами, но хочется, чтобы эти скрипты отрабатывали автоматически при подключении VPN-соединения и отменяли всё, что может помешать, после его разрыва.
Guide
Прежде чем продолжить, следует отдавать себе полный отчёт о возможных проблемах и рисках, которые несёт с собой подобная махинация. (Подробнее по ссылке из статьи Википедии).
Сейчас я буду творить волшебство, которое не является панацеей от всех проблем, но даёт представление о том, как всё можно организовать от и до. Отшлифовать все процессы под конкретную конфигурацию и собственные нужды придётся самому.
Итак, приступим:
-
Теперь хочется привязать выполнение скриптов к моменту установления подключения. Для этого воспользуемся Журналом событий Windows (это косметика, можно сразу переходить к шагу 3):
-
Созданные задания находятся чуть выше в консоли; нужно их отредактировать (или сразу создавать):
-
Планировщик заданий → Библиотека планировщика заданий → Задачи просмотра событий
-
Триггеры → При событии; журнал: Приложение; источник: RasClient; код события: 20225 (только если создаём руками)
-
Действия. Должно быть 2 штуки, оба типа “Запуск программы”:
- Программа или сценарий:
netsh
; добавить аргументы:interface ipv4 add route prefix=192.168.64.0/23 interface=17 metric=200
(здесь192.168.64.0/23
– параметры внутренней сети;17
– номер VPN подключения;200
– метрика, чем меньше, тем более предпочтительна) - Программа или сценарий:
netsh
; добавить аргументы:dnsclient add dnsservers 11 192.168.64.252 1
(здесь11
– номер основного подключения;192.168.64.252
– адрес DNS-сервера во внутренней сети;1
– номер в списке DNS-серверов):
- Программа или сценарий:
- Условия
- Отключить “Запускать только при питании от электросети” (опционально)
- Включить “Запускать только если подключении к следующей сети” и выбрать VPN-соединение:
-
-
Теперь подобным образом нужно добавить выполнение скриптов, отменяющих наши манипуляции со списком DNS-серверов на основном соединении (если что-то пойдёт не так, то всё будет работать, просто время разрешения имён может возрасти):
Заключение
Про IPv6 и DirectAccess мы поговорим как-нибудь в другой раз 🙂
Добавить комментарий