¿Dónde meter Pi-hole en una red segmentada?

Hola a todos.

Desde hace un año estoy usando en casa un RB4011 y he metido un montón de recomendaciones y scripts que amablemente habéis colgado a lo largo de tiempo. Sin vosotros mi nivel de frikismo de redes nunca hubiese llegado a tan alto.

Ahora quiero meter un Pi-hole en la red. Ahora mismo está instalado en pruebas en un contenedor de docker en mi NAS pero no descarto que deba necesitar una raspberry o similar para él solo.

Mi duda, tras segmentar mi red es: ¿dónde lo meto?

Mi setup es este:
- Una interfaz WAN a ONT (eth1)
- 4 VLANs aisladas entre sí (1-administración, 2-normal, 3-niños y 4-iot). La NAS la tengo en la VLAN "normal" y en el firewall creo reglas para poder acceder desde otras VLANs
- Un servidor de WireGuard en mode road warrior para acceder desde fuera de casa a la NAS.

He estado haciendo pruebas iniciales con pi-hole en la VLAN "normal" pero quisiera extender su uso a la de "niños" y la "iot". Así, que no sé en qué VLAN colgarla (y manosear más el firewall) o si tengo que meterla en una nueva VLAN exclusiva para ella a donde "llamen" las otras VLAN en busca del puerto 53.

¿Cómo lo veis? Gracias por los comentarios.
 
Hola a todos.

Desde hace un año estoy usando en casa un RB4011 y he metido un montón de recomendaciones y scripts que amablemente habéis colgado a lo largo de tiempo. Sin vosotros mi nivel de frikismo de redes nunca hubiese llegado a tan alto.

Ahora quiero meter un Pi-hole en la red. Ahora mismo está instalado en pruebas en un contenedor de docker en mi NAS pero no descarto que deba necesitar una raspberry o similar para él solo.

Mi duda, tras segmentar mi red es: ¿dónde lo meto?

Mi setup es este:
- Una interfaz WAN a ONT (eth1)
- 4 VLANs aisladas entre sí (1-administración, 2-normal, 3-niños y 4-iot). La NAS la tengo en la VLAN "normal" y en el firewall creo reglas para poder acceder desde otras VLANs
- Un servidor de WireGuard en mode road warrior para acceder desde fuera de casa a la NAS.

He estado haciendo pruebas iniciales con pi-hole en la VLAN "normal" pero quisiera extender su uso a la de "niños" y la "iot". Así, que no sé en qué VLAN colgarla (y manosear más el firewall) o si tengo que meterla en una nueva VLAN exclusiva para ella a donde "llamen" las otras VLAN en busca del puerto 53.

¿Cómo lo veis? Gracias por los comentarios.
En una VLAN aparte. Y ya decides tú la comunicación que le llega y la que no, vía firewall.

Saludos!
 
Muchas gracias, así lo haré.

EDIT:
No me va la comunicación entre la red de mantenimiento (desde la que estoy probando a hacer ping, recuadrada en la imagen adjunta) y la raspberry. Ésta funciona porque desde el router con la /tool de telnet/ssh puedo entrar sin problema.

La red de mantenimiento está en la VLAN 10.0.10.0/24, distinta a la de la raspberry.

Tengo metida una raspberry un tanto antigua en la VLAN VL50 (10.0.50.0/24). Está en 10.0.50.201 y sin taggear en eth9.

Pero creo que tengo un cacao de reglas en el cortafuegos porque soy incapaz de hacer ping a la raspberry desde mi VLAN de mantenimiento/soporte (definida como lista de direcciones con 10.0.10.0/24)

En mi red es esencial que las VLAN estén aisladas, salgan a la WAN y que puntualmente se comuniquen entre sí (como hago con el controlador de Unifi que tengo en 10.0.30.203 que me controla un AP en la VLAN de mantenimiento)

¿Me podéis echar una mano? Ya he probado de todo.

Os pego mi cortafuegos, que pensaba que era sencillito:


2022-05-27 (2).png
 
Última edición:
Pues nada... sigo sin poder acceder desde las otras VLAN a 10.0.50.201. En cambio puedo acceder a las NAS de 10.0.30.203 sin problema desde donde sea.

He probado de todo. Ya no sé si el problema es la definición del bridge o mi cortafuegos.

Os dejo mi configuración. Con suerte alguien ve si algo canta mucho.

Mil gracias a todos.

Código:
# may/27/2022 19:35:03 by RouterOS 7.2.3
# software id = UE1A-MLIM
#
# model = RB4011iGS+

/interface bridge
add ingress-filtering=no name=bridge-vlans protocol-mode=none vlan-filtering=\
    yes
/interface wireguard
add listen-port=12345 mtu=1420 name=wireguard
/interface vlan
add interface=bridge-vlans name=VL10_BASE vlan-id=10
add interface=bridge-vlans name=VL20_KIDS vlan-id=20
add interface=bridge-vlans name=VL30_CLRNET vlan-id=30
add interface=bridge-vlans name=VL40_IOT vlan-id=40
add interface=bridge-vlans name=VL50_DNS vlan-id=50
add interface=ether1 name=vlan6-internet vlan-id=6

/interface pppoe-client
add add-default-route=yes disabled=no interface=vlan6-internet name=internet \
    user=adslppp@telefonicanetpa

/interface list
add name=WAN
add name=VLAN
add name=BASE

/interface lte apn
set [ find default=yes ] ip-type=ipv4 use-network-apn=no

/interface wireless security-profiles
set [ find default=yes ] supplicant-identity=MikroTik

/ip pool
add name=VL10_POOL ranges=10.0.10.100-10.0.10.200
add name=VL20_POOL ranges=10.0.20.100-10.0.20.200
add name=VL30_POOL ranges=10.0.30.100-10.0.30.200
add name=VL40_POOL ranges=10.0.40.100-10.0.40.200
add name=VL50_POOL ranges=10.0.50.100-10.0.50.200

/ip dhcp-server
add address-pool=VL10_POOL interface=VL10_BASE name=VL10_DHCP
add address-pool=VL20_POOL interface=VL20_KIDS name=VL20_DHCP
add address-pool=VL30_POOL interface=VL30_CLRNET name=VL30_DHCP
add address-pool=VL40_POOL interface=VL40_IOT name=VL40_DHCP
add address-pool=VL50_POOL interface=VL50_DNS name=VL50_DHCP

/port
set 0 name=serial0
set 1 name=serial1

/user group
set full policy="local,telnet,ssh,ftp,reboot,read,write,policy,test,winbox,pas\
    sword,web,sniff,sensitive,api,romon,dude,rest-api"

/interface bridge port
add bridge=bridge-vlans frame-types=admit-only-vlan-tagged interface=ether2
add bridge=bridge-vlans frame-types=admit-only-vlan-tagged interface=ether3
add bridge=bridge-vlans frame-types=admit-only-untagged-and-priority-tagged \
    ingress-filtering=no interface=ether4 pvid=30
add bridge=bridge-vlans frame-types=admit-only-untagged-and-priority-tagged \
    ingress-filtering=no interface=ether5 pvid=30
add bridge=bridge-vlans frame-types=admit-only-untagged-and-priority-tagged \
    ingress-filtering=no interface=ether6 pvid=10
add bridge=bridge-vlans frame-types=admit-only-untagged-and-priority-tagged \
    ingress-filtering=no interface=ether7 pvid=20
add bridge=bridge-vlans frame-types=admit-only-untagged-and-priority-tagged \
    ingress-filtering=no interface=ether8 pvid=30
add bridge=bridge-vlans frame-types=admit-only-untagged-and-priority-tagged \
    ingress-filtering=no interface=ether9 pvid=50
add bridge=bridge-vlans interface=ether10 pvid=10

/ip neighbor discovery-settings
set discover-interface-list=!dynamic

/ip settings
set max-neighbor-entries=8192 rp-filter=strict

/ipv6 settings
set disable-ipv6=yes max-neighbor-entries=8192

/interface bridge vlan
add bridge=bridge-vlans tagged=bridge-vlans,ether2,ether3 untagged=\
    ether6,ether10 vlan-ids=10
add bridge=bridge-vlans tagged=bridge-vlans,ether2,ether3,ether10 untagged=\
    ether7 vlan-ids=20
add bridge=bridge-vlans tagged=bridge-vlans,ether2,ether3,ether10 untagged=\
    ether4,ether5,ether8 vlan-ids=30
add bridge=bridge-vlans tagged=bridge-vlans,ether2,ether3,ether10 vlan-ids=40
add bridge=bridge-vlans tagged=bridge-vlans,ether2,ether3 untagged=ether9 \
    vlan-ids=50

/interface list member
add interface=internet list=WAN
add interface=VL10_BASE list=VLAN
add interface=VL20_KIDS list=VLAN
add interface=VL30_CLRNET list=VLAN
add interface=VL40_IOT list=VLAN
add interface=VL10_BASE list=BASE
add interface=wireguard list=VLAN
add comment="pihole vlan" interface=VL50_DNS list=VLAN

/interface ovpn-server server
set auth=sha1,md5

/interface wireguard peers
add allowed-address=10.10.0.2/32 comment="p1" interface=wireguard \
    public-key="XXXXXX"
add allowed-address=10.10.0.3/32 comment="t1" interface=wireguard \
    public-key="XXXXXX"
add allowed-address=10.10.0.4/32 comment="t2" interface=\
    wireguard public-key="XXXXXX"

/ip address
add address=10.0.10.1/24 interface=VL10_BASE network=10.0.10.0
add address=10.0.20.1/24 interface=VL20_KIDS network=10.0.20.0
add address=10.0.30.1/24 interface=VL30_CLRNET network=10.0.30.0
add address=10.0.40.1/24 interface=VL40_IOT network=10.0.40.0
add address=10.10.0.1/24 interface=wireguard network=10.10.0.0
add address=10.0.50.1/24 interface=VL50_DNS network=10.0.50.0

/ip cloud
set ddns-enabled=yes

/ip dhcp-server lease
add address=10.0.30.203 client-id=1:0:11:32:C0:4F:87 comment=\
    "Synology DS218+" mac-address=00:11:32:C0:4F:87 server=VL30_DHCP
add address=10.0.10.5 client-id=1:44:d9:e7:90:96:c6 comment=UAP-AC-LR \
    mac-address=44:D9:E7:90:96:C6 server=VL10_DHCP
add address=10.0.30.210 client-id=1:0:4:4b:ce:ff:ca comment="Nvidia Shield" \
    mac-address=00:04:4B:CE:FF:CA server=VL30_DHCP
add address=10.0.30.209 client-id=1:90:56:82:42:63:fc comment=\
    "Bluesound NODE" mac-address=90:56:82:42:63:FC server=VL30_DHCP
add address=10.0.50.201 client-id=1:b8:27:eb:69:9c:6c comment=\
    "Raspberry Pi 3B" mac-address=B8:27:EB:69:9C:6C server=VL50_DHCP

/ip dhcp-server network
add address=10.0.10.0/24 dns-server=10.0.10.1 gateway=10.0.10.1
add address=10.0.20.0/24 dns-server=1.0.0.3,1.1.1.3 gateway=10.0.20.1
add address=10.0.30.0/24 dns-server=10.0.30.203,10.0.30.1 gateway=10.0.30.1
add address=10.0.40.0/24 dns-server=10.0.10.1 gateway=10.0.40.1
add address=10.0.50.0/24 dns-server=10.0.10.1 gateway=10.0.50.1

/ip dns
set allow-remote-requests=yes servers=1.1.1.1,1.0.0.1 use-doh-server=\
    https://dns.cloudflare.com/dns-query verify-doh-cert=yes

/ip dns static
add address=10.0.30.203 name=jupiter.lan
add address=10.0.50.201 name=raspberry.lan

/ip firewall address-list
add address=0.0.0.0/8 comment="self-Identification [RFC 3330]" list=bogons
add address=10.0.0.0/8 comment="Private[RFC 1918] - CLASS A # Check if you nee\
    d this subnet before enable it" list=bogons
add address=127.0.0.0/8 comment="Loopback [RFC 3330]" list=bogons
add address=169.254.0.0/16 comment="Link Local [RFC 3330]" list=bogons
add address=172.16.0.0/12 comment="Private[RFC 1918] - CLASS B # Check if you \
    need this subnet before enable it" list=bogons
add address=192.0.2.0/24 comment="Reserved - IANA - TestNet1" list=bogons
add address=192.88.99.0/24 comment="6to4 Relay Anycast [RFC 3068]" list=\
    bogons
add address=198.18.0.0/15 comment="NIDB Testing" list=bogons
add address=198.51.100.0/24 comment="Reserved - IANA - TestNet2" list=bogons
add address=203.0.113.0/24 comment="Reserved - IANA - TestNet3" list=bogons
add address=224.0.0.0/4 comment=\
    "MC, Class D, IANA # Check if you need this subnet before enable it" \
    list=bogons
add address=10.0.10.0/24 comment="allowed BASE net" list=mgmt
add address=10.10.0.0/24 comment="allowed wireguard (road warrior) net" list=\
    wireguard

/ip firewall filter
add action=accept chain=input comment="allow established & related" \
    connection-state=established,related
add action=drop chain=input comment="defconf: drop invalid on input" \
    connection-state=invalid log=yes log-prefix=!input_invalid
add action=accept chain=input comment="accept icmp only from LAN" \
    in-interface=!ether1 protocol=icmp
add action=accept chain=input comment="accept dns request only from LAN" \
    dst-port=53 in-interface=!ether1 protocol=udp
add action=accept chain=input comment=\
    "admin: allow VL10_BASE full access to router" in-interface=VL10_BASE
add action=accept chain=input comment="vpn: allow wireguard (road warrior)" \
    dst-port=12345 log=yes protocol=udp
add action=drop chain=input comment="defconf: drop all not coming fron LAN" \
    log=yes log-prefix=!input_dropall
add action=fasttrack-connection chain=forward comment=\
    "defconf: fast track established & related forward" connection-state=\
    established,related hw-offload=yes
add action=accept chain=forward comment=\
    "defconf: allow established & related forward" connection-state=\
    established,related
add action=drop chain=forward comment="defconf: drop invalid on forward" \
    connection-state=invalid log=yes log-prefix=!forward_dropinvalid
add action=accept chain=forward comment="access to raspberry admin ports" \
    connection-state=established,related,new connection-type="" dst-address=\
    10.0.50.201 protocol=icmp src-address-list=mgmt
add action=accept chain=forward comment=\
    "access to Unifi controller TCP ports from VL10_BASE" connection-state=\
    established,related,new dst-address=10.0.30.203 dst-port=\
    8080,8443,8880,8843,6789 protocol=tcp src-address-list=mgmt
add action=accept chain=forward comment=\
    "access to Unifi controller UDP ports from VL10_BASE" connection-state=\
    established,related,new dst-address=10.0.30.203 dst-port=10001,3478 \
    protocol=udp src-address-list=mgmt
add action=accept chain=forward comment="access to dsm webgui from mgmt net" \
    connection-state=established,related,new dst-address=10.0.30.203 \
    dst-port=5000 protocol=tcp src-address-list=mgmt
add action=accept chain=forward comment=\
    "vpn: allow access to nas from wireguard-rw" connection-state=\
    established,related,new dst-address=10.0.30.203 protocol=tcp \
    src-address-list=wireguard
add action=accept chain=forward comment=\
    "isolation: my vlans internet access only, not each other" \
    connection-state=new in-interface-list=VLAN log=yes log-prefix=!isolation \
    out-interface-list=WAN
add action=drop chain=forward comment="defconf: drop invalid" \
    connection-state=invalid log=yes log-prefix=invalid
add action=drop chain=forward comment=\
    "defconf: drop incoming from internet which is not public ip" \
    in-interface=ether1 log=yes log-prefix=!public src-address-list=bogons
add action=drop chain=forward comment=\
    "defconf: drop incoming packets that are not NATted" \
    connection-nat-state=!dstnat connection-state=new in-interface=ether1 \
    log=yes log-prefix=!NAT
add action=drop chain=forward comment="defconf: drop all forward" log=yes \
    log-prefix=!forward_drop_all

/ip firewall nat
add action=masquerade chain=srcnat comment="Default masquerade" \
    out-interface-list=WAN

/ip ipsec policy
add dst-address=0.0.0.0/0 src-address=0.0.0.0/0 template=yes
add dst-address=0.0.0.0/0 src-address=0.0.0.0/0 template=yes

/ip service
set telnet disabled=yes
set ftp disabled=yes
set www disabled=yes
set api disabled=yes
set api-ssl disabled=yes

/ip ssh
set strong-crypto=yes

/system clock
set time-zone-name=Europe/Madrid

/system logging
add topics=ipsec,!packet

/system ntp client
set enabled=yes

/system ntp client servers
add address=150.214.94.5
add address=150.214.94.10

/system resource irq rps
set sfp-sfpplus1 disabled=no
 
Esta tarde le damos un repaso y te digo. Tiene pinta de firewall, a simple vista.

Saludos!
 
Un consejo, ya que trabajas todo con VLANs: activa el ingress filtering, tanto en todos los puertos del bridge, como en el propio bridge. Es una configuración mucho más segura que la que tienes ahora mismo, puesto que evita que el router escuche tráfico que no venga de las VLANs que tienes declaradas para cada puerto, y al mismo tiempo elimina el uso de la vlan 1 (vlan por defecto). Una vez activado en todos los puertos y el bridge, reinicia el equipo.

Tu problema es el chocho que tienes en el firewall, como sospechaba. Cuando te mueves de usar un firewall por defecto a uno restrictivo con reglas de "drop all" tienes que permitir expresamente todo tráfico que necesites, antes de la regla de drop generalista. Son setups mucho más seguros, pero también mucho más complejos de mantener. Yo, en tu lugar, y para una vivienda particular, evitaría eso tipo de setup, y volvería a la config original del firewall de mikrotik. En esa config, en input se prohíbe todo acceso que no venga de la lista LAN y en forward está todo permitido, salvo el tráfico que viene de fuera (internet) a dentro sin una regla de NAT asociada.

Yo, en tu lugar, simplificaría el firewall en esto:
Código:
/ip firewall filter
add action=accept chain=input comment=\
    "defconf: accept established,related,untracked" connection-state=\
    established,related,untracked
add action=drop chain=input comment="defconf: drop invalid" connection-state=\
    invalid
add action=accept chain=input comment="defconf: accept ICMP" protocol=icmp limit=\
    10,5:packet
add action=accept chain=input comment="vpn: allow wireguard" dst-port=\
    12345 protocol=udp
add action=drop chain=input comment="defconf: drop all not coming from LAN(BASE)" \
    in-interface-list=!BASE
add action=accept chain=forward comment="defconf: accept in ipsec policy" \
    ipsec-policy=in,ipsec
add action=accept chain=forward comment="defconf: accept out ipsec policy" \
    ipsec-policy=out,ipsec
add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \
    connection-state=established,related hw-offload=yes
add action=accept chain=forward comment=\
    "defconf: accept established,related, untracked" connection-state=\
    established,related,untracked
add action=drop chain=forward comment="defconf: drop invalid" \
    connection-state=invalid
add action=drop chain=forward comment=\
    "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \
    connection-state=new in-interface-list=WAN
add action=accept chain=forward in-interface-list=BASE comment="VLANS: BASE vlan have full access, everywhere"
add action=accept chain=forward in-interface-list=VLAN dst-address=10.0.50.201 dst-port=53 \
protocol=udp comment="VLANS: all vlans can use pi-hole"
add action=reject chain=forward comment=\
    "VLANS: reaching this point, vlans can only access internet" out-interface-list=!WAN \
    reject-with=icmp-net-prohibited in-interface-list=VLAN

Con las siguientes consideraciones sobre la nueva configuración:
  • La lista BASE viene a ser lo que la lista LAN en la config original. He considerado que esa VLAN ve todas las demás, sin excepción.
  • Salvo para la lista BASE, nadie tiene acceso al chain de input, así que entrega como DNS en el DHCP únicamente la IP del pi-hole y al menos un servidor público de respaldo, por si esta fallase.
  • Todas las VLANs pueden acceder a la IP del pi-hole, a consumirlo por UDP y en el puerto 53.
  • Llegadas a la última regla, las VLANs sólo podrán salir a internet, si no han macheado con ninguna regla de accept previa.
  • En forward, wireguard se va a comportar como BASE. Si quieres que también lo haga en input, mete la interfaz en la misma lista.

Otras consideraciones, respecto a lo que tenías
  • Olvídate de las listas "bogons" y de esas chorradas. Eso, para un router doméstico, no se usa. Probablemente, parte de tu dolor de cabeza venga de ahí. Descarta el uso de dichas listas, van a complicar tu setup y rara vez te van a servir de algo a nivel doméstico.
  • Ojo con logar las peticiones que golpean una regla de firewall: vas a poner el log calentito, y no sirve de nada si no vas a tomar ninguna acción contra ellas. Deja que las reglas trabajen, en silencio. Si tienes dudas de si tu setup es seguro, intenta hacerle un test tratando de saltártelo. Pero no escribas a lo tonto en disco, que son cosas que penalizan mucho a un equipo, por mucho que la memoria sea flash/nand
  • NO quites el ICMP!!! Esa regla está en input y abierta a internet por una razón importantísima: el cálculo automático del MTU. Si lo prohibes, esos cálculos automáticos desaparecen y te toca lidiar con el tamaño de paquete de forma manual, especialmente engorroso con VPNs. Si te preocupa que esa regla esté ahí, limita su uso a una cadencia máxima de paquetes por segundo (te mando un ejemplo).
  • No te compliques la vida con los connection state, pues sólo te van a valer para el tráfico TCP. Las conexiones UDP no llevan estado.
  • Si el resto de VLANs no tiene un uso "especial", considera en reducir tus VLANs a 2: Lo "confiable" y lo "dudable". Confiable accede a todo, dudable sólo accede a lo que yo le diga exprésamente, y a internet. En este caso, el pi-hole, los mueves a "confiable"

Saludos!
 
Muchísimas gracias por la ENORME respuesta.

Como es un cambio radical en mis reglas del firewall, tengo que pillar un momento que esté solo en casa para que mis amables usuarios/familia no se me tiren a la yugular, ya sabes... ;-)

Lo de dejarlo en 2 VLAN seguramente sea lo mejor. Los contenidos de los críos los filtro con pi-hole y en la VLAN "sospechosa" meto los cacharros de IOT e invitados ocasionales.

El pollo que has visto viene del tutorial de bridges y VLANs del foro de Mikrotik de hace varios años atrás y cosas que he ido añadiendo. Al final me ha salido este batiburrillo.

Os cuento en breve cómo acaba mi operación renove.

Gracias de nuevo.

EDIT
Supongo que estas dos reglas están en la chain forward:

Código:
add action=accept in-interface-list=BASE comment="VLANS: BASE vlan have full access, everywhere"
add action=accept in-interface-list=VLAN dst-address=10.0.50.201 dst-port=53 \
 
Última edición:
EDIT
Supongo que estas dos reglas están en la chain forward:
Joder, qué fallo, claro, son del chain de forward. Las metí a mano y se me olvidó el parámetro del chain.

Para probarlo sin romper nada, la manera más sencilla es que des dns público primero a las vlans por dhcp y luego comentes todas tus reglas y metas esas.

Y crea backup de lo que tienes ahora mismo, que no está mal del todo.

Saludos!
 
Bueno,

Pues parece que en general va bien. Y lo he hecho con un solo reinicio y mucho cuidadito.Pero tengo una serie de flecos sueltos relativamente menores:

1. ¿Debo meter un cierre de firewall con esto? Pensaba que era fundamental por otras configuraciones pero he visto que no lo has puesto:
Código:
add action=drop chain=forward comment="defconf: drop all forward"

2. En un principio sólo quería wireguard accediendo a la NAS, pero por el mismo precio quisiera acceder a todo lo local e internet. Pero aunque meta la interfaz wireguard en la lista VLAN del bridge, sigo sin poder salir a internet desde una conexión wieguard. ¿Es por lo comentado en el punto 1?

3. Creo que eras partidario de meter DoH en las raspberry ¿no?

4. Gracias a pihole, veo que los cacharros de Xiaomi y las apps de "la tele" son un festival de actividad.

5. ¿hay algun modo de que en pihole se vean reflejados los nombres de los hosts y no las IPs?

Adjunto el setup actual limpio:

Código:
# may/29/2022 13:13:15 by RouterOS 7.2.3
# software id = UE1A-MLIM
#
# model = RB4011iGS+

/interface bridge
add name=bridge-vlans protocol-mode=none vlan-filtering=yes

/interface wireguard
add listen-port=12345 mtu=1420 name=wireguard

/interface vlan
add interface=bridge-vlans name=VL10_BASE vlan-id=10
add interface=bridge-vlans name=VL40_IOT vlan-id=40
add interface=ether1 name=vlan6-internet vlan-id=6

/interface pppoe-client
add add-default-route=yes disabled=no interface=vlan6-internet name=internet \
    user=adslppp@telefonicanetpa

/interface list
add name=WAN
add name=VLAN
add name=BASE

/interface lte apn
set [ find default=yes ] ip-type=ipv4 use-network-apn=no

/interface wireless security-profiles
set [ find default=yes ] supplicant-identity=MikroTik

/ip pool
add name=VL10_POOL ranges=10.0.10.100-10.0.10.200
add name=VL40_POOL ranges=10.0.40.100-10.0.40.200

/ip dhcp-server
add address-pool=VL10_POOL interface=VL10_BASE name=VL10_DHCP
add address-pool=VL40_POOL interface=VL40_IOT name=VL40_DHCP

/port
set 0 name=serial0
set 1 name=serial1

/user group
set full policy="local,telnet,ssh,ftp,reboot,read,write,policy,test,winbox,pas\
    sword,web,sniff,sensitive,api,romon,dude,rest-api"

/interface bridge port
add bridge=bridge-vlans frame-types=admit-only-vlan-tagged interface=ether2
add bridge=bridge-vlans frame-types=admit-only-vlan-tagged interface=ether3
add bridge=bridge-vlans frame-types=admit-only-untagged-and-priority-tagged \
    ingress-filtering=no interface=ether4 pvid=10
add bridge=bridge-vlans frame-types=admit-only-untagged-and-priority-tagged \
    ingress-filtering=no interface=ether5 pvid=10
add bridge=bridge-vlans frame-types=admit-only-untagged-and-priority-tagged \
    ingress-filtering=no interface=ether6 pvid=10
add bridge=bridge-vlans frame-types=admit-only-untagged-and-priority-tagged \
    ingress-filtering=no interface=ether7 pvid=10
add bridge=bridge-vlans frame-types=admit-only-untagged-and-priority-tagged \
    ingress-filtering=no interface=ether8 pvid=10
add bridge=bridge-vlans frame-types=admit-only-untagged-and-priority-tagged \
    ingress-filtering=no interface=ether9 pvid=10
add bridge=bridge-vlans interface=ether10 pvid=10

/ip neighbor discovery-settings
set discover-interface-list=!dynamic

/ip settings
set max-neighbor-entries=8192 rp-filter=strict

/ipv6 settings
set disable-ipv6=yes max-neighbor-entries=8192

/interface bridge vlan
add bridge=bridge-vlans tagged=bridge-vlans,ether2,ether3 untagged=\
    ether6,ether10,ether4,ether5 vlan-ids=10
add bridge=bridge-vlans tagged=bridge-vlans,ether2,ether3,ether10 vlan-ids=40

/interface list member
add interface=internet list=WAN
add interface=VL10_BASE list=VLAN
add interface=VL40_IOT list=VLAN
add interface=VL10_BASE list=BASE
add interface=wireguard list=VLAN

/interface ovpn-server server
set auth=sha1,md5

/interface wireguard peers
add allowed-address=10.10.0.2/32 comment="pixel 4" interface=wireguard \
    public-key="XXXXXXXXXXXXXXXXXX"
add allowed-address=10.10.0.3/32 comment="thinkpad 13" interface=wireguard \
    public-key="XXXXXXXXXXXXXXXXXX"
add allowed-address=10.10.0.4/32 comment="thinkcentre beta" interface=\
    wireguard public-key="XXXXXXXXXXXXXXXXXXXX"
    
/ip address
add address=10.0.10.1/24 interface=VL10_BASE network=10.0.10.0
add address=10.0.40.1/24 interface=VL40_IOT network=10.0.40.0
add address=10.10.0.1/24 interface=wireguard network=10.10.0.0

/ip cloud
set ddns-enabled=yes

/ip dhcp-server lease
add address=10.0.10.5 client-id=1:44:d9:e7:90:96:c6 comment=UAP-AC-LR \
    mac-address=44:D9:E7:90:96:C6 server=VL10_DHCP
add address=10.0.10.205 client-id=1:90:56:82:42:63:fc comment=\
    "Bluesound NODE" mac-address=90:56:82:42:63:FC server=VL10_DHCP
add address=10.0.10.201 client-id=1:0:4:4b:ce:ff:ca comment="Nvidia Shield" \
    mac-address=00:04:4B:CE:FF:CA server=VL10_DHCP
add address=10.0.10.202 client-id=1:b8:27:eb:69:9c:6c comment=\
    "Raspberry Pi 3B" mac-address=B8:27:EB:69:9C:6C server=VL10_DHCP
add address=10.0.10.203 client-id=1:0:11:32:c0:4f:87 comment=\
    "Synology DS218+" mac-address=00:11:32:C0:4F:87 server=VL10_DHCP

/ip dhcp-server network
add address=10.0.10.0/24 dns-server=10.0.10.202,10.0.10.1 gateway=10.0.10.1
add address=10.0.40.0/24 dns-server=10.0.10.202,10.0.10.1 gateway=10.0.40.1

/ip dns
set allow-remote-requests=yes servers=1.1.1.1,1.0.0.1 use-doh-server=\
    https://dns.cloudflare.com/dns-query verify-doh-cert=yes

/ip dns static
add address=10.0.10.203 name=jupiter.lan
add address=10.0.10.202 name=raspberry.lan

/ip firewall address-list
add address=10.10.0.0/24 comment="WireGuard (road warrior) net" list=\
    wireguard

/ip firewall filter
add action=accept chain=input comment=\
    "defconf: accept established,related,untracked" connection-state=\
    established,related,untracked
add action=drop chain=input comment="defconf: drop invalid" connection-state=\
    invalid log-prefix=!input_invalid
add action=accept chain=input comment="defconf: accept ICMP" limit=\
    10,5:packet protocol=icmp
add action=accept chain=input comment="vpn: allow wireguard (road warrior)" \
    dst-port=12345 protocol=udp
add action=drop chain=input comment=\
    "defconf: drop all not coming from LAN (BASE)" in-interface-list=!BASE
add action=accept chain=forward comment="defconf: accept in ipsec policy" \
    ipsec-policy=in,ipsec
add action=accept chain=forward comment="defconf: accept out ipsec policy" \
    ipsec-policy=out,ipsec
add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \
    connection-state=established,related hw-offload=yes
add action=accept chain=forward comment=\
    "accept established,related,untracked" connection-state=\
    established,related,untracked
add action=drop chain=forward comment="defconf: drop invalid" \
    connection-state=invalid log-prefix=!forward_dropinvalid
add action=accept chain=forward comment=\
    "vpn: allow access to nas from wireguard-rw" connection-state=\
    established,related,new dst-address=10.0.10.203 protocol=tcp \
    src-address-list=wireguard
add action=drop chain=forward comment=\
    "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \
    connection-state=new in-interface-list=WAN log-prefix=!NAT
add action=accept chain=forward comment=\
    "VLANS: BASE vlan have full access, everywhere" in-interface-list=BASE
add action=accept chain=forward comment="VLANS: all vlans can use pi-hole" \
    dst-address=10.0.10.202 dst-port=53 in-interface-list=VLAN protocol=udp
add action=reject chain=forward comment=\
    "VLANS: reaching this point, vlans can only access internet" \
    in-interface-list=VLAN out-interface-list=!WAN reject-with=\
    icmp-net-prohibited
add action=drop chain=forward comment="defconf: drop all forward"

/ip firewall nat
add action=masquerade chain=srcnat comment="Default masquerade" \
    out-interface-list=WAN

/ip ipsec policy
add dst-address=0.0.0.0/0 src-address=0.0.0.0/0 template=yes
add dst-address=0.0.0.0/0 src-address=0.0.0.0/0 template=yes

/ip service
set telnet disabled=yes
set ftp disabled=yes
set www disabled=yes
set api disabled=yes
set api-ssl disabled=yes

/ip ssh
set strong-crypto=yes

/system clock
set time-zone-name=Europe/Madrid

/system logging
add topics=ipsec,!packet

/system ntp client
set enabled=yes

/system ntp client servers
add address=150.214.94.5
add address=150.214.94.10

/system resource irq rps
set sfp-sfpplus1 disabled=no
 
1. No, no debes. En un router para una empresa, te diría que sí. En un router de casa, meter una regla de ese estilo, hace modificar todas las reglas del chain de forward, incluida la regla de drop all not dstnated. Ahora mismo, tu firewall en forward acepta todo lo que no esté explícitamente denegado. De la otra forma, hace justo lo contrario, denegar todo lo que no esté explícitamente aceptado. Es un modo más seguro, pero mucho más tedioso de mantener y de administrar. Déjalo como lo tienes, que es perfectamente seguro.

2. En un principio sólo quería wireguard accediendo a la NAS, pero por el mismo precio quisiera acceder a todo lo local e internet. Pero aunque meta la interfaz wireguard en la lista VLAN del bridge, sigo sin poder salir a internet desde una conexión wieguard. ¿Es por lo comentado en el punto 1?
Correcto. La interfaz de wireguard no necesitas meterla en ninguna lista ni en ningún bridge. Es una interfaz de L3 y funciona tal cual. Pero, si en forward metes una regla que tira todo el tráfico a la basura, por narices te toca aceptar dicho tráfico explícitamente. Como te he dicho antes, complicas muchísimo el chain de forward con una regla así, especialmente par aun setup doméstico.

3. Si lo quieres usar, sí, mejor en el pi-hole que en el router.

4. Correcto. Especialmente los chismes chinos son un festival. Serán baratos, pero está claro que el resto del precio lo pagas en privacidad.

5. Sí. En el mismo pi.hole lo puedes hacer. Ve a Local DNS -> DNS Records y crea dominios de tipo micacharro.lan = 10.0.10.x y te saldrán con ese nombre en el query log. Además, podrás hacer ping a micacharro.lan


Del export sigo viendo cosillas pendientes, como que no tienes ingress filtering en los puertos de acceso, en la VLAN 40 no entregas un DNS público cuando dicha VLAN no tiene acceso al chain de input (no puede usar la IP 10.0.10.1 como DNS), estás tratando las conexiones de wireguard como si de una conexión TCP con estado se tratase (cuando es UDP y la regla que tienes no tiene sentido) en el firewall y sigues enrocado con el drop all en ese chain, el cual te complica de sobremanera ese chain.

Saludos!
 
He hecho los deberes y mañana acabo de probar todo. Pero parece que funciona a la perfección.
Muchísimas gracias por la ayuda prestada. No sabes cuánto he a prendido con tus comentarios.
Saludos y gracias de nuevo!
 
He hecho los deberes y mañana acabo de probar todo. Pero parece que funciona a la perfección.
Muchísimas gracias por la ayuda prestada. No sabes cuánto he a prendido con tus comentarios.
Saludos y gracias de nuevo!
De nada, a mandar!
 
Pues creo que ya está todo.
Cuelgo la configuración por si sirve de inspiración a alguien:

Código:
# may/30/2022 21:25:42 by RouterOS 7.2.3
# software id = UE1A-MLIM
#
# model = RB4011iGS+

/interface bridge
add name=bridge-vlans protocol-mode=none vlan-filtering=yes

/interface wireguard
add listen-port=12345 mtu=1420 name=wireguard

/interface vlan
add interface=bridge-vlans name=VL10_BASE vlan-id=10
add interface=bridge-vlans name=VL40_IOT vlan-id=40
add interface=ether1 name=vlan6-internet vlan-id=6

/interface pppoe-client
add add-default-route=yes disabled=no interface=vlan6-internet name=internet \
    user=adslppp@telefonicanetpa

/interface list
add name=WAN
add name=VLAN
add name=BASE

/interface lte apn
set [ find default=yes ] ip-type=ipv4 use-network-apn=no

/interface wireless security-profiles
set [ find default=yes ] supplicant-identity=MikroTik

/ip pool
add name=VL10_POOL ranges=10.0.10.100-10.0.10.200
add name=VL40_POOL ranges=10.0.40.100-10.0.40.200

/ip dhcp-server
add address-pool=VL10_POOL interface=VL10_BASE name=VL10_DHCP
add address-pool=VL40_POOL interface=VL40_IOT name=VL40_DHCP

/port
set 0 name=serial0
set 1 name=serial1

/user group
set full policy="local,telnet,ssh,ftp,reboot,read,write,policy,test,winbox,pas\
    sword,web,sniff,sensitive,api,romon,dude,rest-api"

/interface bridge port
add bridge=bridge-vlans frame-types=admit-only-vlan-tagged interface=ether2
add bridge=bridge-vlans frame-types=admit-only-vlan-tagged interface=ether3
add bridge=bridge-vlans frame-types=admit-only-untagged-and-priority-tagged \
    interface=ether4 pvid=10
add bridge=bridge-vlans frame-types=admit-only-untagged-and-priority-tagged \
    interface=ether5 pvid=10
add bridge=bridge-vlans frame-types=admit-only-untagged-and-priority-tagged \
    interface=ether6 pvid=10
add bridge=bridge-vlans frame-types=admit-only-untagged-and-priority-tagged \
    interface=ether7 pvid=10
add bridge=bridge-vlans frame-types=admit-only-untagged-and-priority-tagged \
    interface=ether8 pvid=10
add bridge=bridge-vlans frame-types=admit-only-untagged-and-priority-tagged \
    interface=ether9 pvid=10
add bridge=bridge-vlans interface=ether10 pvid=10

/ip neighbor discovery-settings
set discover-interface-list=!dynamic

/ip settings
set max-neighbor-entries=8192 rp-filter=strict

/ipv6 settings
set disable-ipv6=yes max-neighbor-entries=8192

/interface bridge vlan
add bridge=bridge-vlans tagged=bridge-vlans,ether2,ether3 untagged=\
    ether6,ether10,ether4,ether5 vlan-ids=10
add bridge=bridge-vlans tagged=bridge-vlans,ether2,ether3,ether10 vlan-ids=40

/interface list member
add interface=internet list=WAN
add interface=VL10_BASE list=VLAN
add interface=VL40_IOT list=VLAN
add interface=VL10_BASE list=BASE
add interface=wireguard list=VLAN
add interface=wireguard list=BASE

/interface ovpn-server server
set auth=sha1,md5

/interface wireguard peers
add allowed-address=10.10.0.2/32 comment="pixel 4" interface=wireguard \
    public-key=""
add allowed-address=10.10.0.3/32 comment="thinkpad 13" interface=wireguard \
    public-key=""
add allowed-address=10.10.0.4/32 comment="thinkcentre beta" interface=\
    wireguard public-key=""

/ip address
add address=10.0.10.1/24 interface=VL10_BASE network=10.0.10.0
add address=10.0.40.1/24 interface=VL40_IOT network=10.0.40.0
add address=10.10.0.1/24 interface=wireguard network=10.10.0.0

/ip cloud
set ddns-enabled=yes

/ip dhcp-server lease
add address=10.0.10.5 client-id=1:44:d9:e7:90:96:c6 comment=UAP-AC-LR \
    mac-address=44:D9:E7:90:96:C6 server=VL10_DHCP
add address=10.0.10.205 client-id=1:90:56:82:42:63:fc comment=\
    "Bluesound NODE" mac-address=90:56:82:42:63:FC server=VL10_DHCP
add address=10.0.10.201 client-id=1:0:4:4b:ce:ff:ca comment="Nvidia Shield" \
    mac-address=00:04:4B:CE:FF:CA server=VL10_DHCP
add address=10.0.10.202 client-id=1:b8:27:eb:69:9c:6c comment=\
    "Raspberry Pi 3B" mac-address=B8:27:EB:69:9C:6C server=VL10_DHCP
add address=10.0.10.203 client-id=1:0:11:32:c0:4f:87 comment=\
    "Synology DS218+" mac-address=00:11:32:C0:4F:87 server=VL10_DHCP

/ip dhcp-server network
add address=10.0.10.0/24 dns-server=10.0.10.202,10.0.10.1 gateway=10.0.10.1
add address=10.0.40.0/24 dns-server=10.0.10.202,1.1.1.1 gateway=10.0.40.1

/ip dns
set allow-remote-requests=yes servers=1.1.1.1,1.0.0.1 use-doh-server=\
    https://dns.cloudflare.com/dns-query verify-doh-cert=yes

/ip dns static
add address=10.0.10.203 name=jupiter.lan
add address=10.0.10.202 name=raspberry.lan

/ip firewall address-list
add address=10.10.0.0/24 comment="WireGuard (road warrior) net" list=\
    wireguard

/ip firewall filter
add action=accept chain=input comment=\
    "defconf: accept established,related,untracked" connection-state=\
    established,related,untracked
add action=drop chain=input comment="defconf: drop invalid" connection-state=\
    invalid log-prefix=!input_invalid
add action=accept chain=input comment="defconf: accept ICMP" limit=\
    10,5:packet protocol=icmp
add action=accept chain=input comment="vpn: allow wireguard (road warrior)" \
    dst-port=12345 protocol=udp
add action=accept chain=input comment="vpn: access to router" src-address=\
    10.10.0.0/24
add action=drop chain=input comment=\
    "defconf: drop all not coming from LAN (BASE)" in-interface-list=!BASE
add action=accept chain=forward comment="defconf: accept in ipsec policy" \
    ipsec-policy=in,ipsec
add action=accept chain=forward comment="defconf: accept out ipsec policy" \
    ipsec-policy=out,ipsec
add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \
    connection-state=established,related hw-offload=yes
add action=accept chain=forward comment=\
    "accept established,related,untracked" connection-state=\
    established,related,untracked
add action=drop chain=forward comment="defconf: drop invalid" \
    connection-state=invalid log-prefix=!forward_dropinvalid
add action=drop chain=forward comment=\
    "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \
    connection-state=new in-interface-list=WAN log-prefix=!NAT
add action=accept chain=forward comment=\
    "VLANS: BASE vlan have full access, everywhere" in-interface-list=BASE
add action=accept chain=forward comment="VLANS: all vlans can use pi-hole" \
    dst-address=10.0.10.202 dst-port=53 in-interface-list=VLAN protocol=udp
add action=reject chain=forward comment=\
    "VLANS: reaching this point, vlans can only access internet" \
    in-interface-list=VLAN out-interface-list=!WAN reject-with=\
    icmp-net-prohibited

/ip firewall nat
add action=masquerade chain=srcnat comment="Default masquerade" \
    out-interface-list=WAN

/ip ipsec policy
add dst-address=0.0.0.0/0 src-address=0.0.0.0/0 template=yes
add dst-address=0.0.0.0/0 src-address=0.0.0.0/0 template=yes

/ip service
set telnet disabled=yes
set ftp disabled=yes
set www disabled=yes
set api disabled=yes
set api-ssl disabled=yes

/ip ssh
set strong-crypto=yes

/system clock
set time-zone-name=Europe/Madrid

/system logging
add topics=ipsec,!packet

/system ntp client
set enabled=yes

/system ntp client servers
add address=150.214.94.5
add address=150.214.94.10

/system resource irq rps
set sfp-sfpplus1 disabled=no
 
En el bridge puedes poner el protocol mode = rtsp (default), que en esta versión ya es compatible con hardware offloading. Y, si pusiste el ingress filtering en el bridge, marca frame-types=admit-only-vlan-tagged para el propio bridge, ya en él no vas a manejar nunca tráfico sin taggear.

Igualmente en el menú ipsec, primera pestala, tienes dos templates redundantes que salen en el export y puedes borrar.

Y, sigo pensando que es mala idea loggerar los hits del firewall, a menos que lo hagas temporalmente y a modo de pruebas.

Por lo demás, todo correcto! Tiene muy buena pinta.

Saludos!
 
En el bridge puedes poner el protocol mode = rtsp (default), que en esta versión ya es compatible con hardware offloading. Y, si pusiste el ingress filtering en el bridge, marca frame-types=admit-only-vlan-tagged para el propio bridge, ya en él no vas a manejar nunca tráfico sin taggear.

Igualmente en el menú ipsec, primera pestala, tienes dos templates redundantes que salen en el export y puedes borrar.

Y, sigo pensando que es mala idea loggerar los hits del firewall, a menos que lo hagas temporalmente y a modo de pruebas.

Por lo demás, todo correcto! Tiene muy buena pinta.

Saludos!

Pues ya está todo corregido.
Va como la seda.
Muchas gracias de nuevo por todo.
 
Arriba