Периодически мне необходимо подключаться через 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”.
УвеличитьВыбираем поставщика VPN. В моем случае это Microsoft, но также в списке вы найдете встроенные клиенты от Check Point, F5, Juniper и SonicWALL. Заполняем необходимые поля.
УвеличитьСозданное подключение “Home” готово к использованию.
УвеличитьЕдинственное, что сделаю дополнительно, через PowerShell включу для этого подключения split tunneling.
Set-VpnConnection -Name "Home" -SplitTunneling $true
Пока ничего необычного. Проверяем подключение и убеждаемся, что ресурсы домашней сети доступны. В частности, контроллер домена пингуется. Во всех примерах ниже для подключения к Интернет использовался смартфон в качестве 3G-модема.
УвеличитьНо если попытаться обратиться к контроллеру по имени, то получим ошибку, поскольку для разрешения имени используется DNS-сервер Интернет-провайдера, который, естественно, ничего не знает о моем домашнем домене.
УвеличитьХотелось бы получить следующее: первое, сделать так, чтобы при обращении по имени к ресурсам домена “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, которая и является контроллером домена моей домашней сети.
УвеличитьЕсли после выполнения командлета посмотреть на VPN-подключение, то можно увидеть новый чекбокс, указывающий на наличие триггера для этого подключения.
УвеличитьВ качестве проверки попробуем подключиться по имени к тестовому веб-сайту в домашней сети. Сайт откликается, VPN был автоматически поднят.
УвеличитьЧто еще пожелать? Автоматическое подключение VPN при запуске определенного приложения. Конкретно для моего сценария это не особо нужно. Но уверен, во многих случаях подобная возможность может быть крайне востребована, особенно когда речь идет о клиентской части некоторого бизнес-приложения, серверная компонента которого расположена во внутренней сети компании.
Настроить триггер можно как для стандартных десктоп-приложений, так и для приложений нового интерфейса. В последнем случае необходимо узнать
PackageFamilyName нужного приложения. Для этого можно запустить командлет
Get-AppxPackage. Вы получите список всех приложений WinRT (тех самых приложений с новым интерфейсом из Windows Store) для данного пользователя. В списке нужно найти интересующее вас приложение. Для примера на моем планшете я поэкспериментирую с Fiction Book Reader Lite. Ниже информация именно по этому приложению:
УвеличитьКопируем строчку, содержащую
PackageFamilyName, и создаем триггер:
Add-VpnConnectionTriggerApplication -Name "Home" -ApplicationID 4737VitaliyLeschenkoCo.FictionBookReaderLite_rt4gm7pfmw0sj
Тестируем. Запускаем приложение
Увеличитьи пытаемся открыть папку с контроллера домена:
УвеличитьТот факт, что ресурсы доступны, видно в самом приложении. И конечно можно проверить, что VPN-подключение установлено.
УвеличитьДля традиционных десктопных приложений в качестве
ApplicationID достаточно указать полный путь к исполняемому файлу:
Add-VpnConnectionTriggerApplication -Name "Home" –ApplicationID “C:\Windows\System32\notepad.exe”
Командлет
Get-VpnConnectionTrigger покажет всю информацию о триггерах для заданного подключения.
УвеличитьВ частности, в отклике командлета для подключения “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
здесь (на англ.).
Надеюсь, материал был полезен.