
Tengo un enrutador dd-wrt con dos interfaces Wi-Fi ( ath0
, ath1
). Quiero que todo lo que esté encendido ath0
no tenga ningún tipo de acceso WAN. Solo LAN (hacia y desde el dispositivo).
¿Cómo haría esto de la manera más fácil y sólida?
Antes, también probé esto usando ath1 agregando un AP virtual, un nuevo puente para el AP y algunas configuraciones avanzadas de enrutamiento y firewall. Sin embargo, esto era demasiado complicado y pensé que debería ser mucho más fácil usar mi ath0
interfaz (5GHz) (de todos modos sin usar) para este propósito.
Estoy usando OpenVPN como cliente, lo que complica un poco las cosas. Cuando uso el firewall de iptables con el enfoque anterior, siempre tengo que restablecer manualmente la configuración del firewall porque un archivo en /etc/ está sobrescribiendo mis reglas ( -I
en la parte superior) debido a la VPN, permitiendo todo el acceso WAN siempre que finalice. la VPN. Debido a squashFS no pude encontrar una manera de evitarlo y tener que sobrescribirlo siempre manualmente después de guardar la configuración/reiniciar el enrutador no es tan agradable. Además, no estoy seguro de que no lo sobrescriba nuevamente más tarde.
Tampoco quiero ath0
tener acceso VPN. No puedo usar iptables con una IP de origen porque debería ser para todos los clientes en ese SSID/interfaz y tan pronto como se conecten, por lo que realmente no sabré una IP de antemano.
Intenté buscar esto pero no pude encontrar nada que funcionara para mi caso, excepto la solución AP/puente virtual demasiado avanzada.
Respuesta1
Suponiendo que también tiene ebtables
(o ebtables-nft
) además de iptables
en el enrutador, y que todas las interfaces (W)LAN son esclavas de puente para el mismo maestro (por ejemplo, llamado bridge0
):
ebtables -I INPUT -i ath0 -j mark --set-mark 0xabcd
iptables -I FORWARD -i bridge0 -m mark --mark 0xabcd -j DROP
(Tenga en cuenta que el valor de la marca 0xabcd
es arbitrario).
Esto hace que todo el tráfico que ingresa al enrutador desde el "lado LAN" "permanezca dentro" del dominio de transmisión. La razón es que ebtables
' INPUT
no incluye el tráfico que va desde un puerto/esclavo de puente a otro (es decir, reenvío L2). Y para lo que apunta al enrutador en sí (que proviene ath0
y, por lo tanto, está marcado), no queremos que se reenvíen en L3 (es decir, poder pasar de "LAN" a "WAN"/VPN/...) .
Como alternativa, también puedes hacerlo sin depender de iptables o del marcado de paquetes:
ebtables -I INPUT -i ath0 -d Unicast -p ip ! --ip-dst $ROUTER_LAN_IP -j DROP
Si bien no se ha probado, -d Unicast
se supone que mantiene DHCP funcionando. Si también necesitas IPv6 (tráficospara el enrutador en L3) para funcionar, probablemente necesite/quiera una cadena adicional para más excepciones (lo que también le permitirá permitir DHCP con otro enfoque), como:
ebtables -N ATH0
ebtables -A ATH0 -p ip --ip-dst $ROUTER_LAN_IP -j ACCEPT # unicast
ebtables -A ATH0 -p ip --ip-dport 67 -j ACCEPT # broadcast
ebtables -A ATH0 -p ip ... -j ACCEPT
...
ebtables -A ATH0 -p ip6 ... -j ACCEPT
...
ebtables -A ATH0 -j DROP
ebtables -I INPUT -i ath0 -j ATH0
Pero como puede ver, este último enfoque es mucho más torpe.
PD: No tengo experiencia con todos los WRT o similares, por lo que no tengo idea de cómo hacer que las reglas de xtables sean persistentes en ellos. (Sin embargo, para ser justos, AFAIK es específico de la distribución de todos modos, incluso en las distribuciones de Linux "típicas").