- Mensajes
- 14,136
Introducción
Hace un tiempo estuve dándole vueltas a la idea de poder llevarme la red de casa a cuestas cuando viajo por trabajo. Estoy tan acostumbrado a tener mi entorno local a mano, que cada vez me cuesta más no tenerlo. Eso, y que me estoy mal-acostumbrando a navegar sin anuncios (bendito pi-hole). Para los móviles el tema estaba solventado, la VPN tipo IKEv2 funciona de maravilla, y el conectarse con certificados es una tranquilidad que no tiene precio; no he vuelto a tener que usar una lista negra de orígenes de IP bloqueados por intentos de conexión no autorizados a mi equipo. Pero, para lo demás, pensé: ¿y si me pudiera llevar todo de un golpe?
El propósito
Quiero disponer de mi red local allá donde esté. Sin importar desde dónde me esté conectando o con qué equipos lo haga. Me valía con conectar por VPN, pero no quería tener sólo acceso a lo que hay en casa, quería estar en casa. Me puse a investigar y di con los túneles EoIP, una solución propietaria de mikrotik para enlazar dos routers remotos, en capa 2 (como si enganchases dos switches con un cable, mismo dominio de broadcast). Además, como llevaba ya un tiempo batalleando con @Otro+ que anda detrás de montar algo así, dije: vamos a matar dos pájaros de un tiro; voy a ver cómo narices se monta esto.
El equipo
Para dicha tarea, me puse a darle vueltas al melón para ver qué equipo podría comprar para ello y qué soluciones había ya montadas; no me gusta reinventar la rueda. Pensé primero en una solución tipo software que conectara a mi VPN, pero me eché para atrás enseguida, dado que no puedo instalar nada en el equipo de trabajo sin permiso, y debía ser algo semi-transparente.
También debería ser algo pequeño, puesto que ya de por sí vas cargado cuando viajas, como para irlo aún más. Con todo ello me decanté por un equipo pequeño y barato, del que había oído hablar muchas veces a @hgonzale, el hAP mini. Un equipo de 22€ (18€ más portes en landashop, por si a alguien le interesa) que cumple perfectamente con lo que quería. Es pequeño, tienes más de un puerto ethernet (fast ethernet, no os vengáis arriba, mirad lo que cuesta), y wifi N. Más que suficiente para montar una conexión allá donde vayas (es realmente pequeño) para salir del paso.
Un poco de teoría
Lo primero que tenemos que tener claro es qué es el protocolo EoIP. Básicamente, y como su nombre indica, es un protocolo para transportar ethernet sobre IP (transportar capa 2, sobre capa 3). Es un túnel capaz de correr encima de otro túnel. Es decir, puedes enlazar A con B con un túnel de otro tipo, como L2TP, PPTP, IPIP, y montar esto encima. Utiliza el protocolo GRE para montar el túnel (ojo con el firewall, hay que permitir ese tráfico en input) y añade un extra de 42 bytes al tamaño del paquete, así que mejor poner un MTU a 1500 para eliminar problemas de fragmentación.
Manos a la obra
Voy a tratar de hacer esto de la manera más simple posible. Me estuve dando de cabezazos contra la pared por no entender bien cómo funcionaba el túnel, así que os voy a ir al caso más simple: tengo un router en casa (que hace de router, con su firewall, nat, etc) y tengo un router "tonto" que llevo conmigo (hAP mini), que lo único que va a hacer es levantar la conexión con el router de casa.
Para el ejemplo vamos a usar estos datos:
Si todo ha ido bien, veremos que, en ambos routers, el túnel está con dos flags, R de Running y S de Slave (este último por estar dentro de un bridge).
Con esto, si lo hemos hecho bien, tendremos conectividad en capa 2 entre el router A y B. Basta con conectar un equipo por cable al puerto 2 del router B o la interfaz virtual inalámbrica que hemos creado, para que el DHCP del otro extremo nos asigne una dirección de la LAN del router A. En este momento estamos como en casa, y podemos acceder a todo lo que esté en dicho dominio de broadcast. Y cuando digo todo, es todo: desde un NAS que nos ofrece música por DAAP o video por DLNA, a un chromecast que esté pinchado en la TV, a lo que sea que esté en la LAN, se transporta absolutamente todo.
Rizando el rizo: securizando el túnel
Todo esto está muy bien, pero si no podemos encriptar la comunicación entre los dos equipos, cualquier puede interceptar el tráfico del túnel y verlo. Y, cuando te conectas a una wifi pública o sin contraseña, nunca sabes a quien te vas a encontrar. Por suerte, este tipo de túnel soporta IPSec de una manera muy sencilla. Tan sólo tenemos que dar de alta un secreto compartido, común a ambos lados del túnel. Tan sencillo como hacer esto, en ambos lados del túnel:
A partir de ese momento IPSec añadirá una plantilla dinámica para conectar con el otro extremo y encriptar el tráfico dentro del túnel. Cuando ambos extremos hayan negociado sus pertinentes claves, veréis en IP -> IPSec -> Policies una plantilla dinámica, con el nombre de la interfaz del túnel, con la columna PH2 State = established.
Con esto protegemos un poco más si cabe quien se puede conectar a nuestro router de casa.
Espero os sirva de ejemplo por si lo necesitáis en algún momento. Para otro ratito, montaremos un manual similar, pero en capa 3. Es decir, interconectar dos routers remotos con LANs distintas, donde cada equipo hace de router en su localización (site-to-site), usando también EoIP.
Saludos!
Hace un tiempo estuve dándole vueltas a la idea de poder llevarme la red de casa a cuestas cuando viajo por trabajo. Estoy tan acostumbrado a tener mi entorno local a mano, que cada vez me cuesta más no tenerlo. Eso, y que me estoy mal-acostumbrando a navegar sin anuncios (bendito pi-hole). Para los móviles el tema estaba solventado, la VPN tipo IKEv2 funciona de maravilla, y el conectarse con certificados es una tranquilidad que no tiene precio; no he vuelto a tener que usar una lista negra de orígenes de IP bloqueados por intentos de conexión no autorizados a mi equipo. Pero, para lo demás, pensé: ¿y si me pudiera llevar todo de un golpe?
El propósito
Quiero disponer de mi red local allá donde esté. Sin importar desde dónde me esté conectando o con qué equipos lo haga. Me valía con conectar por VPN, pero no quería tener sólo acceso a lo que hay en casa, quería estar en casa. Me puse a investigar y di con los túneles EoIP, una solución propietaria de mikrotik para enlazar dos routers remotos, en capa 2 (como si enganchases dos switches con un cable, mismo dominio de broadcast). Además, como llevaba ya un tiempo batalleando con @Otro+ que anda detrás de montar algo así, dije: vamos a matar dos pájaros de un tiro; voy a ver cómo narices se monta esto.
El equipo
Para dicha tarea, me puse a darle vueltas al melón para ver qué equipo podría comprar para ello y qué soluciones había ya montadas; no me gusta reinventar la rueda. Pensé primero en una solución tipo software que conectara a mi VPN, pero me eché para atrás enseguida, dado que no puedo instalar nada en el equipo de trabajo sin permiso, y debía ser algo semi-transparente.
También debería ser algo pequeño, puesto que ya de por sí vas cargado cuando viajas, como para irlo aún más. Con todo ello me decanté por un equipo pequeño y barato, del que había oído hablar muchas veces a @hgonzale, el hAP mini. Un equipo de 22€ (18€ más portes en landashop, por si a alguien le interesa) que cumple perfectamente con lo que quería. Es pequeño, tienes más de un puerto ethernet (fast ethernet, no os vengáis arriba, mirad lo que cuesta), y wifi N. Más que suficiente para montar una conexión allá donde vayas (es realmente pequeño) para salir del paso.
Un poco de teoría
Lo primero que tenemos que tener claro es qué es el protocolo EoIP. Básicamente, y como su nombre indica, es un protocolo para transportar ethernet sobre IP (transportar capa 2, sobre capa 3). Es un túnel capaz de correr encima de otro túnel. Es decir, puedes enlazar A con B con un túnel de otro tipo, como L2TP, PPTP, IPIP, y montar esto encima. Utiliza el protocolo GRE para montar el túnel (ojo con el firewall, hay que permitir ese tráfico en input) y añade un extra de 42 bytes al tamaño del paquete, así que mejor poner un MTU a 1500 para eliminar problemas de fragmentación.
Manos a la obra
Voy a tratar de hacer esto de la manera más simple posible. Me estuve dando de cabezazos contra la pared por no entender bien cómo funcionaba el túnel, así que os voy a ir al caso más simple: tengo un router en casa (que hace de router, con su firewall, nat, etc) y tengo un router "tonto" que llevo conmigo (hAP mini), que lo único que va a hacer es levantar la conexión con el router de casa.
Para el ejemplo vamos a usar estos datos:
- Router A) Router de casa, con dominio ddns serialA.mynetname.net
- Router B) Router roaming, con dominio ddns serialB.mynetnamet.net
En el router que llevaremos consigo, router roaming B)
- Reseteamos el equipo para arrancar sin configuración (System -> Reset -> No default configuration), ya que esto va a ser un router tonto. Nos tocará entrar por winbox al equipo, puesto que necesitaremos acceder vía MAC address.
- Le cambiamos la password al usuario de admin en System -> Users. O, mejor aún, creamos uno nuevo con permisos "full" y borramos el de admin.
- Creamos la lista WAN, donde meteremos las interfaces que vamos a usar como posibles fuentes de conectividad
/interface list add name=WAN
- Añadimos las interfaces que conforman mi WAN. En mi caso, ether1 y wlan1 (para poder conectar a otro router si puedo por cable, sino por wifi)
/interface list member add interface=ether1 list=WAN
/interface list member add interface=wlan1 list=WAN
- Levantamos la sonda que detectará si hay internet en esa lista de interfaces. De haberlo, creará automáticamente un cliente DHCP sobre la interfaz en la que detecte conectividad a internet, añadiendo a su vez la ruta correspondiente en IP -> Routes. Todo esto de manera auto-mágica, ¿no es la hostia?
/interface detect-internet set detect-interface-list=WAN
- Creamos el bridge principal, donde irán las interfaces que queramos puentear con nuestra red LAN remota
/interface bridge add name=bridge
- Creamos una dirección IP para uno de los puertos ethernet, en mi caso ether3, que usaremos coomo puerto de administración. De esta manera podremos acceder al router por IP.
/ip address add address=192.168.99.1/24 interface=ether3 network=192.168.99.0
- Por comodidad, levantamos un servidor DHCP para dicha interfaz, así no tenemos que andar metiendo las IP's a mano. Como esa interfaz es puramente de administración y no va a tener salida a internet, ni nos molestamos en darle un DNS. Primero creamos el pool:
/ip pool add name=pool-mgmnt ranges=192.168.99.2-192.168.99.5
- Luego la red, sin DNS:
/ip dhcp-server network add address=192.168.99.0/24 dns-none=yes gateway=192.168.99.1
- Y por último lo echamos a andar
/ip dhcp-server add address-pool=pool-mgmnt interface=ether3 name=dhcp-mgmnt
- En este momento, si queremos, podremos desconectarnos de winbox por mac, y acceder por IP al equipo, conectandolo por cable a ether3. Nos debería dar una IP y poder acceder a él vía la 192.168.99.1. Seguimos para bingo...
- Configuramos los DNS del mikrotik (cliente) para que el propio router pueda salir a internet y encontrar el otro lado del túnel. Usad los que más os gusten
/ip dns set servers=1.1.1.1,1.0.0.1
- Llega el momento de conectar el equipo a la red que nos proporcione salida a internet. En este caso, tenemos dos opciones: Por cable: tan simple como enchufar ether1 a una boca ethernet del router que nos de salida a internet. Me centro en hacerlo por wifi, que será lo más normal (pocos sitios te encuentras donde te dejen usar una conexión cableada tal cual). Primero creamos el perfil de seguridad (la clave) que usa la wifi a la que nos conectemos, obviamente, no pongáis esa clave, poned la de la red a la que os conectéis.
/interface wireless security-profiles set [ find default=yes ] mode=dynamic-keys authentication-types=wpa2-psk wpa2-pre-shared-key="MySuperWifiPassword123"
- Y nos conectamos con la interfaz física wlan1 en modo station (cliente) a la red de marras. Para esto no os voy a dar comando, puesto que tendríais que especificar hasta el canal. Lo más sencillo para esto es usar el botón "Scan" que tenéis en la pestaña de WiFi Interfaces. Escaneais las redes, seleccionais la que sea y le days a conectar. Como la interfaz wlan1 ya está apuntando por defecto al security profile "default", tal y como le déis se va a conectar y authenticar, todo de un tirón.
- Si todo ha ido bien y os vais a los logs, veréis que la sonda "detect internet" empieza a funcionar. Si detecta conectividad en ether1 o en wlan1 la propia sonda creará un cliente DHCP y obtendrá una IP del rango de la red que nos proporcione internet, así como la ruta de salida a internet necesaria. Lo podéis ver en IP -> DHCP Client y en IP -> Routes. Si todo ha ido como debe y tenemos conexión, podremos lanzar un ping desde la terminal del router, para ver si alcanzamos internet. Si se resulve, vamos por buen camino.
ping google.com
- Activamos en este momento el dominio DDNS de este equipo, para que registre la IP pública contra nuestro dominio de mikrotik
/ip cloud set ddns-enabled=yes
- Creamos el túnel EoIP hacia el otro router. Para evitar fragmentación, seteamos el MTU a 1500 y seleccionamos un número de túnel, en mi caso, el 0.
/interface eoip add name=tunnel-to-A remote-address=serialA.sn.mynetname.net tunnel-id=0 mtu=1500
- Metemos el túnel y la interfaz ether2 en el bridge que creamos al principio, puenteando esas dos interfaces.
/interface bridge port add bridge=bridge1 interface=tunnel-to-A
/interface bridge port add bridge=bridge1 interface=ether2
- Si queremos no solo conectarnos por cable, sino también por wifi al router remoto (lo maś normal), tendremos que crear una interfaz virtual, enciama de la interfaz física wlan1, la cual ya tenemos configurada como nuestra salida WAN. Para ello, al igual que antes, creamos primero el security profile (nuestra contraseña, ahora sí, para nuestra red) y daremos de alta la interfaz virtual, apuntando a ese perfil de seguridad:
/interface wireless security-profiles add name=wlan-home-security mode=dynamic-keys authentication-types=wpa2-psk wpa2-pre-shared-key="MySupperPassowrdForMyOwnWifi123"
/interface wireless add master-interface=wlan1 name=wlan-home security-profile=wlan-home-security ssid=MY_HOME_WIFI disabled=no mode=ap-bridge wps-mode=disabled
- Metemos también esa nueva interfaz en el bridge, puesto que queremos que, al conectarnos a ella, nos de una IP del router A, nuestro router principal que está en casa:
/interface bridge port add bridge=bridge1 interface=wlan-home
- Ahora vamos a hacer que bridge principal obtenga una dirección propia del routar A. De esta manera, cuando estemos conectados y tengamos una IP del rango del router A, podremos seguir accediendo por IP al equipo B. En este caso, como el túnel ya nos da la salida a internet que necesitamos y dicho tráfico va enrutado hacia el router A, usaremos la opción correspondiente del cliente dchp para que no nos añada una ruta dinámica a la tabla de rutas. Con esto, cuando estemos conectados a la LAN principal, dentro del túnel, podremos seguir teniendo acceso al router B usando la IP que obtenga por DHCP el propio equipo, pertenenciente al rango de A. Esta IP no se resolverá hasta que el túnel se establezca, como es lógico.
/ip dhcp-client add interface=bridge1 add-default-route=no
En el router de casa, Router A)
- Creamos en túnel, apuntando al dominio cloud del otro router, que previamente hemos activado en IP -> Cloud. Para evitar fragmentación, seteamos el MTU a 1500 y seleccionamos un número de túnel, idéntico al que hemos usado en el router remoto, en mi caso, el 0.
/interface eoip add name=tunnel-to-B remote-address=serialB.sn.mynetname.net tunnel-id=0 mtu=1500
- Metemos la nueva interfaz del túnel dentro de nuestro bridge, el que lleve las interfaces que conformen nuestra red LAN de casa. Asumo que mi bridge principal se llama "bridge1", vosotros adaptarlo a como se llame el vuestro.
/interface bridge port add bridge=bridge1 interface=tunnel-to-B
- Con este router hemos terminado.
Con esto, si lo hemos hecho bien, tendremos conectividad en capa 2 entre el router A y B. Basta con conectar un equipo por cable al puerto 2 del router B o la interfaz virtual inalámbrica que hemos creado, para que el DHCP del otro extremo nos asigne una dirección de la LAN del router A. En este momento estamos como en casa, y podemos acceder a todo lo que esté en dicho dominio de broadcast. Y cuando digo todo, es todo: desde un NAS que nos ofrece música por DAAP o video por DLNA, a un chromecast que esté pinchado en la TV, a lo que sea que esté en la LAN, se transporta absolutamente todo.
Rizando el rizo: securizando el túnel
Todo esto está muy bien, pero si no podemos encriptar la comunicación entre los dos equipos, cualquier puede interceptar el tráfico del túnel y verlo. Y, cuando te conectas a una wifi pública o sin contraseña, nunca sabes a quien te vas a encontrar. Por suerte, este tipo de túnel soporta IPSec de una manera muy sencilla. Tan sólo tenemos que dar de alta un secreto compartido, común a ambos lados del túnel. Tan sencillo como hacer esto, en ambos lados del túnel:
Código:
/interface eoip set numbers=0 ipsec-secret="MySuperSecret" allow-fast-path=no
Con esto protegemos un poco más si cabe quien se puede conectar a nuestro router de casa.
Espero os sirva de ejemplo por si lo necesitáis en algún momento. Para otro ratito, montaremos un manual similar, pero en capa 3. Es decir, interconectar dos routers remotos con LANs distintas, donde cada equipo hace de router en su localización (site-to-site), usando también EoIP.
Saludos!
Última edición: