PPTP Server средствами маршрутизатора cisco | NetConfig

PPTP Server средствами маршрутизатора cisco

Представим себе обычную ситуацию: весь парк сетевого оборудования, представлен в лице маршрутизатора и коммутатора, нууу.. естественно всеми любимой “цыски”, при этом необходимо организовать удаленный доступ к локальной инфраструктуре извне.

Port Forwarding ,конечно, “безопасно, удобно и все так делают”*, но я решил пойти по пути более гибкой реализации, а именно – настроить pptp сервер на имеющемся маршрутизаторе. В качестве тестовой среды у нас будет выступать эмулятор GNS3, подключенный через “добавленный loopback интерфейс”, к хостовой машине.

Таким образом появляется возможность тестировать всякие такие штуки без наличия нормальной тестовой площадки 🙂 .

0. Подготовка маршрутизатора

От простого к интересному – переходим в режим конфигурирования и меняем имя устройства.

R0#configure terminal
R0(config)#hostname Cisco3745

Затем:

0.1 Cisco3745(config)#interface fastEthernet 0/1
0.2 Cisco3745(config-if)#description WAN-NETWORK
0.3 Cisco3745(config-if)#ip address 192.168.138.254 255.255.255.0
0.4 Cisco3745(config-if)#no shutdown
0.5 Cisco3745(config-if)#exit
 
0.1 Cisco3745(config)#interface fastEthernet 0/0
0.2 Cisco3745(config-if)#description LOCALNET
0.3 Cisco3745(config-if)#ip address 192.168.13.254 255.255.255.0
0.4 Cisco3745(config-if)#no shutdown
0.5 Cisco3745(config-if)#exit
Этими командами мы осуществили:
0.1 Переход в режим настройки интерфейса
0.2 Для порядка и неописуемых красот назначили описание интерфейсам
0.3 Назначили сетевой адрес и маску
0.4 Включили сам интерфейс
0.5 Ушли проверять

 

Cisco3745(config)#do sh ip int br
 Interface IP-Address OK? Method Status Protocol 
  FastEthernet0/0 192.168.13.254 YES manual up up 
  FastEthernet0/1 192.168.138.254 YES manual up up

Проверка говорит о том, что оба интерфейса включены и сконфигурированы !

Обратите внимание на команду “do” – с ее помощью мы можем выполнять команды режима “enable” но не переходить в него, при этом необходимо помнить эту команду, так как автодополнение “Tab” нам здесь не поможет.
И второй секрет: нет необходимости писать полностью все слова команды – IOS выполнит команду по нескольким начальным буквам, при условии отсутствия совпадений.

Таким образом мы сократили команду show ip interface brief до sh ip int br и команда отработала корректно.

Далее, используя ту же команду “do”, проверяем доступность узла в сети,
который в нашем случае выполняет роль интернет шлюза\шлюза провайдера.

Cisco3745(config)#do ping 192.168.138.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.138.1, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 28/62/92 ms

И здесь все гуд – наш шлюз доступен!
Приступим к подготовке пула адресов, выдаваемых клиентам при подключении,
далее по инструкции мы подключим этот пул.

0.6 Cisco3745(config)#service dhcp
0.7 Cisco3745(config)#ip dhcp pool VPN-POOL
0.8 Cisco3745(dhcp-config)#import all
0.9 Cisco3745(dhcp-config)#domain-name netconfig.local
0.10 Cisco3745(dhcp-config)#network 192.168.13.0 255.255.255.0
0.11 Cisco3745(dhcp-config)#update arp
0.12 Cisco3745(dhcp-config)#exit
0.13 Cisco3745(config)#ip dhcp excluded-address 192.168.13.1 192.168.13.100
0.14 Cisco3745(config)#ip dhcp excluded-address 192.168.13.200 192.168.13.254
0.6 Включаем сам сервис
0.7 Назначаем имя создаваемому пулу
0.8 Импортируем настройки в базу DHCP
0.9 Передаем доменный префикс (опционально)
0.10 Объявляем сеть, по факту это и есть весь пул, но см. пункту 0.13-14
0.11 Включаем обновление таблицы arp с учетом выданных адресов
0.12 Уходим в режим конфигурирования
0.13-14 Исключаем из пула адреса с 1 по 100 и с 200 по 254. Таким образом клиенты будут получать адреса начиная с 101 по 199

 

Многие используют локальные пулы “ip local pool” место “ip dhcp pool”, но с точки зрения гибкости и возможностей наш вариант более годный. Дело в том, что “ip dhcp pool” умеет передавать всяческую информацию, используя опции.

1. Настройка pptp сервера

Переходим к настройке VPDN ( Virtual Private Dialup Network )

Настройка шаблона:

1.1 Cisco3745(config)#vpdn enable
1.2 Cisco3745(config)#vpdn-group VPN-GROUP-NETCONFIG
1.3 Cisco3745(config-vpdn)#accept-dialin
1.4 Cisco3745(config-vpdn-acc-in)#protocol pptp
1.5 Cisco3745(config-vpdn-acc-in)#virtual-template 1
1.6 Cisco3745(config-vpdn-acc-in)#exit
1.7 Cisco3745(config-vpdn)#exit

Настройка интерфейса:

1.8 Cisco3745(config)#interface virtual-template 1
1.9 Cisco3745(config-if)#encapsulation ppp
1.10 Cisco3745(config-if)#peer default ip address dhcp-pool VPN-POOL
1.11 Cisco3745(config-if)#ip unnumbered fastEthernet 0/1
1.12 Cisco3745(config-if)#no keepalive
1.13 Cisco3745(config-if)#ppp encrypt mppe auto
1.14 Cisco3745(config-if)#ppp authentication ms-chap-v2
1.15 Cisco3745(config-if)#exit
1.1 Включаем метод VPDN
1.2 Создаем группу VPDN
1.3 Разрешаем входящие запросы
1.4 Указываем используемый протокол
1.5 Привязываем к группе виртуальный интерфейс, он и будет принимать и устанавливать соединения
1.6 -7 Выход из режима
1.8 Переходим в режим конфигурирования виртуального интерфейса
1.9 Указываем инкапсуляцию
1.10 Привязываем ранее созданный пул адресов
1.11 Клонируем настройки с внешнего интерфейса
1.12 Отключаем тайм аут соединений
1.13 Применяем автоматический режим шифрования mppe (длинна ключа 40, 65, 128)
1.14 Указываем протокол аутентификации (я выбрал ms-chap-v2)
1.15 Уходим 😉

 

Настройка пользователей:

1.16 Cisco3745(config)#aaa new-model
1.17 Cisco3745(config)#aaa authentication ppp default local
1.18 Cisco3745(config)#aaa authorization network default local
1.19 Cisco3745(config)#username netconfig-1 password Pa$$word123
1.20 Cisco3745(config)#username netconfig-2 password NetPa$$12_142
1.21 Cisco3745(config)#username netconfig-3 password IKML_0589!
1.16 Включаем систему аутентификации и авторизации
1.17 Включаем аутентификацию ppp с помощью локального списка пользователей
1.18 Связываем авторизацию ppp с локальным списком пользователей
1.19-21  Создаем пользователей, назначаем им пароли

Необходимые настройки внесены,  некоторые тонкости см.  в 5 пункте.

Перейдем к настройкам pptp клиентов.

2. Настройка pptp клиента Windows

Переходим удобным для нас способом в меню управления сетевыми соединениями.

Это может быть вызов команды”Выполнить” Win+R:
1. control.exe /name Microsoft.NetworkandSharingCenter
||
2. explorer.exe shell:::{8E908FC9-BECC-40f6-915B-F4CA0E70D03D}
||
3. Переход через меню “Пуск/параметры/Сеть и Интернет/VPN”
||
4. Переход через меню “Пуск” и набрав “центр упр*” – система покажет правильный ярлык 🙂
||
5. Переход в “Центр управления сетями и общим доступом” через контекстное меню сетевого подключения в области уведомления.  У каждого свой путь, главное создать соединение, а затем его немного подкорректировать:

 

 

 

После предварительной настройки мы возвращаемся к первому слайду и переходим к настройке адаптера:

Стоит отметить, что процесс установки происходить быстрее, если выбрать конкретные настройки типа VPN и метода аутентификации. Режим шифрования в нашем случае подойдет как “стойкий” так и “обязательный”.

Если мы не планируем перенаправлять весь трафик через туннель, то стоит отключить “использование шлюза” через это соединение.

Последовательно закрыв все окна кнопкой “OK”, можем приступить к первому подключению.

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

При удачном подключении в свойствах все того же адаптера мы увидим параметры соединения.

Здесь все как мы хотели: тип шифрования, метод аутентификации, адрес сервера и локальный сервер.

М… просто песня.

3. Настройка pptp клиента Cisco

Настройка будет производиться на такой же моделе маршрутизатора, который будет находится с другой стороны нашего “облака” – для полного воссоздания реальной ситуации.

3.1 R2#configure terminal
3.3 R2(config)#service internal
3.3 R2(config)#no ip gratuitous-arps
3.4 R2(config)#vpdn enable
3.5 R2(config)#vpdn-group 1
3.6 R2(config-vpdn)#request-dialin
3.7 R2(config-vpdn-req-in)#protocol pptp
3.8 R2(config-vpdn-req-in)#rotary-group 0
3.9 R2(config-vpdn-req-in)#initiate-to ip 192.168.138.254
3.10 R2(config-vpdn)#exit

Настройками мы:

3.1 Переходим в режим конфигурирования
3.2 Активируем сервис (команда не отображается в IOS еще с версии 12.2, но она есть :))
3.3 Предотвращаем потенциальные атаки через протокол ARP
3.4 Включаем метод VPDN
3.5 Создаем группу VPDN
3.6 Включаем исходящие запросы VPDN
3.7 Указываем используемый протокол
3.8 Указываем номер интерфейса-инициатора
3.9 Указываем адрес сервера для подключения
3.10 Уходим

 

Затем приступаем к настройке интерфейса:

3.11 R2(config)#interface dialer 0
3.12 R2(config-if)#ip address negotiated
3.13 R2(config-if)#ip pim dense-mode
3.14 R2(config-if)# ip nat outside
3.15 R2(config-if)#ip virtual-reassembly
3.16 R2(config-if)#encapsulation ppp
3.17 R2(config-if)#dialer in-band
3.18 R2(config-if)#dialer idle-timeout 0
3.19 R2(config-if)#dialer string netconfig-phone-111
3.20 R2(config-if)#dialer vpdn
3.21 R2(config-if)#dialer-group 1
3.22 R2(config-if)#ppp pfc local request
3.23 R2(config-if)#ppp pfc remote apply
3.24 R2(config-if)#ppp encrypt mppe auto
3.25 R2(config-if)#ppp chap hostname netconfig-2
3.26 R2(config-if)#ppp chap password 0 NetPa$$12_142
3.27 R2(config-if)#no cdp enable
3.28 R2(config-if)#exit 
 
3.29 R2(config)#dialer-list 1 protocol ip
3.30 R2(config)#ip route 192.168.13.0 255.255.255.0 dialer 0
3.11 Переходим в режим настройки интерфейса
3.12 Указываем получение адреса через ppp
3.13 Активируем режим маршрутизации мультикаста
3.14 Помечаем интерфейс, как исходящий (для NAT)
3.15 Собираем фрагментированые пакеты
3.16 Указываем инкапсуляцию ppp
3.17 Передаем сигналы и данные по одному каналу
3.18 Игнорируем тайм аут отключение неактивного соединения
3.19 Указываем “номер дозвона” (это необходимо для совместимости)
3.20 Включаем использование VPDN
3.21 Привязываем к диалеру ранее созданную группу.
3.22 Включаем отправку опций сжатия
3.23 Включаем прием опций сжатия
3.24 Устанавливаем автоматический режим шифрования
3.25 Задаем логин
3.26 Задаем пароль
3.27 Отключаем протокол обнаружение соседей (cisco)
3.28 Уходим
3.29 Разрешаем дозвон, используя vpdn группу. (номер листа должен совпадать с номером группы)
3.30 Добавляем маршрут в удаленную сеть (за VPN сервером)

 

Результатом правильной настройки будет сообщение в консоли:

Mar  1 00:10:40.651: %LINK-3-UPDOWN: Interface Virtual-Access1, changed state to up
Mar  1 00:10:42.355: %LINEPROTO-5-UPDOWN: Line protocol on Interface Virtual-Access1, changed state to up

Так-так…тут вроде все.

4. Настройка pptp клиента MikroTik

Для подключения к маршрутизатору мне удобней использовать winbox, а пока не познан уровень “дзен” в консоли  – покликаем ЛКМ:

Создаем интерфейс для подключения.

На вкладке  “General”  можем изменить название интерфейса и выставить параметры формирования пакетов.

Параметры сжатия и шифрования указаны в подключаемом профиле  “default encryption” – значение профиля не менялись. Сам профиль лежит на вкладку выше – “PPP > Profiles”. Информация к сведению!

На вкладке “Dial Out” указываем адрес сервера, учетные данные и метод аутентификации. Пункты 12-15 оставляем по умолчанию. После нажатия “Apply”, при правильных настройках, мы уже можем отслеживать состояние подключения в правом нижнем углу.

Или более подробно на соседней вкладке.

Клиент подключился и получил адрес, но с учетом тонкостей подключения, для доступа в удаленную сеть нам необходимо добавить к ней маршрут. Напомню – такую же процедуру мы делали и на cisco клиенте.

Плюс одна галочка в моем чек листе, и погнали дальше…

5. Дополнительные настройки

Маршруты в удаленную сеть.

Мы только что присоединили 3 разных клиента к pptp серверу, и если в случае с Windows этого достаточно чтобы уже иметь доступ к примеру к хосту 192.168.13.11 , то для Сisco и MikroTik необходимо шаманство с добавлением маршрутов, что мы и сделали ранее. Есть еще вариант использования транзитной (служебной)  сети, но это давайте потом 🙂 . Все дело в том, что как не крути – pptp туннельный протокол для соединения двух точек, и никак не для множественного доступа, о чем и говорит маска 32.

Адаптер PPP VPN-PPTP-Netconfig:
 
   DNS-суффикс подключения . . . . . : netconfig.local
   Описание. . . . . . . . . . . . . : VPN-PPTP-Netconfig
   Физический адрес. . . . . . . . . :
   DHCP включен. . . . . . . . . . . : Нет
   Автонастройка включена. . . . . . : Да
   IPv4-адрес. . . . . . . . . . . . : 192.168.13.114(Основной)
   Маска подсети . . . . . . . . . . : 255.255.255.255
   Основной шлюз. . . . . . . . . :
   NetBios через TCP/IP. . . . . . . . : Включен

Так вот, Windows очень даже самостоятельно справился с проблемой путем добавление маршрута, основываясь на классовой маске полученного адреса. (первая строка вывода)

C:\Users\Hapon route print | find "192.168.13."
 
192.168.13.0 255.255.255.0 On-link 192.168.13.114 26
192.168.13.114 255.255.255.255 On-link 192.168.13.114 281
192.168.13.255 255.255.255.255 On-link 192.168.13.114 281
224.0.0.0 240.0.0.0 On-link 192.168.13.114 281
255.255.255.255 255.255.255.255 On-link 192.168.13.114 281

Чего нельзя сказать о двух других реализациях, конфигурация до добавления маршрутов:

MkroTik

Cisco

Справедливо будет отметить, что для двухстороннего взаимодействия между подсетями клиента и сервера необходимо добавить маршруты и на сервере pptp в удаленные подсети, к примеру, к сети, подключенной к MikroTik (сеть 192.168.11.0/24):

Cisco3745#ping 192.168.11.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.11.1, timeout is 2 seconds:
...
Success rate is 0 percent (0/3)
Cisco3745#conf t
Cisco3745(config)#ip route 192.168.11.0 255.255.255.0 192.168.13.112
Cisco3745#ping 192.168.11.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.11.1, timeout is 2 seconds:
!!!!

NAT для удаленных подсетей.
В добавок к маршрутам нам также необходимо включить преобразование адресов на интерфейсе, который смотрит в сторону VPN сервера. Это необходим для доступа из локальной сети за клиентом к сети за сервером, принимающим соединения.
Для этого на маршрутизаторе cisco (клиент pptp) необходимо создать список доступа и применить его на интерфейсе для трансляции. Также нужно обозначить интерфейс как “выходящий”, что и было
сделано ранее:

3.11 R2(config)#interface dialer 0
3.14 R2(config-if)# ip nat outside

Дополним эти параметры.

5.1 R2(config)#ip access-list standard 1
5.2 R2(config-std-nacl)#10 permit 192.168.10.0 0.0.0.255
5.3 R2(config-std-nacl)#exit
5.4 R2(config)#ip nat inside source list 1 interface dialer 0 overload
5.1 Создаем стандартный список доступа
5.2 Десятым правилом в нем разрешаем весь трафик, касающийся сети 192.168.10.0/24
5.3 Переходим обратно в режим конфигурирования
5.4 Разрешаем трансляцию адресов, указанных в списке доступа через VPN интерфейс

Обратите внимание на то, что маска в списках доступа объявляется в перевернутом виде , а номер правила в списке напрямую зависит от порядка его срабатывания – чем ниже номер, тем приоритетней правило.

В MikroTik логика включения NAT такая же, единственное отличие – здесь интерфейсы не делятся на inside and outside.
Создаем правило “IP > Firewall > NAT > Add”

На вкладке “General” устанавливаем цепочку, сеть, которой необходим доступ, и через какой интерфейс.

Выбираем механизм трансляции и сохраняемся.

Немного о механизме маскарадинга – с помощью этого механизма мы можем транслировать необходимый нам пул или сеть через внешний адрес или интерфейс.

Привязка адреса к логину подключения

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

5.5 Cisco3745#conf t
5.6 Cisco3745(config)#aaa attribute list windows-client
5.7 Cisco3745(config-attr-list)#attribute type addr 192.168.13.114 service ppp protocol ip
5.8 Cisco3745(config-attr-list)#exit
 
5.9 Cisco3745(config)#aaa attribute list cisco-client
5.10 Cisco3745(config-attr-list)#attribute type addr 192.168.13.113 service ppp protocol ip
5.11 Cisco3745(config-attr-list)#exit
 
5.12 Cisco3745(config)#aaa attribute list mikrotik-client
5.13 Cisco3745(config-attr-list)#attribute type addr 192.168.13.112 service ppp protocol ip
5.14 Cisco3745(config-attr-list)#exit
 
5.15 Cisco3745(config)#username netconfig-1 aaa attribute list windows-client
5.16 Cisco3745(config)#username netconfig-2 aaa attribute list cisco-client
5.17 Cisco3745(config)#username netconfig-3 aaa attribute list mikrotik-client

 

Таким образом

5.5-14 Создаем список и назначаем ему адрес в качестве атрибута и привязываем к сервису
5.15-17 Затем добавляем конкретному пользователю этот список

 

Огненная стена

Ну как минимум мы должны помнить о инкапсуляции пакетов, и том, что PPP сверху оборачивается протоколом для туннелирования – GRE, и выглядит кадр так:

 

Следовательно это факт нужно учесть, если вы придерживаетесь политики “что не разрешено, то запрещено” и таки разрешить входящий GRE  и PPTP трафик в списке доступа, используемом на интерфейсе, принимающем соединения.

5.18 Cisco3745(config)#ip access-lis extended GLOBALNET
5.19 Cisco3745(config-ext-nacl)#10 permit gre any any
5.20 Cisco3745(config-ext-nacl)#11 permit tcp any any eq 1723
5.21 Cisco3745(config-ext-nacl)#12 permit icmp any any
5.22 Cisco3745(config-ext-nacl)#20 deny ip any any
5.23 Cisco3745(config-ext-nacl)#exit
5.24 Cisco3745(config)#exit
 
5.25 Cisco3745(config)#interface FastEthernet 0/1
5.26 Cisco3745(config-if)#ip access-group GLOBALNET in

Командами мы:

5.18 Создаем расширенный список доступа
5.19 Разрешаем GRE
5.20 Разрешаем PPTP
5.21 И ICMP
5.22 Затем запретим весь остальной трафик
5.23-24 Выходим из настроек списка доступа
5.25 Переходим в меню настройки внешнего интерфейса
5.26 Применяем список для входящих пакетов

 

Правила будут выполнятся  по возрастанию – сначала 10, затем 11, и тд..

6. Дебаг и просмотр логов

При возникновении сложностей в настройке и подключении я первым делом проверяю доступность севера от клиента и обратно – “ping”, в случае недоступности сетей через уже установленный канал – маршруты и NAT.

Немаловажными факторами могут быть:

  • Правила фаервола у провайдера
  • Значения mtu на интерфейсах
  • Отсутствие необходимых функций в определенных версиях прошивки

На маршрутизаторах cisco просмотреть текущее состояние подключений можем так:

6.1 Cisco3745#show users
6.2 Cisco3745#show aaa sessions
6.3 Cisco3745#debug ppp ?
authentication CHAP/PAP/MSCHAP/EAP authentication
bap BAP protocol transactions
cbcp Callback Control Protocol negotiation
elog PPP ELOGs
error Protocol errors and error statistics
forwarding PPP layer 2 forwarding
mppe MPPE Events
multilink Multilink activity
negotiation Protocol parameter negotiation
packet Low-level PPP packet dump

 

6.1 Просмотр текущих подключений
6.2 Просмотр информации в разрезе сессии
6.3 Очень информативный набор команд для дебага ppp

 

Просмотр логов в MikroTik в один клик, но я бы рекомендовал предварительно добавить несколько правил “событий”, как минимум для pptp и dhcp:

Затем элегантно нажимаем кнопку “Log” в главном меню и просматриваем события:

В этом журнале будут отображены все основные параметры, указанные нами ранее, в более подробной форме – начиная от подробностей согласования протокола управления LCP и заканчавая передачей опций dhcp, которые, к слову, не во всех случаях и не во всех реализациях работают одинаково стабильно  🙁 .

В случае с Windows миниторинг событий мы можем осуществить комбинацией “Win+R” и вызвать оснастку  eventvwr.msc .

Хотя в большинстве случаев сам клиент способен достаточно подробно указать на проблему.

7. Резюме

Логическая схема подключений отображена на картинке.

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

Рабочая станция с Windows 10 использовалась исключительно как клиент, а в случае с клиентами-маршрутизаторами были предприняты попытки соединения удаленных сетей, в чем мы добились определенных успехов!

8. Пояснения/Дополнения

8.1 Port Forwarding, конечно, “безопасно, удобно и все так делают” – цитата-сарказм! Коллеги, если есть возможность использовать шифрованный канал – используйте его!!! Проброс порта в локалку к RDS – плохой тон!

8.2 MTU – тема не раскрыта должным образом, но этот параметр очень важен для работы сети в целом.

8.3 DHCP Option – не все опции, которые я пытался передавать клиентам, работали корректно. Использовались методы передачи как в dec так и hex формате.

8.4 Плюсы

  • Легкая настройка со стороны клиента
  • Интегрированный клиент в большинство OS
  • Хорошая скорость работы

8.5 Минусы

  • Уязвимые протоколы аутентификации
  • Трафик может блокироваться провайдером
  • Плохо адаптирован для соединения сетей (не предназначен)

Всем добра и мира, ласковых улыбок.




Fatal error: Uncaught Error: Call to undefined function wp_related_posts() in /home2/netconfi/public_html/wp-content/themes/theme/single.php:56 Stack trace: #0 /home2/netconfi/public_html/wp-includes/template-loader.php(106): include() #1 /home2/netconfi/public_html/wp-blog-header.php(19): require_once('/home2/netconfi...') #2 /home2/netconfi/public_html/index.php(17): require('/home2/netconfi...') #3 {main} thrown in /home2/netconfi/public_html/wp-content/themes/theme/single.php on line 56