Saltar al contenido
sudoquest@root
MikroTik

NAT y firewall

El router de un taller: la oficina sale con masquerade, las cámaras se ven desde fuera con dst-nat y el firewall decide quién llega a qué.

35 min de lectura

Talleres Biela arregla coches desde hace treinta años y acaba de poner un hEX. Por ether1 le llega el operador, con una dirección pública fija (la del ejemplo, 203.0.113.77); en ether2, el PC de la oficina; en ether3, el grabador de las cámaras; y en ether4, la wifi para los clientes que esperan su coche. Las direcciones y la ruta por defecto ya están puestas (eso fue el tema 2). Hoy toca lo que decide qué pasa con cada paquete: que la oficina salga a internet, que el dueño vea las cámaras desde el móvil y que nadie de fuera, ni de la wifi, llegue a donde no debe.

Dos tablas: NAT y filtro

Todo está en IP ▸ Firewall, y en dos pestañas:

  • NAT (/ip firewall nat) cambia direcciones: el origen de lo que sale (cadena srcnat) o el destino de lo que entra (cadena dstnat).
  • Filter Rules (/ip firewall filter) decide si pasa: accept, drop (tirarlo sin contestar) o reject (tirarlo y avisar).

El filtro tiene tres cadenas, según adónde va el paquete:

  • input: lo que va al propio router (Winbox, un ping a su dirección, su DNS).
  • forward: lo que pasa a través del router (el PC de la oficina navegando, el móvil del dueño viendo las cámaras).
  • output: lo que sale del propio router (su ping a 8.8.8.8).

Salir a internet: masquerade

El router ya sale a internet: tiene una dirección pública y su ruta por defecto. Pero el PC de la oficina tiene 192.168.88.10, una dirección privada: sus paquetes llegan a internet y la respuesta no sabe volver, porque esas direcciones no se encaminan por internet. La solución es que el router cambie el origen al salir por ether1 y ponga su dirección pública. Eso es masquerade (en srcnat):

IP ▸ Firewall ▸ NAT ▸ +, con Chain: srcnat y Out. Interface: ether1 en General y Action: masquerade en la pestaña Action.

[admin@R-Biela] > /ip firewall nat add chain=srcnat out-interface=ether1 action=masquerade

Cuando vuelve la respuesta, el router se acuerda de a quién se la cambió y se la devuelve al PC. Masquerade coge la dirección que tenga ether1 en cada momento, así que vale también si el operador la da por DHCP. Si es fija, se puede usar src-nat con To Addresses (la pública).

Ejercicio

La oficina sale a internet

El router del taller ya tiene internet (prueba un ping a 8.8.8.8 desde él), pero el PC de la oficina no navega: sus paquetes salen con 192.168.88.10, una dirección privada, e internet no sabe volver a ella. Haz que el router los saque con su dirección pública.

Encendiendo el router…

Publicar un servicio: dst-nat

El dueño quiere ver las cámaras desde el móvil. Desde internet solo se llega a la dirección pública del router, no al grabador (192.168.30.20, privada). Con dst-nat, lo que llegue a un puerto del router se reenvía a un equipo de dentro: aquí, lo que entre por ether1 al 8080, al 80 del grabador (su web).

[admin@R-Biela] > /ip firewall nat add chain=dstnat in-interface=ether1 protocol=tcp dst-port=8080 action=dst-nat to-addresses=192.168.30.20 to-ports=80
[admin@R-Biela] > /ip firewall nat print
0  chain=srcnat action=masquerade out-interface=ether1

1  chain=dstnat action=dst-nat to-addresses=192.168.30.20 to-ports=80
 protocol=tcp in-interface=ether1 dst-port=8080

Los puertos (Dst. Port, To Ports) solo existen con tcp o udp: sin el protocolo, el router no deja ponerlos. Y sin Dst. Port, la regla se llevaría todos los puertos al grabador, también el de Winbox.

Si el equipo de dentro cambia de puerto (un grabador nuevo con su web en otro), no hace falta otra regla: se cambia To Ports en la que hay. En Winbox, abriéndola; en la consola, con set: /ip firewall nat set [ find dst-port=8080 ] to-ports=….

Ejercicio

Las cámaras, desde el móvil

El dueño quiere ver las cámaras desde el móvil cuando está fuera. El grabador (192.168.30.20) tiene su web en el puerto 80. Publícala en el puerto 8080 de la dirección pública del taller: lo que llegue ahí por ether1, al 80 del grabador.

Encendiendo el router…

Proteger el router: la cadena input

Ahora mismo, cualquiera en internet puede llamar a la puerta del router: Winbox (8291) contesta en la dirección pública. Lo primero es tirar lo que llegue al router por ether1. Pero cuidado: las respuestas a lo que pide el propio router (su ping, su DNS) también entran por ether1. Por eso, antes, una regla que acepte lo establecido: lo que es respuesta a algo que ya empezó (established) o tiene que ver con ello (related).

[admin@R-Biela] > /ip firewall filter add chain=input connection-state=established,related
[admin@R-Biela] > /ip firewall filter add chain=input in-interface=ether1 action=drop
[admin@R-Biela] > /ip firewall filter print
0  chain=input action=accept connection-state=established,related

1  chain=input action=drop in-interface=ether1

Sin action, la regla es accept. En Winbox, Connection State son casillas: marca established y related.

Ejercicio

El router, cerrado desde fuera

Desde internet, cualquiera puede llamar a la puerta del router: Winbox (8291) contesta en la dirección pública. Ciérralo en la cadena input, sin dejar al router sin internet (sus respuestas también entran por ether1) ni a la oficina sin Winbox.

Encendiendo el router…

Separar redes: la cadena forward

Los clientes de la wifi (ether4) llegan ahora mismo al PC de la oficina (ether2): el router encamina entre todas sus redes. Para que no, una regla en forward que tire lo que entra por ether4 y sale por ether2. Lo que va de la wifi a internet sale por ether1, así que sigue pasando.

[admin@R-Biela] > /ip firewall filter add chain=forward in-interface=ether4 out-interface=ether2 action=drop

Esa regla solo separa la wifi de la oficina: las cámaras están en otro puerto, y para ellas hace falta otra igual (con su Out. Interface). O una sola que tire lo de la wifi que no vaya a internet: out-interface=!ether1 (el «!», más abajo).

Ejercicio

La wifi de los clientes, aparte

Los clientes que esperan su coche usan la wifi de ether4 y, ahora mismo, llegan al PC de la oficina. Que la wifi no pueda entrar en la red de la oficina (ether2), pero siga teniendo internet.

Encendiendo el router…

Listas de direcciones y el «!»

Cuando una regla habla de un grupo de equipos («la oficina», «las cámaras»), mejor una lista de direcciones: IP ▸ Firewall ▸ Address Lists ▸ +, con su nombre y una dirección o una red. Varias filas con el mismo nombre son la misma lista.

[admin@R-Biela] > /ip firewall address-list add list=oficina address=192.168.88.0/24
[admin@R-Biela] > /ip firewall address-list print
Columns: LIST, ADDRESS, CREATION-TIME
# LIST     ADDRESS          CREATION-TIME
0 oficina  192.168.88.0/24  2026-10-08 09:00:00

Y el ! delante de un valor es lo contrario: src-address-list=!oficina casa con todo lo que no está en la lista. En Winbox es la casilla ! que hay delante del campo. Así, «al puerto de Winbox, solo la oficina» es una sola regla:

[admin@R-Biela] > /ip firewall filter add chain=input protocol=tcp dst-port=8291 src-address-list=!oficina action=drop

Ejercicio

Winbox, solo desde la oficina

Desde la wifi de los clientes también se llega a Winbox (192.168.50.1, puerto 8291). Haz una lista de direcciones, oficina, con la red de la oficina (192.168.88.0/24), y que al 8291 del router solo entre quien esté en ella.

Encendiendo el router…

El orden de las reglas

Una regla nueva va al final. Si tiene que ir antes, en Winbox se arrastra; en la consola, move (los números son los del último print) o place-before al añadirla. move con un solo número, sin destino, la manda al final de la lista. Si en forward la 0 es «tirar lo que entra por ether1» y la 1 «aceptar lo establecido», esto sube la 1 delante de la 0 y, tras otro print, mete una nueva delante de la que ahora es la 1:

[admin@R-Biela] > /ip firewall filter move 1 0
[admin@R-Biela] > /ip firewall filter add chain=forward connection-nat-state=dstnat place-before=1

connection-nat-state=dstnat casa con lo que ha pasado por un dst-nat: es la forma de dejar pasar lo que publicas (las cámaras) aunque debajo haya un «tirar todo lo que entra por ether1». Es lo mismo que trae RouterOS de fábrica en su firewall: aceptar lo establecido, y tirar lo que entra de fuera salvo lo que tiene dst-nat.

Ejercicio

La regla que nunca llega

Alguien puso en forward «tirar todo lo que entra por ether1» y, debajo, «aceptar lo establecido». Desde entonces la oficina no navega y las cámaras no se ven desde fuera. Sin quitar ni desactivar el drop, ordena las reglas (y deja pasar lo que publica el dst-nat).

Encendiendo el router…

Lo del tema, en la consola

Para En Winbox En la consola
Salir a internet con la dirección del router NAT ▸ + (srcnat, masquerade) /ip firewall nat add chain=srcnat out-interface=ether1 action=masquerade
Publicar un puerto NAT ▸ + (dstnat, dst-nat) /ip firewall nat add chain=dstnat … action=dst-nat to-addresses=… to-ports=…
Aceptar lo establecido Filter Rules ▸ + (Connection State) /ip firewall filter add chain=input connection-state=established,related
Tirar lo que entra de fuera Filter Rules ▸ + (In. Interface, drop) /ip firewall filter add chain=input in-interface=ether1 action=drop
Un grupo de direcciones Address Lists ▸ + /ip firewall address-list add list=… address=…
Lo contrario La casilla ! src-address-list=!oficina
Cambiar el orden Arrastrar la regla /ip firewall filter move 1 0