Ipsec Over GRE + ospf mikrotik vs Cisco, parte 1

Hoy toca una entrada de las que me ha costado más de elaborar.

Tengo bastantes routers cisco en los clientes y la mayoría de vpn’s (más de 50), las tengo con ipsec over GRE y EIGRP…. de esta manera, todas las sedes se ven entre ellas y no me tengo que preocupar de las rutas.

La idea, es montar routers mikrotik virtuales y aprovechar el espacio, ahorrar corriente, etc..

El escenario que propongo es sencillo:

Tenemos en un lado, la red local: 192.168.80.0/24 y en el otro extremo, la red 192.168.2.0/24.

La red que usaremos para el tunel, será: 172.30.0.0/30.

Empezamos con la configuración del router cisco:

crypto isakmp policy 10
encr 3des
hash md5
authentication pre-share
group 2
lifetime 3600
crypto isakmp key superClave address 1.1.1.1 no-xauth

crypto ipsec transform-set trans_3des esp-3des esp-md5-hmac
mode transport
!
crypto ipsec profile mikro
set transform-set trans_3des

Colocaremos ipsec en modo transporte para no perder la información de routing, entre otras cosas y nos creamos un profile para el tunel con la mikrotik.

Creamos en Tunel GRE:

interface Tunnel5
description CONNECTED TO oficina mikrtik
ip address 172.30.0.1 255.255.255.252
ip mtu 1476
tunnel source FastEthernet0/0
tunnel destination 1.1.1.1
tunnel protection ipsec profile mikro

Y configuramos OSPF, con las áreas:

router ospf 10
log-adjacency-changes
redistribute static subnets
network 192.168.2.0 0.0.0.255 area 0
network 172.30.0.0 0.0.0.3 area 0

Y por último, la ruta estática (de momento no me funciona de otra manera), con la red remota:

cisco(conf-if)# ip route 192.168.80.0 255.255.255.0 tunnel 5

Y ahora vamos por la mikrotik:

/interface ethernet
/interface gre
add disabled=no dscp=0 l2mtu=65535 local-address=1.1.1.1 mtu=1476
name=tunnel5 remote-address=2.2.2.2

/ip ipsec proposal
set [ find default=yes ] auth-algorithms=sha1 disabled=no enc-algorithms=3des
lifetime=30m name=default pfs-group=modp1024
add auth-algorithms=md5 disabled=no enc-algorithms=3des lifetime=59m59s name=
cisco pfs-group=none

/routing ospf instance
set [ find default=yes ] disabled=no distribute-default=never in-filter=
ospf-in metric-bgp=auto metric-connected=20 metric-default=1
metric-other-ospf=auto metric-rip=20 metric-static=20 name=default
out-filter=ospf-out redistribute-bgp=no redistribute-connected=as-type-1
redistribute-other-ospf=as-type-1 redistribute-rip=no
redistribute-static=as-type-1 router-id=0.0.0.0
/routing ospf area
set [ find default=yes ] area-id=0.0.0.0 disabled=no instance=default name=
backbone type=default
add area-id=192.168.80.0 disabled=no instance=default name=area11 type=
default
/routing ospf-v3 instance
set [ find default=yes ] disabled=no distribute-default=never metric-bgp=auto
metric-connected=20 metric-default=1 metric-other-ospf=auto metric-rip=20
metric-static=20 name=default redistribute-bgp=no redistribute-connected=
no redistribute-other-ospf=no redistribute-rip=no redistribute-static=no
router-id=0.0.0.0

/ip address
add address=192.168.80.254/24 comment=”added by setup” disabled=no interface=
ether1_lan network=192.168.80.0
add address=1.1.1.1/32 disabled=no interface=public_interface network=
1.1.1.1
add address=172.30.0.2/30 disabled=no interface=tunnel5 network=172.30.0.0
/ip dhcp-server config
set store-leases-disk=5m

/ip ipsec peer
add address=2.2.2.2/32 auth-method=pre-shared-key comment=
“tunel IPSEC pruebas angel” dh-group=modp1024 disabled=no dpd-interval=2m
dpd-maximum-failures=5 enc-algorithm=3des exchange-mode=main
generate-policy=no hash-algorithm=md5 lifebytes=0 lifetime=1d
my-id-user-fqdn=”” nat-traversal=no port=500 proposal-check=obey secret=
superClave send-initial-contact=yes
/ip ipsec policy
add action=encrypt disabled=no dst-address=2.2.2.2/32 dst-port=any
ipsec-protocols=esp level=require priority=0 proposal=cisco protocol=47
sa-dst-address=2.2.2.2 sa-src-address=1.1.1.1 src-address=
1.1.1.1/32 src-port=any tunnel=no
/ip neighbor discovery
set ether1_lan disabled=no
set public_interface disabled=no
set tunnel5 disabled=yes

/ip route
add comment=”added by setup” disabled=no distance=1 dst-address=0.0.0.0/0
gateway=1.1.1.2 scope=30 target-scope=10

/routing filter
add action=accept chain=ospf-out disabled=no distance=1 invert-match=no
prefix=192.168.80.0/24 protocol=connect,ospf set-bgp-prepend-path=””

/routing igmp-proxy
set query-interval=2m5s query-response-interval=10s quick-leave=no
/routing mme
set bidirectional-timeout=2 gateway-class=none gateway-keepalive=1m
gateway-selection=no-gateway origination-interval=5s preferred-gateway=
0.0.0.0 timeout=1m ttl=50
/routing ospf area range
add advertise=yes area=area11 cost=calculated disabled=no range=
192.168.80.0/24
/routing ospf interface
add authentication=none authentication-key=”” authentication-key-id=1 cost=10
dead-interval=40s disabled=no hello-interval=10s instance-id=0 interface=
all network-type=broadcast passive=no priority=1 retransmit-interval=5s
transmit-delay=1s use-bfd=no
add authentication=none authentication-key=”” authentication-key-id=1 cost=10
dead-interval=40s disabled=no hello-interval=10s instance-id=0 interface=
public_interface network-type=broadcast passive=yes priority=1
retransmit-interval=5s transmit-delay=1s use-bfd=no
/routing ospf network
add area=backbone comment=”local lan” disabled=no network=192.168.80.0/24
add area=backbone comment=”tunnel 5 network” disabled=no network=
172.30.0.0/30
/system clock
set time-zone-name=Europe/Madrid
/system clock manual
set dst-delta=+00:00 dst-end=”jan/01/1970 00:00:00″ dst-start=
“jan/01/1970 00:00:00″ time-zone=+00:00
set name=cpd_router
/system lcd
set contrast=0 enabled=no port=parallel type=24×4
set enabled=yes mode=unicast primary-ntp=130.206.3.166 secondary-ntp=
130.206.3.166
/system ntp server
set broadcast=no broadcast-addresses=”” enabled=no manycast=yes multicast=no

Concatenar rutas estáticas en dhcp3 con Debian

Otra entrada que es un apunte.

Hoy me ha tocado añadir en mi dhcp, 2 rutas estáticas, una de clase A y otra de clase C. Esto, lo había hecho hace tiempo con los dhcp de windows, pero con Linux no estaba tan claro.

Siguiendo los estándares, veo que las rutas estáticas con clase se basan en la rfc 3442, de lectura obligada:

http://tools.ietf.org/html/rfc3442

Y nos dice que añadir varias, tiene que ser de la forma:

Classless Route Option Format

The code for this option is 121, and its minimum length is 5 bytes.
This option can contain one or more static routes, each of which
consists of a destination descriptor and the IP address of the router
that should be used to reach that destination.

Code Len Destination 1 Router 1
+—–+—+—-+—–+—-+—-+—-+—-+—-+
| 121 | n | d1 | … | dN | r1 | r2 | r3 | r4 |
+—–+—+—-+—–+—-+—-+—-+—-+—-+

Destination 2 Router 2
+—-+—–+—-+—-+—-+—-+—-+
| d1 | … | dN | r1 | r2 | r3 | r4 |
+—-+—–+—-+—-+—-+—-+—-+

In the above example, two static routes are specified.

En mi caso, quiero añadir las siguientes rutas:

10.0.0.0 / 8 gateway: 192.168.2.251
192.168.5.0 / 24 gateway: 192.168.2.251

Editamos el fichero /etc/dhcp3/dhcpd.conf y en mi caso, lo dejo tal que:

# option definitions common to all supported networks…
option rfc3442-classless-static-routes 24, 192, 168, 5, 192, 168, 2, 251, 8, 10, 192, 168, 2, 251;

Para la red 192.168.5.0/24: 24, 192, 168, 5, 192, 168, 2, 251
|
|->red / 24
Para la red 10.0.0.0/8 : 8, 10, 192, 168, 2, 251
|
|–> red / 8

Enjoy your dhcp.

Cisco Pix 515e con movistar Futura

Esta entrada es otro apunte.

Hoy toca configurar un pix515e contra la ONT de movistar directamente, taggueando la vlan 6.

Para ello, damos por supuesto que tenemos un pix con 7.2.x y la ONT funcionando….

Dejamos los interfaces tal que :

!
interface Ethernet0
no nameif
security-level 0
no ip address
!
interface Ethernet0.6
vlan 6
nameif outside
security-level 0
pppoe client vpdn group telefonica
ip address pppoe setroute

Y creamos el pppoe con el user / pass de toda la vida:

vpdn group telefonica request dialout pppoe
vpdn group telefonica localname adslppp@telefonicanetpa
vpdn group telefonica ppp authentication pap
vpdn username adslppp@telefonicanetpa password adslppp

y el resto de Globals y nat’s, como siempre.

enjoy your firewall 😉

Simular extension mobility con asterisk

Esta entrada es otro apunte.

Hace poco, uno de los clientes donde tengo un asterisk, tienen varios empleados que hacen teletrabajo y, querían llevarse la extensión a casa….. sabemos de sobras que asterisk no soporta parallel forking y, había que buscar la manera de hacerlo mediante dialPlan.

El tema consiste en:

1º) El usuario tiene un softphone configurado en su pc y se conecta por VPN
2º) El Usuario, tiene su extensón, por ejemplo 240 y en casa quiere tener la misma.
3º) El usuario, cuando está en casa querrá que el cliente vea que está en la oficina 😉

De esta manera, la operadora de la centralita, tan sólo tiene que preocuparse de pasarle la llamada a su extensión habitual, al igual que sus compañeros.

Sabiendo de antemano que no podemos tener 2 extensiones iguales registradas, vamos a hacer “el apaño” con el dialPlan; en este caso, a las extensiones remotas les añadiremos un 3 delante.

Show me the code 😉

En el sip.conf, definimos las extensiones:

[240](extension)
username=240
callerid=”INFORMATICA” <240>
secret=xxxxxx
mailbox=200

[3240](extension)
username=3240
callerid=”INFORMATICA” <240>
secret=xxxxxx
mailbox=200

Tenemos la 240 que es la del teléfono y la 3240 que es la remota.

Ahora, una función para habilitar el extension Mobility falso ;-). Editamos el extensions.conf y con la 342 habilitamos y con el 343 deshabilitamos:

exten => 342,1,NoOP(…: desvio extensiones remotas activado :…)
exten => 342,n,Playback(call-fwd-unconditional&enabled)
exten => 342,n,Set(DB(${CALLERID(num)}/remoto)=1)
exten => 342,n,Hangup
exten => 343,1,NoOP(…: desvio extensiones remotas desactivado :…)
exten => 343,n,Playback(call-fwd-unconditional&disabled)
exten => 343,n,Set(DB(${CALLERID(num)}/remoto)=0)
exten => 343,n,Hangup

Guardamos en la ASTDB una clave / valor tal que: 240 / 1 o 240/0 (1 habilitado y 0 deshabilitado)

Y ahora la magia del dialplan, en el extensions.conf:

exten => _2XX,1,NoOp(Llamada entre extensiones)
exten => _2XX,n,NoOP(comprobamos que tiene el desvio a extension de casa)
exten => _2XX,n,Set(remoto_activo=0) // inicializamos variable y la ponemos a 0
exten => _2XX,n,Set(remoto_activo=${DB(${EXTEN}/remoto)}) // preguntamos y seteamos variable
exten => _2XX,n,NoOP(${remoto_activo}) // lo printamos en pantalla para debug
exten => _2XX,n,GotoIf($[“${remoto_activo}” = “1”]?desvio) // si activo, pasamos a (desvio)
exten => _2XX,n,NoOP(llamando de la ${CALLERID(num)} a la:${EXTEN})
exten => _2XX,n,Dial(SIP/${EXTEN},60,tTwWm) // llamamos normal
exten => _2XX,n(desvio),Dial(SIP/3${EXTEN},60,tTwWm) // añadimos el 3 delante
exten => _2XX,n,Hangup()

Guardamos, hacemos un reload y listo.

Sé que no es una manera elegante, pero vemos que con un poquito de BBDD y programación de dialPlan, la posibilidades son casi infinitas.

Enjoy your mobility 😉