Udostępnij za pośrednictwem


Auto-Triggered или «незаметный» VPN

Периодически мне необходимо подключаться через VPN к моей домашней сети. Чаще всего для проведения демонстраций во время выступлений или проведения тренингов. Реже, чтобы достать определенные файлы или «посмотреть», что там с дочкиным планшетом. Подключаюсь либо с рабочего компьютера, либо со своего планшета. И там, и там Windows 8.1, а в этой версии появилась очень интересная возможность – автоматически срабатывающий (Auto-Triggered) VPN.

Все настройки покажу на примере планшета Surface с Windows 8.1 RT, хотя ровно также они выглядят в других редакциях 8.1. Пару слов о конфигурации домашней сети – Интернет-канал от «Ростелекома», есть внешний фиксированный IP, из ростелекомовской коробки кабель идет в роутер Linksys, который пробрасывает трафик, пришедший на внешний IP, на машину с Windows Server 2012 R2, служба Routing and Remote Access которого выступает в качестве VPN-сервера.

В домашней сетке поднят домен AD с именем “mva.com”. Использую его, например, для демонстрации туннеля с Windows Azure(проблематично сделать это в корпоративной сети с силу политик и пр.) и других бесчеловечных экспериментов. Домен “mva.com” снаружи мною не зарегистрирован и резольвится только в домашней сетке. Оставляю за кадром настройку VPN-сервера, здесь ничего необычного нет и, строго говоря, в этой роли совсем необязательно использовать Windows Server.

Перейду к настройке клиента. Первый шаг – создание VPN-подключения. Начиная с 8.1, это можно сделать в новом интерфейсе Windows, что особенно актуально для планшетов. К слову, прежний способ в традиционном интерфейсе никуда не пропал. Переходим в Change PC Settings -> Network -> Connections, нажимаем “Add a VPN connection”.

clip_image002

Выбираем поставщика VPN. В моем случае это Microsoft, но также в списке вы найдете встроенные клиенты от Check Point, F5, Juniper и SonicWALL. Заполняем необходимые поля.

clip_image004

Созданное подключение “Home” готово к использованию.

clip_image006

Единственное, что сделаю дополнительно, через PowerShell включу для этого подключения split tunneling.

Set-VpnConnection -Name "Home" -SplitTunneling $true

Пока ничего необычного. Проверяем подключение и убеждаемся, что ресурсы домашней сети доступны. В частности, контроллер домена пингуется. Во всех примерах ниже для подключения к Интернет использовался смартфон в качестве 3G-модема.

clip_image008

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

clip_image010

Хотелось бы получить следующее: первое, сделать так, чтобы при обращении по имени к ресурсам домена “mva.com” автоматически поднималось VPN-подключение “Home”; второе, для разрешения имен “mva.com” при этом использовался бы DNS-сервер контроллера домена домашней сетки.

Реализуется желаемое одним командлетом:

Add-VpnConnectionTriggerDnsConfiguration -Name "Home" -DnsSuffix "mva.com" -DnsIPAddress 10.40.1.200

Этот командлет, собственно, и настраивает триггер, то есть автоматическое срабатывание VPN-подключения с именем “Home” при обращении к именам с суффиксом “mva.com”. Разрешение имен для “mva.com” будет производиться с помощью машины с адресом 10.40.1.200, которая и является контроллером домена моей домашней сети.

clip_image012

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

clip_image014

В качестве проверки попробуем подключиться по имени к тестовому веб-сайту в домашней сети. Сайт откликается, VPN был автоматически поднят.

clip_image016

Что еще пожелать? Автоматическое подключение VPN при запуске определенного приложения. Конкретно для моего сценария это не особо нужно. Но уверен, во многих случаях подобная возможность может быть крайне востребована, особенно когда речь идет о клиентской части некоторого бизнес-приложения, серверная компонента которого расположена во внутренней сети компании.

Настроить триггер можно как для стандартных десктоп-приложений, так и для приложений нового интерфейса. В последнем случае необходимо узнать PackageFamilyName нужного приложения. Для этого можно запустить командлет Get- AppxPackage. Вы получите список всех приложений WinRT (тех самых приложений с новым интерфейсом из Windows Store) для данного пользователя. В списке нужно найти интересующее вас приложение. Для примера на моем планшете я поэкспериментирую с Fiction Book Reader Lite. Ниже информация именно по этому приложению:

clip_image018

Копируем строчку, содержащую PackageFamilyName, и создаем триггер:

Add-VpnConnectionTriggerApplication -Name "Home" -ApplicationID 4737VitaliyLeschenkoCo.FictionBookReaderLite_rt4gm7pfmw0sj

Тестируем. Запускаем приложение

clip_image020

и пытаемся открыть папку с контроллера домена:

clip_image022

Тот факт, что ресурсы доступны, видно в самом приложении. И конечно можно проверить, что VPN-подключение установлено.

clip_image024

Для традиционных десктопных приложений в качестве ApplicationIDдостаточно указать полный путь к исполняемому файлу:

Add-VpnConnectionTriggerApplication -Name "Home" –ApplicationID “C:\Windows\System32\notepad.exe”

Командлет Get-VpnConnectionTriggerпокажет всю информацию о триггерах для заданного подключения.

clip_image026

В частности, в отклике командлета для подключения “Home” можно увидеть, что триггер задан для приложения с соответствующим ID и домена “mva.com”.

В завершение несколько важных замечаний.

Auto-Triggered VPN работает только для подключений, для которых включен split tunneling.

Если при подключении к сети компьютер вместе с настройками IP получает от DHCP-сервера суффикс сети “mva.com”, триггер не будет срабатывать, так как ОС считает, что находится в нужной локальной сети и нет необходимости поднимать VPN.

Автоматически установленное для доменного имени VPN-подключение также автоматически разрывается, если в течение заданного интервала времени, по умолчанию 5 мин., через подключение не передается трафик. Интервал настраивается с помощью параметра -IdleDisconnectSeconds при создании подключения или в любой момент после создания с помощью командлета Set -VpnConnection. Однако надо иметь в виду, что этот интервал игнорируется до тех пор, пока запущено приложение, для которого задан триггер, даже если при этом трафик через VPN не передается.

Если вы вручную разорвали автоматические установленное соединение, то признак Auto-Triggered с подключения снимается, и далее автоматическая установка соединения не работает до тех пор, пока вы также вручную не установите заново упомянутый выше чекбокс “Let apps automatically use this VPN connection” в свойствах VPN-профиля.

Наконец, вы можете настроить триггеры для нескольких VPN-подключений в системе, но автоматическое подключение будет работать всегда только для одного из них, по умолчанию для первого созданного. Если позднее вы чекбоксом, либо командлетом включаете Auto-Triggering для некоторого другого профиля, то автоматическое подключение перестает работать для всех остальных VPN-профилей.

Мне кажется, технология довольно полезная, особенно для машин, не включенных в домен или которые невозможно включить в домен. Настройку через PowerShell, конечно, не назовешь user friendly, но пользователей можно освободить от этих хлопот, подготовив и распространив нужные VPN-профили с помощью System Center 2012 R2 Configuration Manager или Windows Intune.

Дополнительную информацию можно найти в подробном посте Windows Networking Team здесь(на англ.).

Надеюсь, материал был полезен.

Спасибо!

Comments

  • Anonymous
    January 01, 2003
    Моя бабушка настроила VPN по этой статье буквально за пять минут.
  • Anonymous
    April 17, 2014
    Мой кот спрашивает, а есть ли среди встроенных клиентов Cisco AnyConnect VPN Client или его аналоги, ему просто очень надо для доступа к сайту с какими-то там вискасными делами.