Jump to content
Калькуляторы

Cisco 2921 + MPD5 + L2TP/PPTP

Оборудование:

Cisco 2921 с лицензией ipbase, IOS 15.7-3M (Router)

MPD5 5.8_2  на FreeBSD 11.1-RELEASE-p6 (gw02)

 

Задача:

Необходимо к центральному узлу (ЦУ) подключить несколько удаленных узлов (УЗ).

MPD5 выступает в качестве PPTP/L2TP сервера на ЦУ. К нему подключаются несколько Cisco 2921 с УЗ. За gw02 есть сети, и за Router так же есть сети. Схему прикрепил.

 

Проблема:

Задача казалась бы не сложная. Подними сервер MPD5 на gw02, сконфигурируй, настрой маршруты при подключении клиента. Настрой на Cisco 2921 соединение, так же укажи маршруты, и готово.

Сделал, туннель поднялся, УЗ(Router) получил ip адрес, можно попинговать концы туннеля (10.38.254.65 и 10.38.254.69). Но стоит, попробовать пингануть с gw02 Host2, находящийся за Router, он (Router) просто крашился и уходил в ребут. Проблема была стабильной, т.е. воспроизводилась каждый раз. Данную проблему мне удалось решить сменой IOS на 15.7-3M1.

 

Но проблема была решена не до конца. Теперь вместо краша и ребута, я получал рваный пинг (тот же RDP работал с трудом). Т.е. это выражалось пропуском одного пинга (первый пинг прошел, второго нет, третий есть и т.д.). НО, стоит пинговать наоборот, с УЗ что либо находящееся за маршрутизатором ЦУ, все пингуется отлично и пинги не теряются.

 

Примеры пингов.

gw02-->Host2

Spoiler

[root@gw02 ~]# ping 192.168.107.130
PING 192.168.107.130 (192.168.107.130): 56 data bytes
64 bytes from 192.168.107.130: icmp_seq=0 ttl=127 time=1.910 ms
64 bytes from 192.168.107.130: icmp_seq=2 ttl=127 time=0.732 ms
64 bytes from 192.168.107.130: icmp_seq=4 ttl=127 time=0.728 ms
64 bytes from 192.168.107.130: icmp_seq=6 ttl=127 time=0.739 ms
64 bytes from 192.168.107.130: icmp_seq=8 ttl=127 time=0.752 ms
64 bytes from 192.168.107.130: icmp_seq=10 ttl=127 time=0.786 ms
^C
--- 192.168.107.130 ping statistics ---
11 packets transmitted, 6 packets received, 45.5% packet loss
round-trip min/avg/max/stddev = 0.728/0.941/1.910/0.434 ms

 

Router-->Host1

Spoiler

Router#ping 10.38.254.193
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.38.254.193, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms
Router#

 

 

В итоге собрал стенд на столе. И в результате снятия дампа трафика, было выявлено, следующее. Пинги, с gw02 доходят до Host2 за маршрутизатором Router, тот отвечает, но дальше интерфейса gi0-0 маршрутизатора Cisco 2921, этот пакет не уходит. Т.е. Cisco 2921 как будто выбрасывает каждый второй пакет.

 

А теперь конфигурации, дампы..

 

Конфигурация Cisco 2921 (Router):

Spoiler

Router#sh run
*Feb 13 02:31:14.531: %SYS-5-CONFIG_I: Configured from console by console
Building configuration...

Current configuration : 2035 bytes
!
! Last configuration change at 02:31:14 UTC Tue Feb 13 2018
!
version 15.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
service internal
!
hostname Router
!
boot-start-marker
boot system flash0:c2900-universalk9_npe-mz.SPA.154-3.M7.bin
boot-end-marker
!
!
!
no aaa new-model
!
!
!
!
!
!
no ip gratuitous-arps
!
!
!
!
!
!
!
!
!
!
!
!
!
!
no ip domain lookup
ip cef
no ipv6 cef
multilink bundle-name authenticated
!
vpdn enable
!
vpdn-group 100
 request-dialin
  protocol pptp
  rotary-group 100
 initiate-to ip 192.168.35.73
!
!
cts logging verbose
!
!
license udi pid CISCO2921/K9 sn FCZ174671GE
!
!
!
redundancy
 notification-timer 120000
!
!
!
!
!
!
interface Embedded-Service-Engine0/0
 no ip address
 shutdown
!
interface GigabitEthernet0/0
 ip address 192.168.107.129 255.255.255.240
 duplex auto
 speed auto
!
interface GigabitEthernet0/1
 ip address 192.168.35.74 255.255.255.0
 duplex auto
 speed auto
!
interface GigabitEthernet0/2
 ip address 192.168.1.1 255.255.255.0
 duplex auto
 speed auto
!
interface Dialer100
 mtu 1400
 ip address negotiated
 ip pim dense-mode
 ip virtual-reassembly in
 encapsulation ppp
 dialer in-band
 dialer idle-timeout 0
 dialer string 123
 dialer vpdn
 dialer-group 100
 ppp pfc local request
 ppp pfc remote apply
 ppp chap hostname test
 ppp chap password 0 test
 no cdp enable
!
ip forward-protocol nd
!
no ip http server
no ip http secure-server
!
ip route 0.0.0.0 0.0.0.0 GigabitEthernet0/1
ip route 10.38.254.0 255.255.255.0 10.38.254.65
ip ssh server algorithm encryption aes128-ctr aes192-ctr aes256-ctr
ip ssh client algorithm encryption aes128-ctr aes192-ctr aes256-ctr
!
dialer-list 1 protocol ip permit
dialer-list 100 protocol ip permit
!
!
!
control-plane
!
!
 vstack
!
line con 0
line aux 0
line 2
 no activation-character
 no exec
 transport preferred none
 transport output pad telnet rlogin lapb-ta mop udptn v120 ssh
 stopbits 1
line vty 0 4
 login
 transport input none
!
scheduler allocate 20000 1000
!
end

Router#

 

 

Конфигурация MPD5 (gw02):

Spoiler

#################################################################
#
#   MPD configuration file
#
# This file defines the configuration for mpd: what the
# bundles are, what the links are in those bundles, how
# the interface should be configured, various PPP parameters,
# etc. It contains commands just as you would type them
# in at the console. Lines without padding are labels. Lines
# starting with a "#" are comments.
#
# $Id: mpd.conf.sample,v 1.49 2015/06/02 08:30:35 dmitryluhtionov Exp $
#
#################################################################

startup:
    # configure mpd users
    set user foo bar admin
    set user foo1 bar1
    # configure the console
    set console self 127.0.0.1 5005
    set console open
    # configure the web server
    set web self 0.0.0.0 5006
    set web open

#
# Default configuration is "dialup"

default:
    load pptp_server
    #load l2tp_server

pptp_server:
# Диапазон IP адрессов,
# который присвоется VPN девайсу.
    set ippool add pool1 10.38.254.69 10.38.254.100
# Create clonable bundle template named B
    create bundle template B
    set iface disable proxy-arp
    set iface idle 1800
    set iface enable tcpmssfix
    set ipcp yes vjcomp
    set iface up-script /usr/local/etc/mpd5/script-up.pl
    set iface group pptp
# Specify IP address pool for dynamic assigment.
    set ipcp ranges 10.38.254.65/26 ippool pool1
# The five lines below enable Microsoft Point-to-Point encryption
# (MPPE) using the ng_mppc(8) netgraph node type.
    #set bundle enable compression
    #set ccp yes mppc
    #set mppc yes e40
    #set mppc yes e128
    #set mppc yes stateless
# Create clonable link template named L
    create link template L pptp
# Set bundle template to use
    set link action bundle B

# Multilink adds some overhead, but gives full 1500 MTU.
    set link enable multilink
    set link yes acfcomp protocomp
    set link no pap chap
    set link enable chap
    set link keep-alive 10 60
# We reducing link mtu to avoid GRE packet fragmentation
    set link mtu 1500
# Configure l2tp
# IP адресс нашего VPN сервера. (Собственно адресс машины с фряхой)
    set pptp self 192.168.35.73
#   set pptp enable always-ack
#   set pptp enable delayed-ack
#   set pptp disable windowing
# Allow to accept calls
    set link enable incoming

l2tp_server:
    set ippool add pool1 10.38.254.69 10.38.254.100
    create bundle template B
    set iface enable proxy-arp
    set iface idle 1800
    set iface enable tcpmssfix
    set iface up-script /usr/local/etc/mpd5/script-up.pl
    set ipcp yes vjcomp
# Specify IP address pool for dynamic assigment.
    set ipcp ranges 10.38.254.65/26 ippool pool1
# The five lines below enable Microsoft Point-to-Point encryption
# (MPPE) using the ng_mppc(8) netgraph node type.
    set bundle enable compression
    set ccp yes mppc
    set mppc yes e40
    set mppc yes e128
    set mppc yes stateless
# Create clonable link template named L
    create link template L l2tp
# Set bundle template to use
    set link action bundle B
# Multilink adds some overhead, but gives full 1500 MTU.
    set link enable multilink
    set link yes acfcomp protocomp
    set link no pap chap
    set link enable chap
    set link keep-alive 10 60
# We reducing link mtu to avoid GRE packet fragmentation
    set link mtu 1460

# Configure l2tp
# IP адресс нашего VPN сервера. (Собственно адресс машины с фряхой)
    set l2tp self 192.168.35.73
# Allow to accept calls
    set link enable incoming

 

Скрипт для автоподнятия маршрута в MPD5:

Spoiler

#!/bin/sh
### Rozhuk Ivan 2009-2010
### mpd.script: L2TP incomming link up
###

# $0 - script name
# $1 - if name (ng0...)
# $2 - proto
# $3 - local-ip
# $4 - remote-ip
# $5 - authname
# $6 - [ dns1 server-ip ]
# $7 - [ dns2 server-ip ]
# $8 - peer-address

 

case "$5" in
    test )      /sbin/route -q add 192.168.107.128/28 $4;;
    xxx )       /sbin/route -q add xxxxxxxx/22 $4;;
    xxx )       /sbin/route -q add xxxxxxx/24 $4;;
    xxxl )    /sbin/route -q add xxxxxx/22 $4;;
    xxxx )    /sbin/route -q add xxxxxx/22 $4;;
esac

 

exit 0

 

 

Дампы стоит смотреть в такой очереди:

gw02.ng0-->gw02.wan0-->Router.g0-1-->Router.dial-->Router.g0-0-Host2

И если обрастно следить за пакетом, то и последовательность наоборот.

gw02.wan0 и Router.g0-1 на схеме нет, это WAN интерфейся маршрутизаторов, там будут видны эти пинги инкапсулированные в GRE и PPP.

 

Дампы:

gw02.ng0.dump

gw02.wan0.dump

Router.g0-1.dump

Router.dial.dump

Router.g0-0.dump

Host2.pcapng

 

 

Схема:

 

5a829237abb29_1.thumb.jpg.6b2ba0381685591b5bdfb1ae31d81592.jpg

 

 

Edited by Axen

Share this post


Link to post
Share on other sites

Была бы такая возможность, так и поступил бы.

Нужно всё таки разобраться, в чем причина. Я уже перебрал все последние версии IOS. Идей просто уже нет.

Edited by Axen

Share this post


Link to post
Share on other sites

1 hour ago, AlexDsv said:

ip route 0.0.0.0 0.0.0.0 GigabitEthernet0/1   убрать и больше так не делать.

Прописать ip route 0.0.0.0 0.0.0.0 A.B.C.D

 

Согласен. Исправим.

 

1 hour ago, zhenya` said:

я бы еще на циске сделал на интерфейсах в сторону хостов ip tcp adjust-mss 1300.

Это касаемо проблемы, или носит рекомендательный характер?)

Edited by Axen

Share this post


Link to post
Share on other sites

А если попробовать по l2tp подключить Router проблема сохраняется?

!
l2tp-class l2-class-1
 hostname unknown
!
pseudowire-class pw-class-1
 encapsulation l2tpv2
 protocol l2tpv2 l2-class-1
 ip local interface GigabitEthernet0/1
!
interface Virtual-PPP1
 ip address negotiated
 no ip redirects
 no ip unreachables
 no ip proxy-arp
 ip mtu 1460
 ip virtual-reassembly
 no peer neighbor-route
 keepalive 10 3
 no cdp enable
 ppp authentication chap callin
 ppp chap hostname test
 ppp chap password 0 test
 pseudowire 192.168.35.73 1 encapsulation l2tpv2 pw-class pw-class-1
!
ip route 192.168.35.73 255.255.255.255 <gw>

И обязательно добавить /32 маршрут до l2tp сервера через Gi0/1, так как после подъёма туннеля, у вас появляется новый дефолт в туннель с лучшим приоритетом, кмк

Edited by stepashka

Share this post


Link to post
Share on other sites

Аналогично, по L2TP проблема сохраняется. НО, конфигурация у меня под другому выглядела. Завтра попробую, и отпишусь.

Share this post


Link to post
Share on other sites

Новые подробности. На моей 2921 нет команды pseudowire-class, похоже что ограничение лицензии... Экспериментировать на тех, где есть эта команда, больше нет возможности:(

 

P.S. вопрос всё таки, отсутствие команды "pseudowire-class" это ограничение лицензии или нет?

Share this post


Link to post
Share on other sites

И так, проблема была в IOS. Почти на всех узлах все завелось, за исключением одного.

На нем всё гораздо интереснее, туннель поднимается, ip получает, но стоит сделать ping, или что либо другое (проще говоря воспользоваться туннелем), маршрутизатор перезагружается.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.