Windows, автоматическое добавление маршрутов при включении VPN.

Если вы заходите на VPN средставами Windows PPTP/L2TP (не CISCO и т. п. сторонними программами), то у вас есть 2 выбора:

  • весь трафик будет идти через VPN
  • только тот, для которого прописаны маршруты.

Первый вариант – по-умолчанию. Но он плох, т. к. если вы скачиваете/загружаете большие объемы информации, то это неплохо грузит маршрутизатор, который раздаёт доступ в VPN (надо шифровать траффик) и увеличивает задержку вашего соединения (пинг).

При втором варианте – нужно при каждом подключени идобавлять маршруты на те подсети, к которым вы хотите иметь доступ, находясь в VPN. Это можно автоматизировать, о чём я и расскажу ниже.

Для начала нужно отключить передачу всего траффика через VPN. Открываем Центр сетей и общего доступа (Networking and sharing center) в Панели Управления и, зайдя в свойства VPN-соединения, отключаем шлюз по-умолчанию:

Disable default gateway

Далее нам надо создать скрипт .netsh, который будет выполняться и добавлять роуты при подключении. Создаём, например, файл C:\scripts\vpn_route.netsh с содержимым:

interface ipv4
add route prefix=192.168.23.0/24 interface="Work_VPN" store=active
add route prefix=172.16.99.0/24 interface="Work_VPN" store=active
exit

где “Work_VPN” – название VPN соединения в Центре управления сетями и общим доступом. Маршрутов может быть сколько угодно, в примере указаны два.

Далее для выполнения всей магии, необходимо создать задачу в Планировщике, которая будет выполняться при подключении. Открываем консоль cmd от администратора и выполняем команду:

schtasks /create /F /TN "VPN Routes Add" /TR "netsh -f C:\scripts\vpn_route.netsh" /SC ONEVENT /EC Application /RL HIGHEST /MO "*[System[(Level=4 or Level=0) and (EventID=20225)]] and *[EventData[Data='Work_VPN']]"

где указываем путь к созданному ранее netsh файлу и снова же имя VPN соединения. Остальное менять не нужно.

Всё.

Ссылки:

  1. https://oxo42.github.io/windows/2015/03/25/windows-add-route-on-vpn-connect

Cisco Mobility Anyconnect клиент не хочет подключаться из RDP

Если у вас при попытке подключения к VPN с помощью Cisco Mobility Anyconnect клиента в RDP-сессии выскакивает ошибка:
AnyConnect was not able to establish a connection to the specified secure gateway. Please try connect again and and VPN Establishement Capability from a Remote Desktop is disabled
то вам сюда 🙂
Чтобы получить возможность подключаться к VPN из RDP-сессии, нужно отредактировать конфигурационный файл, т. к. этой опции нет в GUI настройках. Находится файл в папке C:\ProgramData\Cisco\Cisco AnyConnect Secure Mobility Client\Profile, а вот называться он может по-разному, в зависимости от конкретного VPN, к которому подключаетесь. В любом случае, лежит он там и имеет расширение .xml. Или их несколько – если у вас несколько VPN. Например, Contractor.xml. Находим там строчку:
<WindowsVPNEstablishment>LocalUsersOnly</WindowsVPNEstablishment>
и меняем её на:
<WindowsVPNEstablishment>AllowRemoteUsers</WindowsVPNEstablishment>
Всё, теперь клиент должен подключаться, если вы зашли по RDP.
Источники:

  1. https://supportforums.cisco.com/t5/vpn/anyconnect-was-not-able-to-establish-a-connection-to-the/td-p/2634409

Cisco AnyConnect Secure Mobility Client profiles

Есть не совсем очевидная настройка для Cisco AnyConnect Secure Mobility Client – профили. Нужны они для того, чтобы не вводить каждый раз адрес VPN. Удобно, если периодически приходится переключаться между разными VPN.
Профили для ОС Windows находятся в файле (если его нет – создайте):
C:\ProgramData\Cisco\Cisco AnyConnect Secure Mobility Client\Profile\profiles.xml

Похоже, что в новых версиях код между <ServerList> </ServerList>надо добавлять в файл:

C:\ProgramData\Cisco\Cisco AnyConnect Secure Mobility Client\Clients.xml

Для ОС Linux/Mac путь: /opt/cisco/anyconnect/profile/profiles.xml

Формат такой:

<?xml version=”1.0″ encoding=”UTF-8″?>
<AnyConnectProfile xmlns=”http://schemas.xmlsoap.org/encoding”>
<ServerList>
<HostEntry>
<HostName>VPN1</HostName>
<HostAddress>177.177.177.177</HostAddress>
<User>username</User>
<SecondUser></SecondUser>
<Domain></Domain>
<Group>usergroup</Group>
<ProxyHost></ProxyHost>
<ProxyPort></ProxyPort>
<SDITokenType>none</SDITokenType>
<ControllablePreferences>
<LocalLanAccess>true</LocalLanAccess>
</ControllablePreferences>
</HostEntry>
<HostEntry>
<HostName>VPN2</HostName>
<HostAddress>178.178.178.178</HostAddress>
<User>user2</User>
<Domain></Domain>
<Group></Group>
<ProxyHost></ProxyHost>
<ProxyPort></ProxyPort>
<SDITokenType>none</SDITokenType>
<ControllablePreferences>
<LocalLanAccess>true</LocalLanAccess>
</ControllablePreferences>
</HostEntry>
</ServerList>
</AnyConnectProfile>
Для каждого подключения создается <HostEntry> … </HostEntry>, где теги:

  • <HostName> – просто название подключения, которое будет удобно вам
  • <HostAddress> – доменное имя или IP-адрес хоста, к которому подключаемся

Остальные настройки вроде юзернейма к сожалению не работают. Клиент по-умолчанию использует имя пользователя и группы последнего подключения, который хранится в C:\ProgramData\Cisco\Cisco AnyConnect Secure Mobility Client\Profile\preferences.xml.