{"id":1726,"date":"2025-07-21T15:11:48","date_gmt":"2025-07-21T18:11:48","guid":{"rendered":"https:\/\/www.nerdadas.com\/blog\/?p=1726"},"modified":"2025-07-21T15:16:36","modified_gmt":"2025-07-21T18:16:36","slug":"tunnel-eoip-capa-2-entre-sucursales","status":"publish","type":"post","link":"https:\/\/www.nerdadas.com\/blog\/tunnel-eoip-capa-2-entre-sucursales\/","title":{"rendered":"Tunnel EoIP &#8211; Capa 2 entre sucursales"},"content":{"rendered":"\n<p>Ya sea que quieras pasar vlans, compartir dhcp o que tus tel\u00e9fonos voip est\u00e9n en el mismo dominio de broadcast que la central vas a necesitar usar un tunnel L2 entre tus sucursales. No es lo m\u00e1s eficiente, no lo recomendar\u00eda  y muchas veces tampoco lo ideal pero hay casos donde necesitas hacerlo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Qu\u00e9 es EoIP?<\/h2>\n\n\n\n<p><strong>EoIP<\/strong> (Ethernet over IP) es un protocolo propietario desarrollado por <strong>MikroTik<\/strong>, cuya primera implementaci\u00f3n p\u00fablica fue alrededor de <strong>2002<\/strong>, cuando los routers con <strong>RouterOS<\/strong> versi\u00f3n 2.x ya lo soportaban.<\/p>\n\n\n\n<p>Fue dise\u00f1ado para extender redes Ethernet sobre una red IP \u2014es decir, permite unir dos redes Ethernet remotas como si estuvieran f\u00edsicamente conectadas por un cable. Esta t\u00e9cnica es \u00fatil para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Unir VLANs entre sucursales.<\/li>\n\n\n\n<li>Proveer roaming de CAPsMAN.(para otro art\u00edculo)<\/li>\n\n\n\n<li>Correr protocolos que requieren capa 2 (como DHCP, PPPoE, VRRP).<\/li>\n\n\n\n<li>Replicar redes f\u00edsicas completas (broadcasts incluidos).<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo funciona EoIP?<\/h2>\n\n\n\n<p>EoIP encapsula tramas Ethernet completas dentro de paquetes IP usando el protocolo IP n\u00b0 <strong>47<\/strong>(bien de manual y pregunta de ex\u00e1men), tambi\u00e9n conocido como <strong>GRE<\/strong> (Generic Routing Encapsulation), aunque <strong>EoIP no es igual a GRE<\/strong>.(Tiene su propia implementaci\u00f3n del header GRE y no es compatible con otros vendors. De ah\u00ed lo \u00abpropietario\u00bb.)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Encapsulado del paquete<\/h3>\n\n\n\n<p>Una trama EoIP t\u00edpica est\u00e1 formada por:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Capa<\/th><th>Protocolo<\/th><th>Tama\u00f1o aproximado<\/th><th>Descripci\u00f3n<\/th><\/tr><\/thead><tbody><tr><td>Capa 3<\/td><td>IP Header<\/td><td>20 bytes<\/td><td>Protocolo IP: 47 (GRE)<\/td><\/tr><tr><td>Capa 4<\/td><td>EoIP Header<\/td><td>8 bytes<\/td><td>Contiene ID del t\u00fanel y flags<\/td><\/tr><tr><td>Capa 2<\/td><td>Ethernet Frame<\/td><td>64 a 1500 bytes (o m\u00e1s si Jumbo)<\/td><td>Trama Ethernet original<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>El <strong>overhead total m\u00ednimo<\/strong> de EoIP es de <strong>28 bytes<\/strong> (20 IP + 8 EoIP). Este overhead debe considerarse al definir el <strong>MTU<\/strong>.(De vital importancia, si lo sabr\u00e9).<\/p>\n\n\n\n<p>Me ha pasado en una implementaci\u00f3n que el tunnel funciona correctamente pero algunos equipos que salen a internet suman un <strong>MSS<\/strong> m\u00e1s grande y hay problemas con el <strong>MTU<\/strong>. Paso a detallar.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">MTU (Maximum Transmission Unit)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El <a href=\"https:\/\/en.m.wikipedia.org\/wiki\/Maximum_transmission_unit\" data-type=\"link\" data-id=\"https:\/\/en.m.wikipedia.org\/wiki\/Maximum_transmission_unit\">MTU<\/a> en una interfaz EoIP es el del enlace f\u00edsico <strong>menos 28 bytes<\/strong> del encapsulado.\n<ul class=\"wp-block-list\">\n<li>Ejemplo: si la interfaz f\u00edsica tiene un MTU de 1500, el EoIP tendr\u00e1 un MTU de <strong>1472 bytes<\/strong>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Si vas a pasar VLANs o usar PPPoE adentro del t\u00fanel, ten\u00e9s que considerar tambi\u00e9n su overhead.(important\u00edsimo)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">MSS (Maximum Segment Size)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El <a href=\"https:\/\/en.m.wikipedia.org\/wiki\/Maximum_segment_size\" data-type=\"link\" data-id=\"https:\/\/en.m.wikipedia.org\/wiki\/Maximum_segment_size\">MSS<\/a> afecta las conexiones TCP dentro del t\u00fanel. Como EoIP baja el MTU, los paquetes TCP podr\u00edan fragmentarse si no se ajusta el MSS.<\/li>\n\n\n\n<li>Recomendado: usar <strong>MSS clamping<\/strong> en los routers para ajustar autom\u00e1ticamente el tama\u00f1o m\u00e1ximo de segmento TCP.\n<ul class=\"wp-block-list\">\n<li>Valor sugerido: <strong>1412 bytes<\/strong> (1500 &#8211; 20 IP &#8211; 8 EoIP &#8211; 20 TCP &#8211; 40 opciones).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Fragmentaci\u00f3n<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si no se ajusta el MTU\/MSS correctamente, los paquetes pueden fragmentarse, afectando performance.<\/li>\n\n\n\n<li>EoIP <strong>no soporta PMTUD (Path MTU Discovery)<\/strong> por lo que no hay ajuste autom\u00e1tico.(De ah\u00ed la necesidad de <strong>MSS Clamping<\/strong>).<\/li>\n<\/ul>\n\n\n\n<p>C\u00f3mo es el Header EoIP (estructura)?<\/p>\n\n\n\n<p>Un paquete EoIP tiene un header con esta estructura:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Campo<\/th><th>Bytes<\/th><th>Descripci\u00f3n<\/th><\/tr><\/thead><tbody><tr><td>Version<\/td><td>1<\/td><td>Versi\u00f3n del protocolo (siempre 0x00 en RouterOS actual)<\/td><\/tr><tr><td>Type<\/td><td>1<\/td><td>Tipo de paquete (data, keepalive)<\/td><\/tr><tr><td>Tunnel ID<\/td><td>2<\/td><td>Identificador del t\u00fanel (debe coincidir en ambos extremos)<\/td><\/tr><tr><td>Flags<\/td><td>4<\/td><td>Reservado para control de flags y opciones futuras<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Este header se coloca luego del encabezado IP, antes de la trama Ethernet encapsulada. Todo lo dem\u00e1s es pr\u00e1ctico.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vamos al Lab!<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/image-21.png\"><img loading=\"lazy\" decoding=\"async\" width=\"631\" height=\"486\" src=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/image-21.png\" alt=\"\" class=\"wp-image-1740\" srcset=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/image-21.png 631w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/image-21-300x231.png 300w\" sizes=\"auto, (max-width: 631px) 100vw, 631px\" \/><\/a><\/figure>\n\n\n\n<p>Planteo este escenario, 2 redes desde internet, con ips p\u00fablicas(aunque en este caso no lo sean ) que establecen un enlace L2 para unirlas. El dhcp est\u00e1 en la bridge del R1 que tiene asignada la interfaz ether2 y posteriormente el tunnelEoIP. No hay dhcp en la sucursal de R2.<\/p>\n\n\n\n<p><strong>R1<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/system identity\nset name=R1\n\/interface bridge\nadd name=bridge1\n\/ip pool\nadd name=dhcp_pool0 ranges=192.168.10.2-192.168.10.254\n\/interface bridge port\nadd bridge=bridge1 interface=ether2\n\/ip address\nadd address=192.168.122.51\/24 comment=WAN interface=ether1 network=\\\n    192.168.122.0\nadd address=192.168.10.1\/24 comment=LAN interface=bridge1 network=192.168.10.0\n\/ip dhcp-server\nadd address-pool=dhcp_pool0 interface=bridge1 name=dhcp1\n\/ip dhcp-server network\nadd address=192.168.10.0\/24 dns-server=8.8.8.8 gateway=192.168.10.1\n\/ip route\nadd dst-address=0.0.0.0\/0 gateway=192.168.122.1\n<\/code><\/pre>\n\n\n\n<p><strong>R2<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/system identity\nset name=R2\n\/interface bridge\nadd name=bridge1\n\/interface bridge port\nadd bridge=bridge1 interface=ether2\n\/ip address\nadd address=192.168.122.52\/24 interface=ether1 network=192.168.122.0\nadd address=192.168.10.2\/24 interface=bridge1 network=192.168.10.0\n\/ip route\nadd dst-address=0.0.0.0\/0 gateway=192.168.122.1 <\/code><\/pre>\n\n\n\n<p>Esta ser\u00e1 nuestra configuraci\u00f3n inicial. Los puertos que conectaremos a trav\u00e9s del tunnel EoIP ser\u00e1n el ether2 de ambos lados.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/TunnelEoip_1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"683\" height=\"608\" src=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/TunnelEoip_1.png\" alt=\"\" class=\"wp-image-1736\" srcset=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/TunnelEoip_1.png 683w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/TunnelEoip_1-300x267.png 300w\" sizes=\"auto, (max-width: 683px) 100vw, 683px\" \/><\/a><\/figure>\n\n\n\n<p>Dato a tener en cuenta. Si segurizamos el tunnel con IPSec, la clave deber\u00e1 ser <strong>num\u00e9rica<\/strong>, si o si. El Tunnel ID tambi\u00e9n debe ser el mismo de ambos lados y en remote Address obviamente, la ip o dns del otro equipo.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/image-19.png\"><img loading=\"lazy\" decoding=\"async\" width=\"538\" height=\"106\" src=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/image-19.png\" alt=\"\" class=\"wp-image-1737\" srcset=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/image-19.png 538w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/image-19-300x59.png 300w\" sizes=\"auto, (max-width: 538px) 100vw, 538px\" \/><\/a><\/figure>\n\n\n\n<p>Habilitamos el Clamping <strong>mss<\/strong> para evitar problemas con el MTU y  sus headers adicionales y si est\u00e1 habilitado ipsec nos pedir\u00e1 que si o si deshabilitemos el FastPath. IPSec no es algo a negociar, si o si habilitado, sin esto el tunnel estar\u00e1 completamente desprotegido.<\/p>\n\n\n\n<p><strong>R2<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/interface eoip<br \/>add allow-fast-path=no ipsec-secret=123456 mac-address=02:D7:64:C8:CC:E9 name=\\<br \/>eoip-tunnel1 remote-address=192.168.122.51 tunnel-id=1<\/code><\/pre>\n\n\n\n<p><strong>R1<\/strong><\/p>\n\n\n\n<p>\/interface eoip<br \/>add allow-fast-path=no ipsec-secret=123456 mac-address=02:D7:64:C8:CC:E9 name=\\<br \/>eoip-tunnel1 remote-address=192.168.122.52 tunnel-id=1<\/p>\n\n\n\n<p>Y ahora en ambos routers vamos a agregar la interfaz virtual <strong>eoip-tunnel1<\/strong> al bridge existente.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/interface bridge port\nadd bridge=bridge1 interface=eoip-tunnel1<\/code><\/pre>\n\n\n\n<p>Comprobamos si el equipo en la red de R2 obtiene ip por dhcp:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/image-20.png\"><img loading=\"lazy\" decoding=\"async\" width=\"411\" height=\"118\" src=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/image-20.png\" alt=\"\" class=\"wp-image-1739\" srcset=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/image-20.png 411w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/image-20-300x86.png 300w\" sizes=\"auto, (max-width: 411px) 100vw, 411px\" \/><\/a><\/figure>\n\n\n\n<p>Excelente. Podemos hacer pruebas adicionales como ping o encender un tel\u00e9fono ip pero ya con esto nos basta.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">D\u00f3nde no recomiendo un tunnel L2?<\/h2>\n\n\n\n<p>De por si no es recomendable para unir sucursales a menos que suceda lo antes dicho.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>NO<\/strong> en redes grandes (el tr\u00e1fico intensivo puede ser da\u00f1ino a trav\u00e9s de enlaces limitados)<\/li>\n\n\n\n<li><strong>NO<\/strong> sino configuraste correctamente STP\/RSTP\/MSTP. (Cualquier lio de red en capa 2 afectar\u00e1 todas tus sucursales)<\/li>\n\n\n\n<li><strong>NO<\/strong> sino vas a pasar tr\u00e1fico que sea dificilmente routeable. Todo lo que puedas separar por ip hacelo, no hace falta un broadcast tan grande!.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/image-22.png\"><img loading=\"lazy\" decoding=\"async\" width=\"971\" height=\"391\" src=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/image-22.png\" alt=\"\" class=\"wp-image-1742\" srcset=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/image-22.png 971w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/image-22-300x121.png 300w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/image-22-768x309.png 768w\" sizes=\"auto, (max-width: 971px) 100vw, 971px\" \/><\/a><\/figure>\n\n\n\n<p><strong>Status<\/strong> del tunnel.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/image-23.png\"><img loading=\"lazy\" decoding=\"async\" width=\"971\" height=\"391\" src=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/image-23.png\" alt=\"\" class=\"wp-image-1744\" srcset=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/image-23.png 971w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/image-23-300x121.png 300w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2025\/07\/image-23-768x309.png 768w\" sizes=\"auto, (max-width: 971px) 100vw, 971px\" \/><\/a><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Ya sea que quieras pasar vlans, compartir dhcp o que tus tel\u00e9fonos voip est\u00e9n en el mismo dominio de broadcast que la central vas a necesitar usar un tunnel L2 entre tus sucursales. No es lo m\u00e1s eficiente, no lo recomendar\u00eda y muchas veces tampoco lo ideal pero hay casos donde necesitas hacerlo. Qu\u00e9 es [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1732,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1243,1223,161,1,17,804],"tags":[],"class_list":["post-1726","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-montando-tu-red-corporativa-de-0","category-redes","category-seguridad","category-sin-categoria","category-tecnologia","category-ti"],"_links":{"self":[{"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/posts\/1726","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/comments?post=1726"}],"version-history":[{"count":11,"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/posts\/1726\/revisions"}],"predecessor-version":[{"id":1745,"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/posts\/1726\/revisions\/1745"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/media\/1732"}],"wp:attachment":[{"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/media?parent=1726"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/categories?post=1726"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/tags?post=1726"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}