Esta vez veremos cómo tirar un tunel entre un equipo Linux y un router Cisco. En ocasiones nos encontramos en entornos heterogeneos en el que los dos extremos no son iguales (Cisco-Cisco, Linux-Linux).
En este caso veremos como establecer un túnel GRE y otro IPIP entre un router Cisco con Ip pública y un servidor Linux con Ip pública también. Posteriormente veremos el caso en el que el extremo Linux esté detrás de NAT. Recordad que estos 2 protocolos sólo ofrecen encapsulación, y no seguridad así que tenedlo en cuenta a la hora de utilizarlo y hacedlo únicamente en casos en que la seguridad no sea vital. Recordad también que estos protocolos son protocolos de nivel de red, nivel 3.

Túnel GRE Cisco-Linux
Para configurar un túnel GRE (Protocolo 47, RFC 2784), en la parte del router Cisco:
inteface tunnel 0
ip address 192.168.11.1 255.255.255.0
tunnel source vlan 1
tunnel destination ip_publica_linux
Con esto:
- Definimos la interfaz virtual tunnel 0
- Configuramos la ip 192.168.11.1/24 en esa interfaz
- Definimos desde qué interfaz se genera el túnel (ip origen del túnel)
- Definimos el destino del túnel (otro extremo)
En la parte del servidor Linux:
ip tunnel add mygre mode gre remote ip_publica_cisco local ip_origen_tunel ttl 255
ifconfig mygre up
ifconfig mygre 192.168.11.2 netmask 255.255.255.0
Con esto:
- Creamos la interfaz mygre, contra la Ip pública Cisco
- Levantamos la interfaz
- Seteamos la ip 192.168.11.2/24
Y listo, ya deberíamos poder pingar desde nuestro router Cisco, al servidor Linux vía el túnel, without NAT.
Vale, en este ejemplo los dos equipos tienen Ip pública pero, ¿Qué pasa si el equipo Linux está detrás de NAT?
El objetivo es natear el protocolo GRE en el gateway del equipo Linux hacia dentro, para que el router Cisco al lanzar el túnel hacía la Ip pública del equipo Linux, no se quede en el router y llegue hasta donde tiene que llegar.
Si tenemos un router usable, (más allá de un Zixel de Telefónica) lo podremos hacer facilmente. En nuestro caso lo haremos con Iptables, ya que es otro Linux el que da la cara a Internet.
Para ello:
iptables -t nat -A PREROUTING -p 47 -j DNAT –to 192.168.99.2
o
iptables -t nat -A PREROUTING -p GRE -j DNAT –to 192.168.99.2
Con esto, nateamos el protocolo 47 o GRE hacia la IP 192.168.99.2.
En el equipo 192.168.99.2 seguiremos el mismo proceso para crear el túnel que se ha explicado más arriba.
Tunel IPIP Cisco-Linux
En el caso que deseamos un túnel IPIP (Protocolo 4, RFC 2003), en la parte del router Cisco:
inteface tunnel 0
ip address 192.168.12.1 255.255.255.0
tunnel source vlan 1
tunnel destination ip_publica_linux
tunnel mode ipip
Como podemos observar, lo único que cambia es el modo del túnel.
En la parte Linux:
ip tunnel add myipip mode ipip remote ip_publica_cisco local ip_origen_tunel ttl 255
ifconfig myipip up
ifconfig myipip 192.168.12.2 netmask 255.255.255.0
En el caso de estar detrás de nat, no he conseguido establecer el túnel en modo IPIP, pero debería ser tan sencillo como reenviar el protocolo 4 con iptables.
iptables -t nat -A PREROUTING -p 4 -j DNAT –to 192.168.99.2
Habrá algo que se me escapa. Si alguién sabe/lo ha intentado, que lo comente!!
Pués ya veís, super sencillo unir dos redes entre un Cisco y Linux en 5 mins!
A disfrutar!