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=… |