Как в Cisco добавить маршрут PPTP VPN

Обновлено 13.07.2019

cisco logoЧасто бывает так, что при включении VPN на клиентском ПК начинаются различные глюки с маршрутизацией. Обычно это случается по тому, что Windows по-умолчанию включает маршрут в VPN туннель как маршрут с максимальной метрикой. В результате чего весь ваш трафик, не только локалка, но и Интернет — все идут в VPN. Такое положение дел неправильно. Ведь вы нагружаете VPN сервер ненужным трафиком, да и не обязательно, что в VPN туннеле будет доступ в Интернет. В такой ситуации всё просто: включили VPN — потеряли доступ в Интернет.

В MACOS всё происходит с точностью до наоборот. Операционка сохраняет маршрут по-умолчанию, но в таком случае вы не сможете получить доступ к локальной сети за пределами подсети туннеля.

В обоих случаях проблема решается путём отключения соответствующей функции в настройках VPN клиента. После чего требуется прописать вручную маршруты во все нужные вам подсети, к которым предполагается получать доступ через туннель. Этот процесс можно автоматизировать множеством способов. Ниже я приведу тот, которым пользуюсь сам.

Технология, решающая эту задачку, называется DHCP static classless routes на Cisco IOS. Использую в качестве VPN сервера Cisco router 3925. Идея состоит в том, чтобы передавать клиенту по DHCP не только IP адрес, но и ряд маршрутов. В документации по настройке DHCP-сервера на Cisco приведено простое решение:

ip dhcp pool LAN
network 192.168.1.0 255.255.255.0
option 249 ip 24.192.168.5 192.168.1.1 24.192.168.3 192.168.1.1
lease 0 2

Адреса клиентам выдаются из сети 192.168.1.0/24, а сети 192.168.5.0/24 и 192.168.3.0/24 будут маршрутизироваться через 192.168.1.1.

К сожалению у меня при использовании Windows клиентов наблюдались глюки — не все маршруты прописывались корректно. В результате изучения форумов выяснил, что многим помогает решение с изменением формата конфигурации на следующий:

ip dhcp pool LAN
network 192.168.1.0 255.255.255.0
option 249 hex xxxx.xxxx.xxxx

В этом длинном шестнадцатиричном числе закодированы все нужные нам маршруты. Хорошо, что умельцы из народа давно написали простой и удобный скрипт для перевода обычных маршрутов в HEX.

После изменения конфигурации роутера отключаем смену маршрута по-умолчанию на стороне клиента: «свойства VPN соединения» -> «сеть» -> «протокол TCPv4″ -> «свойства» -> «дополнительно» -> «использовать основной шлюз в удалённой сети» (галочку снять). Подключаем VPN и проверяем маршруты с помощью traceroute.

А вот и сам скрипт

#!/usr/bin/perl -w

use strict;

sub option_121 {
my $gw = shift;
my $out_str = '';
my ($subnet, $mask, $b0, $b1, $b2, $b3);
foreach my $cidr (@_) {
($subnet, $mask) = split('/', $cidr);
($b0, $b1, $b2, $b3) = split(/\./,$subnet);
$out_str .= sprintf('%02x', $mask);
$out_str .= sprintf('%02x', $b0);
$out_str .= sprintf('%02x', $b1) if($mask > 8);
$out_str .= sprintf('%02x', $b2)
if($mask > 16);
$out_str .= sprintf('%02x', $b3) if($mask > 24);
$out_str .= sprintf('%02x%02x%02x%02x', split(/\./,$gw));
}
return $out_str;
}

if(@ARGV < 2)
{
print "Usage: $0 gw_ip subnet1/mask1 subnet2/mask2 ... subnetN/maskN\n";
}
elsif($ARGV[0] =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/)
{
print "DHCP option 121 (249) hex string: ".option_121(@ARGV)."\n";
}

Материал сайта Pyatilistnik.org

Автор - Сёмин Иван

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *