Saltar al contenido
sudoquest@root
MikroTik

Túneles y colas

Una residencia: cada habitación entra por PPPoE con su tarifa, las colas reparten la línea, Torch ve quién la satura y WireGuard la une con la oficina.

45 min de lectura

La Residencia Faro tiene una fibra de 100M para todos y un hEX en el cuarto de comunicaciones. En ether1 llega el operador (con su NAT ya puesto); en ether2, el switch del pasillo, con las habitaciones; en ether3, el PC de la recepción; en ether4, la sala de estudio; y en ether5, el grabador de las cámaras. Cada habitación paga su tarifa, y el dueño quiere ver las cámaras desde su oficina, al otro lado de la ciudad. Para todo eso: PPPoE, colas, Torch y WireGuard.

PPPoE: cada habitación, con su usuario

Con DHCP (tema 2), cualquiera que se enchufa recibe una dirección. Con PPPoE, cada habitación entra con su usuario y su contraseña: el router sabe quién es quién, le da su dirección y le aplica su tarifa. Es lo que hacen los operadores con sus clientes.

Hace falta un pool (de dónde salen las direcciones), un perfil (la dirección del router y el pool), el servidor en el puerto de las habitaciones y un secret por usuario. En Winbox, todo está en PPP: Profiles, PPPoE Servers y Secrets.

[admin@R-Faro] > /ppp profile add name=residencia local-address=10.20.0.1 remote-address=habitaciones
[admin@R-Faro] > /interface pppoe-server server add service-name=residencia interface=ether2 default-profile=residencia disabled=no
[admin@R-Faro] > /ppp secret add name=hab101 password=Luna-101 service=pppoe profile=residencia

Cuando una habitación entra, sale en Active Connections, con la dirección que le ha tocado (el pool da desde arriba: la .250, la .249…). Cada sesión es además una interfaz, <pppoe-hab101>, con su ruta: el router llega a cada habitación por la suya.

[admin@R-Faro] > /ppp active print
Columns: NAME, SERVICE, CALLER-ID, ADDRESS, UPTIME
# NAME    SERVICE  CALLER-ID          ADDRESS      UPTIME
0 hab101  pppoe    02:00:00:00:02:61  10.20.0.250  0s    
1 hab102  pppoe    02:00:00:00:02:62  10.20.0.249  0s    
2 hab103  pppoe    02:00:00:00:02:63  10.20.0.248  0s    

Ejercicio

Las habitaciones, por PPPoE

En la residencia, cada habitación entra con su usuario y su contraseña. Monta el servidor PPPoE en ether2 (el switch del pasillo): un perfil que dé la 10.20.0.1 al router y una del pool «habitaciones» a cada una, el servidor (activado) y el secret de la habitación 101 (hab101, contraseña Luna-101).

Encendiendo el router…

La tarifa, en el perfil

Cada perfil puede llevar un rate-limit: lo máximo que pasa. Se escribe como rx/tx visto desde el router: rx es lo que recibe de la habitación (lo que ella sube) y tx lo que le manda (lo que baja). La tarifa básica, 2M de subida y 4M de bajada, es 2M/4M.

[admin@R-Faro] > /ppp profile add name=basica local-address=10.20.0.1 remote-address=habitaciones rate-limit=2M/4M comment="Tarifa basica"

Al entrar, el router pone sola una cola dinámica (con su D) para esa sesión, con la tarifa de su perfil. Por eso un perfil se aplica al entrar: cambiar el perfil de un secret no toca a quien ya está dentro. Hay que quitar su sesión (Active Connections ▸ −) y su router vuelve a llamar enseguida, ya con la tarifa nueva.

Ejercicio

Una tarifa por habitación

Las habitaciones 101 y 102 entran, pero sin límite: cada una se lleva lo que quiere. La 101 paga la tarifa básica (4M de bajada, 2M de subida) y la 102 la plus (20M y 5M). Ponle a cada una su perfil con su rate-limit… y que lo coja: un perfil se aplica al entrar.

Encendiendo el router…

Colas simples: repartir la línea

Una cola simple (Queues ▸ Simple Queues ▸ +) limita lo que pasa hacia y desde su Target: una dirección, una red o una interfaz. Su Max Limit son dos valores, subida y bajada (en la consola, max-limit=10M/10M).

[admin@R-Faro] > /queue simple add name=estudio target=192.168.70.0/24 max-limit=10M/10M
[admin@R-Faro] > /queue simple print
Flags: D - DYNAMIC
0 D name="<pppoe-hab101>" target=<pppoe-hab101> parent=none packet-marks=""
  priority=8/8 queue=default-small/default-small limit-at=2M/4M
  max-limit=2M/4M burst-limit=0/0 burst-threshold=0/0 burst-time=0s/0s
  bucket-size=0.1/0.1

1   name="estudio" target=192.168.70.0/24 parent=none packet-marks=""
  priority=8/8 queue=default-small/default-small limit-at=0/0
  max-limit=10M/10M burst-limit=0/0 burst-threshold=0/0 burst-time=0s/0s
  bucket-size=0.1/0.1

Lo que no frena ninguna cola se reparte la línea: a partes iguales entre los que quieren más.

Ejercicio

La sala de estudio no se come la línea

El ordenador de la sala de estudio (ether4, 192.168.70.0/24) descarga todo lo que puede y deja a los demás con poco. Ponle una cola simple: 10M de subida y 10M de bajada, para toda la sala. La recepción no tiene que notarlo.

Encendiendo el router…

Torch: ¿quién se lleva la línea?

Cuando la línea va lenta, Tools ▸ Torch dice qué está pasando ahora por una interfaz, conexión a conexión, con lo que va en cada sentido. En ether1, el origen de cada fila es lo que está al otro lado (internet), TX es lo que el router manda por ether1 (la subida) y RX lo que entra (la bajada).

[admin@R-Faro] > /tool torch interface=ether1 duration=2s
-- [Q quit|D dump|C-z pause]Columns: MAC-PROTOCOL, IP-PROTOCOL, DSCP, SRC-ADDRESS, SRC-PORT, DST-ADDRESS, 
       DST-PORT, TX, RX
MA  IP-  DSCP  SRC-ADD  SRC-PORT     DST-ADDRESS   DST-P  TX         RX      
ip  tcp     0  8.8.8.8  443 (https)  203.0.113.92  46703  1.7Mbps    77.0Mbps
ip  tcp     0  8.8.8.8  443 (https)  203.0.113.92  59487  220.2kbps  10.0Mbps
ip  tcp     0  8.8.8.8  443 (https)  203.0.113.92  38096  109.8kbps  5.0Mbps 
ip  tcp     0  8.8.8.8  443 (https)  203.0.113.92  35850  88.2kbps   4.0Mbps 
ip  tcp     0  8.8.8.8  443 (https)  203.0.113.92  51556  88.2kbps   4.0Mbps 
-- [Q quit|D dump|C-z pause]

En ether1 todo sale con la dirección pública del router (es el NAT). Para saber quién es, Torch en la interfaz de cada sesión (<pppoe-hab101>…) o en la de cada red (ether3, ether4) enseña la dirección de dentro; y Active Connections dice de qué habitación es cada una. Sin duration, Torch sigue hasta que se pulsa Q; en Winbox, Start y Stop.

Ejercicio

¿Quién satura la línea?

Las tres habitaciones pagan la tarifa básica (4M), pero una entra sin límite y se lleva casi toda la línea de la residencia. Encuentra cuál con Torch (en ether1 o en las sesiones PPPoE) y ponla en su tarifa.

Encendiendo el router…

WireGuard: la oficina, como si estuviera al lado

Un túnel WireGuard une dos redes por internet, cifrado: lo que va de la residencia a la oficina del dueño viaja dentro del túnel. Cada punta tiene un par de claves: la privada no sale nunca del router, y la pública (que sale de la privada) se le da a la otra punta.

WireGuard ▸ + crea la interfaz; el router se inventa su clave privada y enseña la pública.

[admin@R-Faro] > /interface wireguard add name=wg-oficina listen-port=13231 comment=Oficina
[admin@R-Faro] > /interface wireguard print
Flags: R - RUNNING
0 R ;;; Oficina
  name="wg-oficina" mtu=1420 listen-port=13231
  public-key="mOm53setXFsjQO3w8DjpZtbADSzQOTPdz/9lx8+bTkU="

Después, en Peers ▸ +, la otra punta: su clave pública, dónde está (Endpoint y Endpoint Port) y su Allowed Address:

[admin@R-Faro] > /interface wireguard peers add interface=wg-oficina public-key="FF946Jvoqvf7R2awkghSDSUFpTVku0/x0bYxrNaEwm8=" endpoint-address=198.51.100.20 endpoint-port=51820 allowed-address=10.10.0.2/32,192.168.60.0/24

Allowed Address dice dos cosas a la vez: lo que el router deja entrar de ese par, y lo que manda por él. Ahí va la dirección de la otra punta en el túnel (10.10.0.2) y la red de detrás (192.168.60.0/24, la de la oficina). Faltan la dirección del router en el túnel y la ruta a la red de la oficina, por el túnel:

[admin@R-Faro] > /ip address add address=10.10.0.1/30 interface=wg-oficina
[admin@R-Faro] > /ip route add dst-address=192.168.60.0/24 gateway=wg-oficina

El túnel sube cuando las dos puntas se conocen (cada una tiene la clave pública de la otra) y una llega a la otra. Last Handshake dice cuándo se saludaron por última vez:

[admin@R-Faro] > /interface wireguard peers print detail
0  ;;; Oficina
 interface=wg-oficina name="peer1"
 public-key="FF946Jvoqvf7R2awkghSDSUFpTVku0/x0bYxrNaEwm8="
 endpoint-address=198.51.100.20 endpoint-port=51820
 current-endpoint-address=198.51.100.20 current-endpoint-port=51820
 allowed-address=10.10.0.2/32,192.168.60.0/24 client-endpoint=""
 client-allowed-address="" rx=677 tx=282 last-handshake=22s

Ejercicio

La oficina, por WireGuard

El dueño quiere ver las cámaras (ether5, 192.168.30.20) desde su oficina. Une la residencia con la oficina por WireGuard: una interfaz (wg-oficina), la oficina como par (su clave pública: FF946Jvoqvf7R2awkghSDSUFpTVku0/x0bYxrNaEwm8=; está en 198.51.100.20, puerto 51820), la 10.10.0.1/30 en el túnel y la ruta a la red de la oficina (192.168.60.0/24). El técnico de la oficina ya copió la clave pública que enseñe tu router.

Encendiendo el router…

Cuando el túnel no deja pasar

Un túnel arriba (con su Last Handshake) que no lleva nada casi siempre es una de estas:

  • Allowed Address sin la red de la otra punta: lo que viene de ella no entra, y el router no manda nada hacia ella por el túnel;
  • falta la ruta: el router no sabe que esa red está detrás del túnel y contesta por internet;
  • la otra punta no deja pasar tu red (su propio Allowed Address).

Y si un túnel que iba se queda sin Last Handshake, mira el Endpoint: si la otra punta cambia de dirección pública (la oficina cambia de operador, por ejemplo), el router sigue llamando a la vieja y nadie le contesta. Basta con poner la nueva en su par (Peers, doble clic, Endpoint); las claves no cambian.

Ejercicio

El túnel que no deja pasar

El túnel con la oficina está arriba (el router y la oficina se saludan), pero ni el dueño ve las cámaras ni la recepción llega al PC de la oficina. Encuentra qué falta y arréglalo.

Encendiendo el router…

Lo del tema, en la consola

Para En Winbox En la consola
La tarifa de un perfil PPP ▸ Profiles ▸ Limits /ppp profile add … rate-limit=2M/4M
El servidor PPPoE PPP ▸ PPPoE Servers ▸ + /interface pppoe-server server add interface=ether2 disabled=no
Un usuario PPP ▸ Secrets ▸ + /ppp secret add name=hab101 password=… service=pppoe
Echar una sesión PPP ▸ Active Connections ▸ − /ppp active remove [find name=hab101]
Limitar una red Queues ▸ Simple Queues ▸ + /queue simple add target=192.168.70.0/24 max-limit=10M/10M
Ver qué pasa Tools ▸ Torch /tool torch interface=ether1
El túnel WireGuard ▸ + y Peers ▸ + /interface wireguard peers add … allowed-address=…