OpenWrt/Trucos y Notas
Bloquear tráfico entre usuarios de una red
Muy útil en las Pasankallas. Bloquea intentos de ataques que un usuario quiera hacer a otro, y limita mucho del tráfico multicast que los clientes generan (costoso en airtime).
Si tienes solo un router y una interfaz Wi-Fi, basta con activar en LuCi la opción AP Isolate.
Si tienes múltiples interfaces, AP Isolate solo bloquea tráfico dentro de una sola interfaz. Para bloquear tráfico sntre interfaces puedes instalar el paquete kmod-nft-bridge e instalar una regla de nftables parecida a esta:
root@OpenWrt:/tmp# cat /usr/share/nftables.d/ruleset-post/no-guest-forwarding.nft table bridge filter { chain FORWARD { type filter hook forward priority filter; policy accept; iifname { "phy0-pa", "phy0-paw", "phy1-pa", "phy1-paw" } oifname { "phy0-pa", "phy0-paw", "phy1-pa", "phy1-paw" } counter drop; } }
TODO: Reglas para eliminar este tráfico entre múltiples routers conectados mediante LAN.
OWE, o cifrado en redes Wi-Fi abiertas
Igual utilizado en las Pasankallas en producción, y funciona muy bien.
OWE viene con WPA3. Permite tener una red Wi-Fi abierta donde cualquiera puede conectarse, pero internamente cifra todo el tráfico que pasa por el aire incluyendo el tráfico de administración (management frames). Esto lo protege contra muchos ataques que se hacen a redes abiertas :)
OWE Transition permite que los usuarios con aparatos modernos usen OWE, y los que no, usen una red abierta tradicional. Se puede implementar siguiendo las instrucciones de: https://github.com/openwrt/openwrt/commit/574539ee2cdbb3dd54086423c6dfdd19bb1c06a6
El soporte de esa función está desde la versión 23.05 de OpenWrt. Teóricamente hay OWE desde 19.07, pero eso requiere parchear bugs a mano y agregar configuración directamente a hostapd.
conntrack
Conntrack es el módulo que anota y recuerda las conexiones TCP/UDP/ICMP abiertas que pasan por el router.
En versiones modernas el valor máximo de conntrack escala según la RAM https://github.com/openwrt/openwrt/commit/15fbb916669dcdfcc706e9e75263ab63f9f27c00#diff-efab160c8a0773853a4d4f51ced3cb17b51ea7da3c8ab93af15812f8d5213eb9L6
Por defecto el timeout de las conexiones UDP sencillas es de 60. Lo malo es que una petición DNS dejará una entrada en Conntrack por ese tiempo, y el router podría saturarse mostrando este mensaje: nf_conntrack: nf_conntrack: table full, dropping packet.
Consulta esto con
sysctl net.netfilter.nf_conntrack_udp_timeout
,
o puedes reducirlo con sysctl -w net.netfilter.nf_conntrack_udp_timeout=20
y editando el archivo relevante en /etc/sysctl.d/
Si hay conexiones que no pasan por NAT y no tiene sentido trackearlas, puedes saltarlas todas editando
/etc/nftables.d/11-notrack.nft
chain notrackI { type filter hook prerouting priority raw; policy accept; iif "lo" notrack udp dport 53 counter notrack udp sport 53 counter notrack } chain notrackO { type filter hook output priority raw; policy accept; oif "lo" notrack udp dport 53 counter notrack udp sport 53 counter notrack }
Si usas NAT, entonces identifica el tramo a ignorar (por ejemplo tráfico LOR o servers locales que no lleva NAT) y crea con LuCI la regla NOTRACK.
Aparte de eso, revisa
net.netfilter.nf_conntrack_udp_timeout_stream=60
Esto para mitigar las conexiones como snmpd, que intercambian más de un paquete pero no se usan de forma permanente.
ath9k se buguea
Por si un router con este chip se pone sordo o inestable. Agreha esto a /etc/config/wireless:
config wifi-device 'radio0' ... option ldpc '0'
Estoy usando WPA3 Enterprise y no funciona el roaming
https://forum.openwrt.org/t/openwrt-24-10-0-rc2-second-release-candidate/217483/130
Mejor configuración de DTIM
Por defecto está 2. Se recomienda un valor de 3 como mínimo -- ayuda a tus clientes Wi-Fi a dormir más.
Se lo menciona ya que iOS, para asegurar menor consumo de batería, se configura solo a 3 como mínimo y si el AP no tiene lo mismo directamente ignora paquetes multicast del AP, perdiendo la información que pueda llegar por el medio.
Más info: https://www.sniffwifi.com/2016/05/go-to-sleep-go-to-sleep-go-to-sleep.html
Conectarse al WiFi de la UMSA con OpenWrt
La red de la UMSA usa WPA2-EAP y el servicio EAP externo, por donde pasan tus credenciales, no tiene soporte de TLSv1.2 (la mínima para ser un servicio seguro). Por tanto tenemos que configurar el router para admitir protocolos viejos.
Debes editar la configuración del archivo /lib/netifd/hostapd.sh de esta manera
Pieza 1:
wpa_supplicant_teardown_interface "$ifname" cat > "$_config" <<EOF ${scan_list:+freq_list=$scan_list} $ap_scan $country_str openssl_ciphers=DEFAULT@SECLEVEL=0 EOF return 0 } wpa_supplicant_set_fixed_freq() { local freq="$1" local htmode="$2"
Pieza 2:
fast|peap|ttls) json_get_vars auth password ca_cert2 ca_cert2_usesystem client_cert2 priv_key2 priv_key2_pwd set_default auth MSCHAPV2 append network_data "phase1=\"tls_disable_tlsv1_0=0 tls_disable_tlsv1_1=0\"" "$N$T" if [ "$auth" = "EAP-TLS" ]; then
Background Radar para routers 5GHz
OpenWrt a veces tarda en activar un AP en 5GHz si escuchas en un canal donde podría haber radares (DFS). Esto ya que, por normativa el router debe escuchar posibles radares unos 60 segundos para no interferir con ellos.
Si tienes un router Cudy TR3000 o un Confiabits MT7981, que vienen con chips Mediatek MT7981, estos vienen con una configuración de antenas 3:2x2. O sea, tres antenas, donde se usan las 3 para Beamforming y 2 para el tráfico de la red.
Podemos usar una de las antenas para escuchar radares y así quitar la espera de los 60 segundos, así:
Agrega esto en /etc/config/wireless, en la sección wifi-device:
(...) option background_radar '1' option channels '36 104 114' (...)
(Debemos poner una lista de canales si o si. Eso, o poner channel Auto)