Todos mis routers tienen mínimo 16Mb de flash, por lo que instalo como esenciales los siguientes paquetes:
- htop # Herramienta de monitorización al estilo top pero mejor
- bmon # Monitorización de uso de red y estadísticas
- bwm-ng # monitorización de ancho de banda usado en tiempo real por cada interfaz (refresca encima)
- ifstat # monitorización de ancho de banda usado en tiempo real por cada interfaz (nueva linea al refrescar y puedes ver el historial)
- iftop # Monitorización de conexiones de red y el uso de ancho de banda de cada conexión
- iperf # Para testeos de velocidad de red/wifi contra otro equipo (iperf -s en el equipo server e iperf -c ip_server en el cliente)
- speedtest-netperf # Lanza test de descarga y subida contra netperf.bufferbloat.net mientras mantiene y monitoriza pings y cpu. Ideal para testear QOS, bufferbloat y calidad de la linea.
- iwinfo # Consultar informacion de dispositivo y redes wireless. (info, scan, txpowerlist, freqlist, assoclist, htmodelist)
- wget # Para descargar ficheros o páginas web ( Si tienes wget-nossel -> opkg update && opkg remove wget-nossl --force-depends;opkg install wget )
- curl # Para ver o descargar ficheros o páginas web
- gzip # Comprimir y descomprimir
- unzip # Descomprimir
- libcurl # libreria necesaria para curl (en principio OpenWRT resuelve dependecias, si instalas curl te instalará también libcurl)
- diffutils # Util para ver diferencias entre ficheros. `diff file1 file2`
- findutils-xargs # Comando xargs para encadenar multiples comandos. Ej: find /tmp/ -type f -maxdepth 1 | xargs -n 1 echo " Fichero: "
- lsof # Ver ficheros abiertos (revisa mi alias ofiles)
- hostip # Para consultas dns. Puedes especificar el resolver con -r pero no el tipo de registro, solo A
- bind-dig # Para consultas dns. Puedes especificar resolver y registro: ej: dig +short txt gmail.com @9.9.9.9
- mailsend # Para enviar correos. Util para notificaciones en scripts
- adblock # Filtrado de malware, publicidad y tracking por blackhole dns
- luci-app-adblock # Filtrado de malware, publicidad y tracking por blackhole dns (luci)
- coreutils-sort # Mejora un poco el procesado de algunas listas adblock
- luci-app-commands # Puedes predefinir algunos comandos en luci para no tener que logearte por ssh para tareas simples
- luci-app-wol # Para levantar maquinas locales que estén en reposo y lo permitan. Usa y depende de etherwake
- etherwake # Para levantar maquinas locales que estén en reposo y lo permitan. Wake on lan.
- luci-app-ddns
- ca-bundle # Lo necesitarás para descargar webs o ficheros con curl o wget por https, aunque se puede omitir que comprueben el certificado.
- luci-ssl-openssl # Permite conexion https sobre luci (ojo, si tienes reglas que permiten conexion a puerto 80, tendrás que añadir el puerto 443)
Instalarlos todos: opkg install htop bmon bwm-ng ifstat iftop iperf iwinfo wget curl gzip unzip libcurl diffutils findutils-xargs lsof hostip bind-dig mailsend adblock luci-app-adblock coreutils-sort luci-app-commands luci-app-wol etherwake luci-app-ddns ca-bundle luci-ssl-openssl
- ddns-scripts # Scripts que permiten sincronizar con servicios de dns dinámicos
- luci-app-ddns # Scripts que permiten sincronizar con servicios de dns dinámicos (luci)
- fwknopd # Permite que le envies un certificado a un puerto que escucha de manera silenciosa y en base a eso puedes abrir/redirigir temporalmente un puerto al interior.
- luci-app-fwknopd # Permite que le envies un certificado a un puerto que escucha de manera silenciosa y en base a eso puedes abrir/redirigir temporalmente un puerto al interior. (luci)
- kmod-ipt-geoip # Para crear reglas geoip. En mi caso, esencial. Si quieres publicar tu NextCloud, puedes limitar el acceso a solo ips de España
- iptables-mod-geoip # Para crear reglas geoip. En mi caso, esencial. Si quieres publicar tu NextCloud, puedes limitar el acceso a solo ips de España
opkg install ddns-scripts luci-app-ddns fwknopd luci-app-fwknopd kmod-ipt-geoip iptables-mod-geoip
- nmap # Ojo con nmap que se lleva unos +4MB de flash y lo normal es que lo lances en tu equipo, no es necesario tenerlo en el router
- arp-scan
- netdiscover
- netperf # Para tests de velocidad y bufferbload. Es como iperf, pero levanta un demonio y está siempre escuchando. Por defecto al puerto 12865 sobre ipv6
# netperf -H 192.168.12.1 -f m -p 12865 -c -C
- wget # Puede que realmente tengas wget con un enlace a wget-nossl. cd /tmp && opkg download wget && opkg remove wget-nossl --force-depends;opkg install wget
Para generarte tus propios alias de comandos en el terminal. Para hacerlo permanente en OpenWRT, como usa ash por defecto debes editar /etc/profile y esto es lo que suelo añadir al final del fichero
Para ver tus alias, ejecuta "alias". Para añadir un alias, ejecuta " alias comando='comando que quieres que lance' "
##### Mis alias
alias conf='cd /etc/config'
alias testdns='/etc/config/scripts/testdns.sh'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF --color=auto' # Este viene por defecto en OpenWRT 18
alias lla='ls -AlF'
alias llt='ls -AlFst'
alias lll='ls -AlFs'
alias update="opkg update"
alias filtra="opkg list | grep "
alias nuevos="opkg list-upgradable"
alias actualiza="opkg list-upgradable | cut -d ' ' -f 1 | xargs opkg upgrade "
alias testactualiza="opkg list-upgradable | cut -d ' ' -f 1 | xargs opkg upgrade --noaction "
alias lsblk="block info"
alias blkid="block info"
alias busca="find / | grep "
alias ofiles='lsof | cut -d" " -f1 | sort | uniq -c | sort -k 1 -n'
alias fw='iptables -nvL'
alias fw6='ip6tables -nvL'
alias con='netstat -nptua'
alias listen='netstat -nlptu'
#alias listen='ss -nlptua'
# find /sys/ | grep temp # Busca sensores de temperatura
alias t1='temp_raw=$(cat /sys/class/thermal/thermal_zone0/temp | cut -b 1-3);temp=$(echo $temp_raw | cut -b 1-2);echo "${temp}.$(echo $temp_raw | cut -b 3)"'
alias t2='temp_raw1=$(cat /sys/devices/platform/soc/soc:internal-regs/f1011000.i2c/i2c-0/0-004c/hwmon/hwmon0/temp1_input | cut -b 1-3);temp1=$(echo $temp_raw1 | cut -b 1-2);temp_raw2=$(cat /sys/devices/platform/soc/soc:internal-regs/f1011000.i2c/i2c-0/0-004c/hwmon/hwmon0/temp2_input | cut -b 1-3);temp2=$(echo $temp_raw2 | cut -b 1-2); echo "Core1 ${temp1}.$(echo $temp_raw1 | cut -b 3) - Core2 ${temp2}.$(echo $temp_raw2 | cut -b 3)"'
alias t3='cat /sys/kernel/debug/ieee80211/phy1/mt76/temperature' # Xiomi Mi Router AC2100 (El primero de color negro y cilindrico)
alias t='t2' # En Linksys WRT1900ACS
alias halt="nlbw -c commit;vnstat -u;/sbin/halt" # Lanza commit para guardar bases de datos a disco de nlbwmon y vnstat antes de apagar
alias reboot="nlbw -c commit;vnstat -u;/sbin/reboot" # Lanza commit para guardar bases de datos a disco de nlbwmon y vnstat antes de reiniciar
alias dev='iw dev'
alias wifo='iwinfo'
alias wtus='wifi status'
alias iwcap='iw list | grep -e "Supported interface modes:" -e "valid interface combinations:" -e phy -A 5 | grep -v -e overrides: -e MCS*: -e "max "'
alias BackupWRT='[ -d /etc/config/Backup ] || mkdir /etc/config/Backup ; cd /etc/config/Backup && opkg list-installed > list-installed.`date -I` && sysupgrade -b SysBackup_`date -I`.tar.gz'
genkeywg() {
cd /etc/config/wireguard && wg genkey | tee wg_privatekey.$1 | wg pubkey > wg_publickey.$1
} # Crea clave privadas y publica con el nombre del argument pasado. ej: genkeywg pepe"
genpass() {
local :l=$1
[ "$l" == "" ] && l=16
tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs
}
genstrongpass() {
ASCII='!#$%&()*+,-./0123456789:;=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~' # Falta '"
local length=$1
[ "$length" == "" ] && length=2`< /dev/urandom tr -dc 0-9 | head -c1`
tr -dc "$ASCII" < /dev/urandom | head -c ${length} | xargs echo
}
alias cons="echo \"$(cat /proc/net/nf_conntrack | wc -l) active connections from $(cat /proc/sys/net/nf_conntrack_max)\"" # sysctl net.nf_conntrack_max
#alias cons="cat /proc/net/nf_conntrack | grep \"dport=443 \" | awk -F \"src=\" '{print \$2}' | cut -d \" \" -f 1 | sort | uniq -c | sort -k 1"
constoport() {
local port=$1
[ "$port" == "" ] && port=443
cat /proc/net/nf_conntrack | grep "dport=${port} " | awk -F "src=" '{print $2}' | cut -d " " -f 1 | sort | uniq -c | sort -k 1
}
consfrom() {
local ip=$1
[ "$ip" == "" ] && ip=$(curl -s ifconfig.me)
cat /proc/net/nf_conntrack | grep "src=$ip " | awk -F "dst=" '{print $2}' | sed "s/dport=//g" | awk '{print $1"\t\t"$3}' | sort -k 1 -n | uniq -c
} # sed -ne 's/^.*src=\([^ ]*\).*/\1/p' /proc/net/nf_conntrack | sort | uniq -c | sort -k 1
alias conslistraw="cat /proc/net/nf_conntrack | grep tcp | awk -F \"src=\" '{print \$2}' | awk '{print \"tcp\t \"\$1\"\t\t\"\$2\"\t\t\"\$4}' | sort -k 1,2 | uniq -c;cat /proc/net/nf_conntrack | grep udp | awk -F \"src=\" '{print \$2}' | awk '{print \"udp\t \"\$1\"\t\t\"\$2\"\t\t\"\$4}' | sort -k 1,2 | uniq -c;cat /proc/net/nf_conntrack | grep icmp | awk -F \"src=\" '{print \$2}' | awk '{print \"icmp\t \"\$1\"\t\t\"\$2\"\t\t\"\$4}' | sort -k 1,2 | uniq -c"
alias conslist="conslistraw | sort -k 3,4"
En el apartado Switch de luci (/etc/config/network) puedes jugar con los puertos del router, haciendo que todos ellos se vean (por defecto) o aislando unos de otros, con esto segmentamos y aislamos los puertos que queramos mediante vlans.
Openwrt tiene dos maneras de identificar a las vlan. Una es procesar una vlan por core, por lo que estarías limitado a tantos cores tengas y la otra es añadiendo una marca a los paquetes con el id de la vlan, esto además es lo habitual. En total, con las dos maneras tienes un límite de 1000 vlans.
Para los cores de la cpu tenemos tres estados:
* Off Esa cpu/core no procesará esa vlan. Si todas están a off para esa vlan, estará desactivada
* untagged Asigna esa cpu/core para que procese esa vlan sin añadir ninguna marca a los paquetes (una cpu/core puede tener como máximo una vlan asignada como untagged)
* tagged Asigna esa cpu/core para que procese esa vlan, añadirá una marca a los paquetes para identificar de que vlan se tratan
Para los puertos:
* Off Ese puerto no está en esa vlan, osea, el táfico de esa vlan no se enviará a este puerto por lo que el que esté conectado ahí no verá nada de esta vlan
* untagged Ese puerto forma parte y está conectado a la vlan. Si esa vlan es tipo tagged, eliminará el id que se añadió para reconocer el paquete, por lo que podrás conectar cualquier dispositivo.
* tagged Ese puerto forma parte y está conectado a la vlan. En el puerto los paquetes se enviarán con el id de la vlan por lo que el dispositivo que conectes tendrá que tener la vlan también configurada o no verá nada.
La diferencia entre untagged y tagged es que, como untagged puedes conectar cualquier equipo pero si está como tagged, lo que se conecte a ese puerto debe tener configurada la vlan o no verá nada.
Como las vlans no es más que añadir un identificador de la vlan al paquete,puedes enviar varias vlans a un mismo puerto, solo que aquel que se conecte solo verá las vlans que tenga configuradas, una o varias.
Si tu vlan es del tipo untagged, para evitar carga procura elegir untagged en la cpu. Ya que de otra manera los paquetes añaden el id y luego al salir por el puerto lo quita, por lo que es innecesario si todos los puertos están como untagged.
Luego podrás unir las vlans mediante un bridge a interfaces o wifis para que se junten con los que quieras. Las vlans se nombran en la configuración según el core asignado + el id. Por ejemplo como "eth0.1" o "eth1.832" (core1 y vlan1 o core2 y vlan 832)
Los operadores de fibra envían la conexión a casa con los paquetes marcados con el id de una VLAN, por eso para poder ver esos datos en el apartado switch debes marcar el puerto de la boca wan como tagged y marcarás el id que utilice el operador.
Es mejor que configures esto a través de luci, ya que queda más claro pues también se añade la complejidad de que algunos routers el numero no corresponde al puerto y es un lío, revisad la página de vuestro router en OpenWRT.org
En /etc/config/network se configuran también interfaces y vpn wireguard, dejo solo la parte del switch. En mi caso los puertos 5 y 6 corresponden a los dos cores de la cpu y la numeracion de los puertos es invertida, 4,3,2 y 1 para bocas 1,2,3 y 4
config switch
option name 'switch0'
option reset '1'
option enable_vlan '1'
config switch_vlan
option device 'switch0'
option vlan '1' # Identificativo interno en orden conforme creas entradas, no es el id de la vlan
option vid '1' # Vlan id 1
option ports '2 3 5' # En Linksys WRT1900ACS 2 y 3 son puertos dos y uno. 5 es "cpu eth0"
config switch_vlan
option device 'switch0'
option vlan '2' # Identificativo interno en orden conforme creas entradas, no es el id de la vlan
option vid '832' # Vlan id 832 (WAN de Orange hasta que pueda migrar a Pepephone)
option ports '4t 6t' # 4 es el puerto wan y 6 es el puerto "cpu eth1" (notese la t detrás del número, tagged)
config switch_vlan
option device 'switch0'
option vlan '3' # Identificativo interno en orden conforme creas entradas, no es el id de la vlan
option vid '2' # Vlan id 2
option ports '0 1 6' # En mi caso 0 es el puerto 4 y 1 el puerto 3. 6 es "cpu eth1"
Equivaldría a esto en un Linksys WRT1900ACS:
ID VLAN CPU (eth0) CPU (eth1) LAN 1 LAN 2 LAN 3 Lan 4 WAN 1 untagged off untagged untagged off off off 2 off untagged off off untagged untagged off 832 off tagged off off off off tagged
En mi caso utilizo vlans como untagged, ya que conecto detrás equipos normales. Excepto vlan 832 que es la conexión wan al operador de fibra.
Tan solo instala luci-ssl-openssl. Esto permite la conexión https sobre luci y añadirá dependencias openssl-util y libustream-openssl
Ojo, si tienes reglas que permiten conexion al puerto 80, tendrás que añadir antes tambiñen al puerto 443 o no te podrás conectar, ya que ahora siempre entrarás por https (443)
Existe el paquete luci-app-wifischedule que añade una opción en luci para automazar el encendido y apagado de la wifi, pero es más sencillo añadirlo en crontab. Para ello desde luci en la opción “System” -> “Scheduled Tasks” o en terminal con “crontab -e”. Dejo un ejemplo con explicación de cada linea. Lo hago que se lance varias veces por si se ha reiniciado, ya que al reiniciar el estado inicial de la wifi es encendida.
######################### Programador Wifi ############################
00 2-4 * * 1-5 wifi down # Apaga a las 2, 3 y 4 de la madrugada (L a V)
00 3-5 * * 6-7 wifi down # Apaga a las 3, 4 y 5 de la madrugada (finde)
40 5-6 * * 1-5 wifi status | grep '"up": false,' && wifi up # Enciende si esta apagada a las 5:40 y 6:40 ( L a V )
30 7-9 * * * wifi status | grep '"up": false,' && wifi up # Enciende si esta apagada de 7:30 a 9:30 (Alldays) # Alt: iwinfo | grep -c ESSID || wifi up
Confiere seguridad extra a los clientes que soportan y se conectan usando dicha función. Protegerá de algunos ataques hacia los clientes, tales como denegación de servicio, buscando repetidas desconexiones. Estos ataques suelen usarse en conjunción con falsos puntos de accesos y portal cautivo con los que, el usuario desesperado, no se da cuenta y se conecta al punto de acceso falso e introduce la contraseña en el portal cautivo atacante, en ese momento el atacante cesa su actividad, el usuario finalmente se conecta a su router de siempre y ya han averiguado tu contraseña atacando al usuario más débil.
Requisitos: Debes instalar wpad-full. Para ello:
opkg remove wpad-basic && opkg install wpad
Activación: Es muy fácil hacerlo a través de luci. Edita una señal y en “Wireless Security” la opción es “802.11w Management Frame Protection”.
Por consola o editando el fichero tan solo es introducir la siguiente linea debajo de cada señal wifi que tengas. Tomo el ejemplo del SSID ‘Invitados’:
config wifi-iface 'Invitados'
option ieee80211w '1'
Configuración:
Las opciones son:
0 -> Desactivado.
1 -> Opcional. Si el cliente lo soporta se conectara con 802.11w, sino se conectará de manera tradicional.
2 -> Requerido. Solo permitirá la conexión de clientes que soporten 802.11w.
Para redes de invitados puedes usar los modos 0 o 1. Teniendo en cuenta que con 1 podría haber clientes que pudieran no conectarse, aunque es más raro que poniendo un modo 2.
Para redes internas lo ideal es configurar el modo 2, pero si tienes clientes no compatibles tendrás que bajar al modo 1.
En mi caso prefiero quitar por completo ipv6. En españa está poco implantado y mayormente en Dual Stack (Mezcla ipv4 y ipv6). Deshabilitandolo reduzco complejidad al centrarme solo en las reglas firewall ipv4.
A través de luci coloco al final de todo en Network -> Firewall -> Custom Rules: (O edita el fichero /etc/firewall.user el cual suele llamarse en una entrada de /etc/config/firewall)
# Reglas DROP para ipv6
ip6tables -P INPUT DROP # Establece politicas por defecto a DROP
ip6tables -P OUTPUT DROP
ip6tables -P FORWARD DROP
ip6tables -I INPUT -j DROP # Crea una entrada que rechaza todo
ip6tables -I OUTPUT -j DROP
ip6tables -I FORWARD -j DROP
ip6tables -t mangle -P INPUT DROP # Para ver las reglas: ip6tables -nvL (Tmb tienes si has colocado el alias fw6)
ip6tables -t mangle -P OUTPUT DROP
ip6tables -t mangle -P FORWARD DROP
ip6tables -t mangle -I INPUT -j DROP # Para ver las reglas: ip6tables -nvL -t mangle (Tmb tienes si has colocado el alias fw6)
ip6tables -t mangle -I OUTPUT -j DROP
ip6tables -t mangle -I FORWARD -j DROP
ip6tables -t mangle -I PREROUTING -j DROP # La tabla nat no existe en ipv6, ya que no tiene sentido y precisamente hay tantas ips para no tener que hacer nat.
ip6tables -t mangle -I POSTROUTING -j DROP
El modulo psd de iptables permite detectar y entorpecer o fustrar los escaners de puertos.
Instalar con: opkg install kmod-ipt-psd iptables-mod-psd
Configurar añadiendo al fichero /etc/firewall.user la linea siguiente, donde debajo explico que es cada parámetro por si quieres modificar los valores:
iptables -I INPUT ! -i lo -m conntrack --ctstate NEW -m psd --psd-delay-threshold 700 --psd-weight-threshold 9 --psd-lo-ports-weight 2 --psd-hi-ports-weight 1 -j DROP -m comment --comment "DropPortScanNew"
Parámetros:
--psd-delay-threshold valor # Son centésimas de segundo de retraso que añadirá a las respuestas una vez se alcance el numero de hits en el que interpretará como un escaner de puertos (default 300)
--psd-weight-threshold 9 # El numero de hits que debe alcanzar en el tiempo indicado en --psd-delay-threshold. Una vez lo alcanza dropea las siguientes conexiones (default 21)
--psd-lo-ports-weight 2 # Cada impacto/conexión en los puertos menores al 1024 contarán como dos impactos (default 3)
--psd-hi-ports-weight 1 # Cada impacto/conexión en puertos igual o encima del 1034, contarán como uno (default 1)
-j DROP # Rechaza las conexiones que cumplan dicha regla
-m comment --comment "DropPortScan" # Comentario para cuando hagas iptables -nvL reconozcas fácilmente cada regla.
! -i lo # Excluye (!) las conexiones locales. Podrías indicar al revés, para que se aplique solo sobre el interface de la wan (Revisa tu ip pública con ifconfig o ip addr)
-m conntrack --ctstate NEW # Lo añado para poder aplicar una regla más estricta dedicada solo a nuevas conexiones (TCP) ( En iptables antiguos es lo mismo que -m state --state NEW )
A tener en cuenta que si se pusiera esta regla antes de la que permite los returning packets de conexiones establecidas y no se especifica que se aplique sobre nuevas conexiones,
podría ralentizar las conexiones salientes. Por eso excluyo al interface local y afino sobre paquetes NEW (solo tcp) para poder ser más estricto con el delay/hits y salten los time-out del escaner.
Ojo por que la regla que no especificas los paquetes NEW podría dar falsos positivos aunque estuviera detrás de reglas que permiten los paquetes que retornan de conexiones establecidas,
ya que el protocolo udp no es orientado a conexión y si por ejemplo tienen varios servidores dns en dnsmasq con un puertos diferentes en cada uno de ellos, podría cortarte algunas consultas.
Rebaja o dehabilita esta regla si te sucede. Para testear, lanza hostip google.com rápidamente varias veces, usando la flecha hacia arriba para poder hacerlo rápido y testear el salto de la regla.
Revisa los contadores con iptables -nvL | head o bien iptables -nvL | grep DropPortScan.
Aplicar reiniciando el firewall con /etc/init.d/firewall restart . ¡Ojo!, si tienes fwknopd tendrás que reiniciarlo también /etc/init.d/fwknopd restart
Test: (Probad desde otro equipo de la red antes y después de aplicar la regla para poder valorar las diferencias)
nmap -sV ip_router # Se puede bajar la velocidad del escaneo para intentar evadir la medida con -T <0-5> ( -T 0 es el más lento y -T 3 es la velocidad por defecto )
# Con la regla psd de arriba los resultados del escaneo por defecto ( -T 3 ) no son fiables y ocultará la mayoría de tus puertos abiertos.
# Con la regla psd de arriba se llega a detectar hasta -T 2 pero todo depende del delay que hayas puesto en la regla y el time-out configurado en el escaner de puertos
# Con -T 2 tarda diez vecez más que con -T 3. Un escaneo de todos los puertos sin psd son 5 minutos y con psd puede entorpecer a + 1h. Con -T 0 tardaría días..
# También si aumentan el time-out en el escaneo hará que esta medida pueda ser evitada pero aumentará enormemente el tiempo de escaneo y les harás consumir más recursos.
En desarrollo
Seguridad extra combinada con GeoIP cuando no puedes poner ips fijas en SOURCE.
iptables -I INPUT -m geoip --src-cc es -j FWKNOP_INPUT # De esta manera solo aceptaras los paquetes SPA de ips geo-identificadas en el pais que indiques<br>
iptables -D INPUT -j FWKNOP_INPUT # Eliminas la regla que crea fwknopd por defecto, ya que sino seguira aceptando de cualquier sitio
Si quieres abrir puertos sensibles, de esta manera puedes acotarlo a solo los países en los que estás interesado en acceder y mostrarte para el resto como cerrado.
Me lo monto manual, ya que evito instalar excesivas cosas y cuando lo hice de esta manera, no vi que hubiera nada que integrase en OpenWRT la v2 de Geoip
Utilizo los ficheros de finales de diciembre de 2018 por que geoip v1 se descontinuó al inicio de 2019, pero como las ips v4 están agotadas, ya apenas hay movimientos y siendo julio de 2019 no he tenido incidencias
opkg install iptables-mod-geoip kmod-ipt-geoip
wget -P /tmp/ https://micorreo.email/LE.tar.gz # Descargo las Bases de datos de paises para geoip iptables, pero solo los ipv4 y LE para ahorrar espacio (puedes borrar paises que no te interesen)
[ -d /etc/config/xt_geoip ] || mkdir /etc/config/xt_geoip # Crea el directorio dentro de /etc/config/, de esta manera persistirá a los upgrades y se guardará en los Backups
cd /etc/config/xt_geoip/ && tar -xvzf /tmp/LE.tar.gz # Descomprime la base de datos de paises. Los ficheros de países utilizan la iso 3166-2
chown root:root /etc/config/xt_geoip/LE -R # Al descomprimir mantiene los permisos de mi equipo. Establece propietario y grupo a root
ln -s /etc/config/xt_geoip/LE /etc/config/xt_geoip/BE # Crea enlace de BE a LE. En OpenWRT GeoIP solo usa LE
rm -r /usr/share/xt_geoip # Borro la carpeta donde recoge geoip los ficheros de base de datos y
ln -s /etc/config/xt_geoip /usr/share/xt_geoip # Establezco un enlace para que utilice nuestros ficheros de /etc/config/xt_geoip
# Añade estas dos lineas al principio del fichero /etc/rc.local, de esta manera en los upgrades, no tendrás que repetirte.
[ -L /usr/share/xt_geoip ] || rm -r /usr/share/xt_geoip ; [ -e /usr/share/xt_geoip ] || ln -s /etc/config/xt_geoip /usr/share/xt_geoip
[ -L /etc/config/xt_geoip/BE ] || rm -r /etc/config/xt_geoip/BE; [ -e /etc/config/xt_geoip/BE ] || ln -s /etc/config/xt_geoip/LE /etc/config/xt_geoip/BE
Ahora en las reglas del firewall, en la opción Extra arguments, puedes restringir esa regla a los países que quieras.
Por ejemplo, para permitir solo a ips de origen de España y Andorra: -m geoip –src-cc es,ad
Los codigos de dos letras se basan en iso 3166-2
Como histórico, dejo la alternativa de hacerlo a mi manera antes de descontinuarse la v1:
Debias instalar iptables-mod-geoip kmod-ipt-geoip iptgeoip
iptgeoip es muy pesado al instalar todo los necesario para lanzar y procesar los scripts de MaxMind Geoip. En OpenWRT 18.06.1:
perl perlbase-config perlbase-essential perlbase-getopt perlbase-base perlbase-bytes perlbase-errno perlbase-xsloader perlbase-fcntl perlbase-list perlbase-tie
perlbase-posix perlbase-scalar perlbase-symbol perlbase-selectsaver perlbase-socket perlbase-io perlbase-dynaloader perl-text-csv_xs gzip unzip iptgeoip
cd /etc/
echo -e "UserId 999999\nLicenseKey 000000000000\n# Include one or more of the following ProductIds:\n\n# * GeoLite2-City - GeoLite 2 City\n# * GeoLite2-Country - GeoLite2 Country\n# * GeoLite-Legacy-IPv6-City - GeoLite Legacy IPv6 City\n# * GeoLite-Legacy-IPv6-Country - GeoLite Legacy IPv6 Country\n# * 506 - GeoLite Legacy Country\n# * 517 - GeoLite Legacy ASN\n# * 533 - GeoLite Legacy City\nProductIds GeoLite2-City GeoLite2-Country GeoLite-Legacy-IPv6-City GeoLite-Legacy-IPv6-Country 506 517" >GeoIP.conf
mkdir -p /tmp/GeoIP; cd /tmp/GeoIP
/usr/lib/xtables-addons/xt_geoip_dl # Descarga en la carpeta en que estes: GeoIPCountryCSV.zip GeoIPCountryWhois.csv GeoIPv6.csv (Descontinuados en enero del 2019)
perl /usr/lib/xtables-addons/xt_geoip_build -D "/usr/share/xt_geoip/" /tmp/GeoIP/GeoIP*.csv # Genera rangos de ips a partir de csvs descargados y deposita en formato DB iptables en /usr/share/xt_geoip/
# Toda la base de datos GeoIP ocupa un montón. ~6MB. Si voy justo de espacio:
# rm -r /usr/share/xt_geoip/BE && ln -s /usr/share/xt_geoip/LE /usr/share/xt_geoip/BE # Ahorra unos 2,8MB. Geoip solo usa la carpeta LE. Borro LE y dejo enlade a LE.
# find /usr/share/xt_geoip/ -name *.iv6 | xargs rm # Ahorra unos 1,4MB+ Borrar los *.iv6 de /usr/share/xt_geoip/
# find /usr/share/xt_geoip/BE/* | grep -v -e AD.iv4 -e ES.iv4 -e FR.iv4 | xargs rm # Ahorra unos 1.4MB+ Dejo solo los ficheros de los países que me interesan
#Test: iptables -m geoip --help # Si da error es que no está cargado el modulo
#Test: iptables -A INPUT -m geoip --src-cc CN -m comment --comment "Test" # Si da error es que no está cargado el modulo. Esta regla solo monitoriza, no te afectará.
# Se quitará cuando reinicies el firewall pero tmb puedes lanzar iptables -D INPUT -m geoip --src-cc CN -m comment --comment "Test"
https://micorreo.email/fail2ban_openwrt.sh
El propio fichero de arriba tiene documentación.
En OpenWRT hay muchas maneras de disponer filtrado de malware, anti tracking y publicidad mediante black hole dns. Tres de las semi-automáticas son:
No se actualiza desde 2015 y ya viene incluído en lista winhelp de adblock
https://lede-project.org/packages/pkgdata/banhostlist
https://github.com/openwrt/packages/tree/openwrt-18.06/utils/banhosts
find / | grep banhostlist
/overlay/upper/usr/lib/opkg/info/banhostlist.control
/overlay/upper/usr/lib/opkg/info/banhostlist.postinst
/overlay/upper/usr/lib/opkg/info/banhostlist.prerm
/overlay/upper/usr/lib/opkg/info/banhostlist.list
/usr/lib/opkg/info/banhostlist.control
/usr/lib/opkg/info/banhostlist.postinst
/usr/lib/opkg/info/banhostlist.prerm
/usr/lib/opkg/info/banhostlist.list # Descarga de http://winhelp2002.mvps.org/hosts.txt hacia /tmp/banhost
/etc/hotplug.d/iface/80-banhosts # Descarga de http://winhelp2002.mvps.org/hosts.txt hacia /tmp/banhost
Instala: libustream-mbedtls uclient-fetch simple-adblock luci-app-simple-adblock
Si no encuentra los paquetes de simple-adblock, puedes agregar el repo del mantenedor:
echo -e -n 'untrusted comment: LEDE usign key of Stan Grishin\nRWR//HUXxMwMVnx7fESOKO7x8XoW4/dRidJPjt91hAAU2L59mYvHy0Fa\n' > /tmp/stangri-repo.pub && opkg-key add /tmp/stangri-repo.pub
! grep -q 'stangri_repo' /etc/opkg/customfeeds.conf && echo 'src/gz stangri_repo https://raw.githubusercontent.com/stangri/openwrt-repo/master' >> /etc/opkg/customfeeds.conf
opkg update; opkg install simple-adblock luci-app-simple-adblock
Dependencias: uclient-fetch coreutils-sort dnsmasq
coreutils-sort es opcional para mejorar rendimiento y si ya te viene con busybox, puedes forzar con: `opkg --force-overwrite install coreutils-sort`
Habilitar: Por defecto el servicio está deshabilitado. Ahora habilitalo a través de luci en System -> Startup o a través de terminal con: uci set simple-adblock.config.enabled=1
Ahora selecciona y habilita las listas que quieres que descargue y procese en el filtrado
Nota: En un GL-iNet habia desinstalado uhttpd y me desinstalo simple-adblock, al instalar de nuevo simple-adblock me instala uhttpd.
luci-app-simple-adblock solo funcionará sobre uhhtpd (no habitual, pero por defecto GL-iNet me venia con lighttpd)
Comandos y ficheros de configuración:
/etc/init.d/adblock status # Ver el estado
/var/dnsmasq.d/simple-adblock # Fichero donde genera el listado adblock a usar por dnsmasq
uci set simple-adblock.config.enabled=1 # Activar con uci
/etc/init.d/adblock enable # Activar
/etc/init.d/adblock start # Iniciar
/etc/init.d/adblock query 3ad.doubleclick.net # Testear
hostip doubleclick.net -r 8.8.8.8 # Testear a resolver especifico
Instala: luci-app-adblock y adblock. Como opcional para mejorar el procesado de algunas listas, instala también coreutils-sort
Una vez instalado el entorno web de luci es muy claro:
- Seleccionas el servidor dns que utilizas, por defecto OpenWRT usa dnsmasq
- En Startup Trigger pones la conexión que te da acceso a internet, por lo general, wan. Así detecta cuando conecta para levantar adblock.
- Marcas las listas de bloqueo que quieres descargar. Yo utilizo la mayoría y me ocupa 1,5MB, así que tenlo presente si vas muy justo de memoria/flash (por defecto lo guarda en ram, sino machacaría mucho la flash)
- En versiones <19, marca "Force Overall Sort". Elimina los duplicados, ya que pueden venir de diferentes listas. Tarda un poco más al levantar y actualizar las listas en equipos viejos pero luego es más rápido cuando consultes y reduce el tamaño de las listas
- Marca "Flush DNS Cache" para asegurar que utilice la lista actualizada cuando acualices
- En routers en la que guardes y tengas poca RAM es interesante activar la opción que elimina el ficero descargado despues de cargarlo en memoria con -> option adb_dnsfilereset '1'
- Si tienes un pendrive o sd fijas, es interesante marcar "Enable Blocklist Backup" y elegir un directorio del pendrive donde descargar una copia de la bbdd. La utilizará en caso de que no haya internet cuando inicie
- Si es un router de viaje con 4G, puede ser interesante "Backup Mode", no actualiza al iniciar, tomando lo que haya como backup y ahorrarás datos.
- Opcional "Email Notification" para notificaciones por correo en caso de errores de proceso o lista vacías (Necesitaras instalar msmtp y ca-bundle)
- En Advanced puedes editar las Blacklist, whitelist y hacer pruebas en "Query domains"
"Query domains" es útil para comprobar falsos positivos. Busca entradas de las listas de bloqueo que contengan el texto que pongas
- Si tu Wan es otra wifi, puedes añadir una espera antes de procesar adblock para asegurar que está levantada añadiendo *option adb_triggerdelay '6'* dentro de extras de */etc/config/adblock*
Ojo al importar la configuración de antiguas versiones de OpenWRT. Es preferible configurarlo de 0, ya que con nuevas versiones de OpenWRT el fichero trae listas actualizadas. Si lo hiciste es probable que puedas recuperar /etc/config/adblock-opk
Periodiza actualización de las listas con "Scheduled Tasks" en luci o "crontab -e" o "vim /etc/crontabs/root" por terminal para automatizar que actualize cada cierto tiempo, sino solo se actualizaría al iniciarse
0 07 * * * /etc/init.d/adblock reload # Actualiza cada dia a las siete de la manana
Configurar las notificaciones de correo:
/etc/msmtprc # Aqui va la configuración de tu usuario, contraseña y datos del servidor de correo para enviar correos
defaults
auth on
tls on
tls_certcheck off
timeout 5
syslog LOG_MAIL
account default
host smtp.gmail.com
port 587
from tucuenta@gmail.com
user tucuenta
password tupass
account adb_notify
host smtp.gmail.com
port 587
from tucuenta@gmail.com
user tucuenta
password tupass
/etc/adblock/adblock.notify # Aqui van las opciones del envio y destino del correo.
Cambia el destino en el campo mail_receiver, dale permisos de ejecución y lanza una prueba con "chmod +x /etc/adblock/adblock.notify && /etc/adblock/adblock.notify"
Añade una notificación por correo si tu listado adblock es inferior a cierta cifra añadiendo *option adb_notifycnt '30000'* dentro de extras de */etc/config/adblock*
Comandos interesantes por consola:
/etc/init.d/adblock status
/etc/init.d/adblock report # Has de haber habilitado los reportes (option adb_report '1') pero añadirá coste de cpu ya que lo hace con tcpdump
/etc/init.d/adblock query google.com # Lanza tests como en "Query domains" en luci
hostip doubleclick.net -r 127.0.0.1:53 # Test local a lo que servira tu router a los clientes. Si funciona el filtrado, dira que el dominio no existe.
hostip doubleclick.net -r 1.1.1.1:53 # Test local a un proveedo externo, para que veas que realmente el dominio deberia responder (Proveedores diferentes pueden dar ips diferentes debido a la geolocalizacion. Es correcto)
hostip doubleclick.net -r 9.9.9.9:53 # Test local a un proveedo externo, para que veas que realmente el dominio deberia responder (Proveedores diferentes pueden dar ips diferentes debido a la geolocalizacion. Es correcto)
Hacks, notas y resolución de posibles incidencias:
Doubleclick.net es un dominio que se suele filtrar siempre, pues son ads de google. En luci, en avanzados de adblock, puedes lanzar consultas y ver si se encuentra en alguna lista, añadir a whitelist, blacklist, etc…
Por defecto usa uclient-fetch para descargar las listas. Si no tienes instaladas las librerias ssl de libustream y tienes seleccionadas listas que requieren conexión ssl, puede generarte incidencias. Si tienes instalado luci-ssl-openssl ya te habrá instalado libustream-openssl y no necesitarás nada. En otro caso, instala libustream-openssl o alguna de las otras dos disponibles (solo una es necesaria).
En la blacklist suelo incluir el contenido de https://github.com/greatis/Anti-WebMiner/blob/master/blacklist.txt
Para la actualición de apps de NextCloud y otros, en la whitelist suelo poner:
github-production-release-asset-2e65be.s3.amazonaws.com # Apps NextCloud
s3.amazonaws.com # Apps NextCloud o listado de ips de newrelic
raw.githubusercontent.com # https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts (Probablemente NextCloud tmb)
Privoxy es un servidor proxy sin cache muy ligero que además filtra de manera muy eficiente y sin romper el aspecto de la web, publicidad u otros contenidos indeseados no seguros como inyecciones XSS.
La ventaja o inconveniente de Privoxy es que es el router el que descarga y te sirve el contenido, por lo que la velocidad de la navegación puede quedar sensiblemente reducida si se le hace un uso intensivo, ya que no puedes comparar la potencia de un PC con un router en el que además van todas las conexiones de todos los equipos de la red.
En su ventaja está que realiza un filtrado muy eficiente y compensando al acelerar la carga por filtrar muchas de las peticiones innecesarias e indeseables que no va a realizar.
Al igual que hacemos con los dns y adblock, podríamos forzar todo el tráfico del puerto 80 para que pase por privoxy, forzando así un filtrado de la nevageción web sin necesidad de configurar el navegador ni de usar dns/adblock en el equipo cliente. No podemos forzar el tráfico del puerto 443(https), ya que los certificados se romperían y nos saltarían todos los avisos de los navegadores, pues es una de las buenas funciones de https, el aviasarnos si el tráfico ha sido comprometido. Para lo bueno y para lo malo en este caso, hoy en día la mayoría de tráfico va por https, por lo que realmente serán pocas las conexiones que pasarán por privoxy en modo forzado del puerto 80.
Privoxy escucha por defecto al puerto 8118, por lo que puedes establecer de manera manual el proxy en tu navegador apuntando al router con este puerto, de esta manera todo el tráfico quedará filtrado, tanto http como https.
Personalmente utilizo Firefox por defecto, pero en Chromium, en vez de configurar el navegador tienes opción a establecer el parámetro del proxy en el enlace tal que así: chromium-browser %U –proxy-server=“192.168.1.1:8118”. La ventaja del modo del enlace que he comentado arriba es que, si usas un portátil, cuando salgas fuera de tu red, no dispondrás del proxy, por lo que no podrías navegar si no lo desconfiguras del navegador, por lo que podrias tener dos enlaces diferentes y no tener que estar cambiando la configuración del navegador. También si tienes tu VPN podrías seguir utilizando el proxy como en casa, pero complicamos el esquema y otro punto es que si se cayese privoxy, te quedas sin poder navegar, pero llevo años usandolo y ha demostrado ser muy estable.
Una particularidad que has de tener es que si configuras un proxy en tu navegador, no necesitas ni dependes de dns. Si configuras el proxy con una ip realmente no necesitarías DNS, pues es el proxy el que hará las peticiones. Ten esto presente, pues el filtrado adblock se suele hacer por dns y el proxy estará usando los que tenga configurados el sistema del router y es por eso que suelo poner en el router que haga las peticiones a sí mismo a través de dnsmasq (127.0.0.1:53). Así cierro el circulo y con privoxy dispondrás de filtrado adblock adicional a privoxy. Luego lo explico.
Instalación
opkg install privoxy luci-app-privoxy
Configuración:
Por defecto escucha en el puerto 8118 y el filtrado por defecto ya funciona bien
Con luci se edita muy bien y si tocas en el nombre del campo que estás tocando, te lleva al manual de esa opción.
Si estás en un entorno seguro (en tu domicilio), basta con editar en "Acces Control" las opciones "Listen adresses" y "permit access"
El fichero de configuración es /etc/config/privoxy y dejo el contenido de un fichero de ejemplo:
# this file support all available configuration options of Privoxy web-proxy
# the scripts move all options to the final privoxy readable configuration file
#
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# !!! privoxy uses "-" in option names but uci only support "_" !!!
# !!! privoxy "listen-address" must be uci "listen_address" !!!
# !!! !!!
# !!! if you add entries please use !!!
# !!! option for options with one parameter (option confdir) !!!
# !!! list for options with multiple parameters (list listen_address) !!!
# !!! !!!
# !!! special handling for debug option !!!
# !!! privoxy option "debug 1024" must be uci option debug_1024 '1' !!!
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#
config privoxy 'privoxy'
option confdir '/etc/privoxy'
option logdir '/var/log' # Donde almacenara el fichero de log. Ojo opciones de debug. Con el paso del tiempo el log puede llenar toda la ram/flash
option logfile 'privoxy.log' # Nombre del fichero de log. Ojo opciones de debud y privacidad. Se puede guardar todo el historial de navegacion.
list filterfile 'default.filter'
# list filterfile 'user.filter'
list actionsfile 'match-all.action'
list actionsfile 'default.action'
# list actionsfile 'user.action'
# list listen_address '127.0.0.1:8118'
list listen_address '192.168.1.1:8118' # La ip del router sobre la que escuchara. Has de colocar cada ip del router de cada rango al que quieras aceptar que funcione.
# list listen_address '192.168.2.1:8118' # :8118 para todos (ojo, tmb wan y todos los interfaces/segmentos que tengas, aunque con la opción permit_access o con firewall se puede capar)
option toggle '1'
option enable_remote_toggle '1' # Si permitira activar/desactivar a traves de la url especifica para esto (http://config.privoxy.org/toggle)
option enable_remote_http_toggle '0' # Si permitira activar/desactivar a traves de la url especifica para esto (http://config.privoxy.org/toggle?set=enable y http://config.privoxy.org/toggle?set=disable)
option enable_edit_actions '1' # Si permitirá editar la configuración con su url especifica (http://config.privoxy.org/show-status)
option enforce_blocks '0' # Deshabilitar la opción que permite acceder a una web aunque haya sido filtrada
option buffer_limit '4096'
option forwarded_connect_retries '0'
option accept_intercepted_requests '1' # Debes colocarlo a 1 si quieres permitir el forzado como proxy transparente
option allow_cgi_request_crunching '0'
option split_large_forms '0'
option keep_alive_timeout '300'
option socket_timeout '300'
list permit_access '192.168.1.0/24' # Has de colocar a que rangos se les permitirá navegar
list permit_access '10.8.0.0/29' # Agrego por ejemplo un rango de la VPN a la que le permito hacer forward y acceder a la red local.
option debug_1 '0' # Log the destination for each request Privoxy let through. See also debug 1024
option debug_512 '1' # Common Log. Activandolo se registran las peticiones y se podria auditar los sitios por lo que navegas en el log.
# Para ver donde envía la telemetria google por ejemplo. Ojo con el espacio (por defecto en RAM).
option debug_1024 '0' # Log the destination for requests Privoxy didn't let through, and the reason why
option debug_4096 '1' # Startup banner and warnings
option debug_8192 '1' # Log non-fatal errors
Configurar navegadores de los clientes:
Firefox: En el medú de Firefox: Preferencias - >General -> Configuración de red # En versiones antiguas: Preferencias -> Avanzados -> Red -> Configuración
Chromium: Ejecutar: chromium-browser --proxy-server="192.168.1.1:8118"
Antiguamente configurando proxys corporativos había webs, especialmente internas en las que se añadía como exlusiones en la configuración del naevegador. En mi caso no he tenido incidencias con privoxy.
Administración remota de Privoxy
Tests y revisión de logs:
logread | grep privoxy # Ver que arranca correctamente
cat /var/log/privoxy.log # Log por defecto con las acciones realizadas. Está en flash y al reiniciar se pierde. En luci se ve bien; ve a Services -> Privoxy WEB proxy -> Log File Viewer
# Puedes elegir selectivamente que se guarda en el log. Ojo, podria quedar aquí todo tu historial de navegación.
# debug_1, 1024, 4096 and 8192 son utiles para localizar errores. El resto pueden ser muy especificos y generar un infierno de log, especialmente el 16
# Si escojes nivel de log como el debug_512, puedes controlar que no se descontrole lo que ocupe con una tarea de cron como esta:
# find /var/log/privoxy.log -size +20480k -exec rm {} \; # Borra el fichero de log de privoxy si excede de 20MB
Privoxy está orientado a uso en entornos de confianza y por defecto, todo aquel al que se le permite navegar a través de el, puede editar su configuración.
Si estás en un entorno no seguro, estaría bien limitar ciertas funciones como enable_remote_toggle, enable_edit_actions, enable_remote_http_toggle y enforce_blocks
Privoxy utiliza los DNS del sistema, por lo que si tienes adblock y quieres hacer que el sistema y privoxy también salgan por el como hacen los clientes de nuestra red, colocaremos la ip local como primera en los siguientes ficheros pero si la colocas como única mejor. Si la colocas como única y se te cae dnsmasq, privoxy y el router se quedarán sin resolución de nombres. Lo bueno de esto es que tienes doble filtrado, el de privoxy y el que tengas por adblock/dns. Cuando lo hayas editado, reinicia network con /etc/init.d/network restart
/etc/config/network # Edita los los interfaces que te den salida a internet, por lo general solo uno (wan). Dejo mi ejemplo:
config interface 'wan'
option _orig_ifname 'eth1'
option _orig_bridge 'false'
option proto 'dhcp'
option delegate '0'
option peerdns '0'
option dns '127.0.0.1'
#option dns '127.0.0.1 208.67.222.222 9.9.9.9 1.1.1.1 176.103.130.130 8.26.56.26 77.88.8.88'
option ifname 'eth1.832'
/etc/resolv.conf # Este fichero no hará falta tocarlo, se genera a partir del que has retocado antes (/etc/config/network), por loq ue al reiniciar el servicio network ya te quedará tal que así:
# Interface wan
nameserver 127.0.0.1
Si tienes el INPUT de la zona firewall en la que vas a navegar como REJECT o DROP, necesitarás añadir una regla firewall en “Traffic Rules” para permitir que se conecten al puerto 8118. En mi caso solo lo uso en la red local de confianza, por lo que no me ha sido necesario.
Forzado/Proxy transparente:
Igual que con adbloc con los DNS, puedes crear una regla de forzado hacia Privoxy de todo el tráfico saliente hacia el puerto 80. Esto se hace en Port Forwards del firewall.
Esto hace que, aunque no tengas configurado el proxy, el firewall redirija tu salida del puerto 80 forzando a que pase por Privoxy.
Recuerda que no puedes forzar el puerto 443 para el tráfico https, ya que rompe el certificado. Aunque realmente se podria si se crea una ca en el proxy como por ejemplo este caso de espionaje, pero es complejo y no tan seguro. Para https mejor configura navegador en vez de hacerlo forzado.
En Privoxy debes habilitar que se permita esto. En luci “Miscellaneous” -> “Accept intercepted request”. En el fichero /etc/config/privoxy: option accept_intercepted_requests ‘1’
Personalmente prefiero poner la regla manual en “Custom Rules”.
Lo más limpio es crear una regla en la tabla prerouting de cada zona que quieras forzar. (Ten presente las opciones listen_address y permit_access).
Para las reglas de port forward de la zona lan es zone_lan_prerouting, como en el ejemplo. En una zona que se llamase Invitados sería zone_Invitados_prerouting
Si utilizases las tablas PREROUTING o prerouting_rule se aplicarian a todas las zonas pero sería conflictivo. (Ojo tmb a opciones listen_address y permit_access).
Dejo unos enlaces que tenía anotados de hace muchos años los dos primeros enlaces actualizados de la web de OpenWRT:
# https://openwrt.org/docs/guide-user/services/proxy/overview
# https://openwrt.org/docs/guide-user/services/proxy/tinyproxy
# https://wiki.openwrt.org/doc/howto/proxy.tinyproxy
# https://tinyproxy.github.io/
# https://alien.slackbook.org/dokuwiki/doku.php?id=slackware:proxy # Tinyproxy con filtrado dns de dansguardian
# https://jakehe.blogspot.com.es/2014/10/openwrt-site-filtering-with-tinyproxy.html # Tinyproxy con filtrado dns de dansguardian
# https://broddlit.wordpress.com/2007/09/05/transparent-proxy-as-adblock-using-tinyproxy-and-dansguardian/ # Tinyproxy con filtrado dns de dansguardian (con regla iptables bien explicada)
Guarda este script por ejemplo en /etc/config/scripts como testdns.sh y dale permisos de ejecución con chmod +x /etc/config/scripts/testdns.sh
if [ "$1" != "" ];then DomainTesting=$1; else DomainTesting=google.com; fi
echo;echo
echo " -- Ten presente que si usas stubby, a ojos de dnsmasq es un unico servidor pero puede estar usando varios y darte respuestas diferentes segun el que use en ese momento --"
echo;echo
echo
echo "-------------------- Test dns server with nslookup --------------------"
echo
echo "Test al dns que usa el sistema router (/etc/resolv.conf generado por el interfaz wan con 'option dns' en /etc/config/network)"
nslookup $DomainTesting | grep -e "name" -e "Address" | sed 's/Address: /\nServer: /' | sed 's/Address / Address /'
echo
echo "Test servicio dnsmasq (Servidor DNS que sirve a los clientes de la red)"
nslookup $DomainTesting 127.0.0.1#53 | grep -e "name" -e "Address" | sed 's/Address: /\nServer: /' | sed 's/Address / Address /'
echo
echo "Test a lista de servidores que usa y consultara dnsmasq"
grep "list server '[0-9]" /etc/config/dhcp | grep -v "#list server" | cut -d "'" -f 2 | xargs -n 1 nslookup $DomainTesting | grep -e "name" -e "Address" | sed 's/Address: /\nServer: /' | sed 's/Address / Address /'
echo;echo
También puedes descargarlo con mkdir -p /etc/config/scripts; wget -P /etc/config/scripts/ https://micorreo.email/testdns.sh; chmod +x /etc/config/scripts/testdns.sh
Al ejecutarlo con /etc/config/scripts/testdns.sh te lanzará test al dns que usa el sistema, al que sirve a los clientes de la red y a los diferentes servidores que tengas configurado en dnsmasq, para así poder comparar resultados o ver si alguno no responde.
Puedes pasarle como argumento una entrada diferente a testear, que por defecto es google.com, como por ejemplo: /etc/config/scripts/testdns.sh disroot.org.
En fichero /etc/config/dhcp:
option strictorder '1' # Fuerza a seguir el orden de arriba abajo al usar los dns
option allservers '1' # Lanzas cada consulta a todos los servidores a la vez y devuelves el resultado que recibes primero
Por defecto:
Si no activas strictorder o allservers, OpenWRT marcará dnsmasq con strictorder ‘0’ y allservers ‘0’.
Esto es que, dnsmasq utilizará el servidor que más le convenga cada vez, pudiendo llegar a elegir un servidor distinto a cada consulta que hagas.
De esta manera reparte la carga pero pierdes control en cuanto a preferencias de servidores. Si un servidor está caído, cumplirá timeout y pasará al siguiente, pero puede volver a utilizarlo más tarde y te puede acabar generando respuestas lentas si tienes servidores no confiables, aunque estén al final de la lista.
Ventajas de strictorder ‘1’:
- Control: Te aseguras un orden preferente en las consultas.
- Privacidad: No envías las consultas a todos los dns a la vez y puedes dejar los servidores menos privados al final de la cola.
Inconvenientes de strictorder ‘1’:
- Celeridad: Si se te cae el primero, las consultas han de cumplir el timeout para llegar al segundo, por lo que has de garantizar servidores estables al principio si no quieres respuestas muy lentas.
Ventajas de allservers ‘1’:
- Velocidad: Consultas a todos los servidores a la vez y tomas la primera respuesta que recibes (el que te ha respondido más rápido entre todos)
Inconvenientes de allservers ‘1’:
- Privacidad: Estas enviando todas tus consultas a todos los servidores, solo que intercepten el menos fiable que tengas ya tienen todas tus consultas.
Detalles:
- No tiene sentido tener las strictorder y allservers habilitados al mismo tiempo y no se como se comportaría dnsmasq.
- Si tienes DNS over TLS con stubby, en stubby puedes tener a su vez diferentes servidores, que a ojos de dnsmasq se verá como uno solo.
- Lo ideal sería que si tienes varios servidores dns y no tienes activado allservers ‘1’, cada instancia tenga un time-out bajo para que, en caso de fallo, pueda haber un salto rápido al siguiente.
Para las instancias DNSCRypt v1 se hace creando el fichero /etc/resolv-crypt.conf conteniendo solo el texto “options timeout:1” (sin las comillas).
Proporciona una firma sobre las respuestas DNS que permiten garantizar al cliente la autenticidad del resultado del servidor para poder detectar y descartar respuestas falsificadas
Para que DNSSEC funcione deben soportarlo tanto tu cliente y servidor DNS que consultes como el servidor del dominio al que realizas la petición.
A 2019 el soporte de DNSSEC en servidores públicos va creciendo considerablemente pero la adopción por parte de los dominios es muy lenta. Si quieres hacer pruebas, mi dominio si está configurado con DNSSEC.
Para que dnsmasq soporte DNSSEC se debe instalar la versión completa y desinstalar la actual. La versión completa también soporta cacheo de DNS, pero quizá no te interese activarlo.
cd /tmp/; opkg install dnsmasq-full --download-only && opkg remove dnsmasq && opkg install dnsmasq-full --cache . && rm *.ipk # Si lo quieres con la cache habilitada
cd /tmp/; opkg install dnsmasq-full --download-only && opkg remove dnsmasq && opkg install dnsmasq-full && rm *.ipk # Si lo quieres sin la cache habilitada (no se si funciona)
Configuración:
Se puede configurar de dos maneras. Haciendo que sea dnsmasq quien valide las respuestas o traspasando el resultado para que decida el cliente (por ampliar).
Edita la sección dnsmasq del fichero /etc/config/dhcp y cambia o agrega lo siguiente:
option dnssec '1'
option dnsseccheckunsigned '1'
option cachesize '150' # Por defecto 150. Algunos suben a 1000 entradas. Yo pero prefiero sin cache a '0' pero si tienes DNSSEC habilitado, no deja reducirla.
option nonegcache '1' # Por defecto 0. Deshabilita el cacheo de respuestas a registros inexistentes (negativas) del tipo “no such domain”.
/etc/init.d/dnsmasq restart # Reinicia dnsmasq
Tests y revisión de logs:
logread | grep -i "dnssec" | grep -v pool.ntp.org
DNSSEC test
https://dnsleaktest.com/
Testea DNSSEC, ESNI, TLSv1.3 y si tu DNS es el de Cloudflare con DoT
Test online para ver si un dominio soporta respuestas con DNSSEC
Los tres cifran de manera correcta las consultas. Particularmente me gusta DNSCrypt por los años que llevo con el, ser el proyecto más maduro, dar las respuestas más rápidas y encontrar servidores enfocados en la privacidad y seguridad.
DNSCrypt v1 está descontinuado pero lo sigo usando en OpenWRT 18. No lo usaría en la versión 19 de OpenWRT, ahí ya aconsejaría ir directamente a DNSCrypt v2.
DNSCrypt v2 no está en los repositorios de OpenWRT 18 y no lo implementaría en dicha versión. Si lo implementaría a partir de versiones de OpenWRT 19 o superiores.
DNS over TLS es muy reciente pero está siendo adoptado muy rápidamente por muchos operadores.
DNSCrypt y DNS over TLS utilizan su propio puerto, por lo que de cara a diagnostico y monitorización podrían ser los ideales, por ejemplo para entornos corporativos
DNS over HTTPS usa el mismo puerto https, por lo que quizá esto te interese. En OpenWRT no plantea otras mejoras e incluso es el más complicado a la hora de encontrar proveedores que puedan ser añadidos a la implementación disponible (https_dns_proxy), por lo que no lo recomiendo como tal.
DNS over HTTPS si es interesante configurarlo en el navegador, ya que es la única manera actual de que a la hora de navegar por redes no cifradas como VPN o TOR, el SNI no pueda ser espiado por los intermediarios de la conexión.
Los tres dan privacidad en las consultas pero para una privacidad completa en la navegación, deberías usar DNS over HTTPs en el navegador, es el único protocolo que habilitándolo en el navegador, cifra las cabeceras SNI que manda el navegador a la web solicitada y ademeás usa el mismo puerto HTTPS(443).
El SNI es una cabecera que envían los navegadores modernos a la hora de solicitar una web. Esta cabecera da más información que el dns, ya que es la url entera y lo grave es que, aunque estés navegando por https, va sin cifrar. Los intermediarios podrán ver todas tus peticiones y ya está siendo utilizado para espiar e incluso censurar la nevegación sobre ciertas webs.
Hay en marcha una actualización llamada “Encrypted SNI” (ESNI) para TLSv1.3, pero esta revisión de TLS todavía no está lo suficientemente extendida.
DNSSEC no es un protocolo de cifrado, lo que hace es firmar digitalmente cada entrada para que puedas comparar que la respuesta no ha sido alterada. A nivel de seguridad es muy interesante pero dependes de que el dominio que consultas también lo tenga activado.
Un esquema interesante es configurar Privoxy y añadirlo como proxy en tu navegador. Marca al sistema para que solo use los DNS de DNSMasq. Luego activa el cifrado sni junto a DNS over HTTPS en el navegador. En el Router dejaría los servicios de DNS cifrados habituales como DNSCRypt, DNS over TLS o ambos junto a adblock y por supuesto habilitando DNSSEC.
El protcolo DNS es un protocolo que va sin cifrar, por lo que cualquiera parte implicada en el camino de la petición podria no solo ver, sino modificar tu consulta y redirigirte hacia un sitio malicioso
De esta manera se establecen algunos de los bloqueos a webs pero también con otros fines usados de manera ilegal, como colocar malware del estilo finfinisher
DNSCrypt-proxy levanta un servidor DNS en tu router que a su vez lanza las consultas DNS a otros proveedores de DNS mediante una comunicación cifrada.
DNSSEC es un añadido a DNS que ayuda a garantizar la autenticidad de las respuestas, pero a 2019 todavía son pocos los servidores DNS y dominios que lo soporten. DNSSCrypt soporta DNSSEC
Actualmente existe la versión 2 de DNSCRypt, pero todavía no está integrado en OpenWRT y pese a que la cantidad de servidores disponible de la v1 ha menguado considerablememnte, todavía se puede usar.
DNSCrypt-proxy 2 no puede convivir con DNSCrypt-proxy v1. Si tienes la v2 este está obsoleto y cuando actualices a la v2, tendrás que desinstalr ésta antes (la v1).
Has de saber que DNSCRypt no es 100% infalible, los navegadores web envian la cabecera sni sin cifrar, aunque la comunicación sea por https y precisamente sni es la url que solicita el navegador, por lo que tu proveedor podria seguir espiandote y censurar selectivamente. Para tener una comunicación con el navegador web 100% cifrada se debe usar DNS over HTTPS
Instalación:
opkg install libldns libsodium dnscrypt-proxy luci-app-dnscrypt-proxy dnscrypt-proxy-resolvers hostip # hostip es una tool sencilla para hacer consultas DNS
Configuración:
En el fichero */etc/config/dnscrypt-proxy* configurarás tantas instancias como quieras de proxy dnscrypt. Luego en el fichero dhcp(dnsmasq) los pondrás como tus servidores dns de consulta
config dnscrypt-proxy 'ns1' # Instancia de dnscrypt (Por defecto en OpenWRT 15 solo permite una instancia. En versiones posteriores, las que quieras)
option address '127.0.0.1' # A que ip escuchará y aceptará peticiones. 127.0.0.1 para local, ya que será dnsmasq el que internamente le lanzará las consultas
option port '533' # El puerto al que escucharemos. (algunos vienen por defecto con 5353 y puede dar conflicto con mDNS ZeroConf Daemon (avahi))
option resolver 'adguard-dns-ns1' # El servidor que utilizaremos y pediremos consultas del listado csv indicado (uno por instancia)
option resolvers_list '/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv'
option ephemeral_keys '1' # Mas anonimo, firmando cada peticion. Consume algo más de cpu pero un Linksys WRT1900ACS ni se entera
option syslog '1' # Enviar logs al syslog (Default=1). (DNSCrypt tiene otra opcion que logea consultas, pero ensuciaría mucho el log y se guardaría todo lo que consultas)
option block_ipv6 '1' # Las versiones de OpenWRT realmente no lo soportan. Lo dejo por si lo permitiesen en un futuro y reduciría tiempo de respuesta.
# list blacklist 'fichero' # La versión de OpenWRT no está compilada para soportarlo, pero DNSCrypt permite cargar listas de filtrado en el propio servicio.
config dnscrypt-proxy 'ns2' # Segunda instancia # Cada instancia son unos 1,5MB de RAM
option address '127.0.0.1'
option port '534' # Puerto donde levantará la segunda instancia
option resolver 'dnscrypt.eu-dk'
option resolvers_list '/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv'
option ephemeral_keys '1'
option block_ipv6 '1'
config dnscrypt-proxy 'ns3'
option address '127.0.0.1'
option port '535'
option resolver 'dnscrypt.org-fr'
option resolvers_list '/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv'
option ephemeral_keys '1'
option block_ipv6 '1'
No todos los servidores que te configures tienen las mismas caracteristicas y muchos ya no están operativos para la v1. Facilito los detalles de los que uso o he usado.
Habían urls donde consultar esto fácilmente pero ya no están operativas. Puedes consultar directamente el fichero /usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv
'adguard-dns-ns1' # Remove ads and protect your computer from malware (Filtra malware, ads y valida DNSSEC)
'adguard-dns-ns2' # Remove ads and protect your computer from malware (Filtra malware, ads y valida DNSSEC)
'adguard-dns-family-ns1' # Adguard DNS with safesearch and adult content blocking ( =adguard-dns-ns1 + filtro parental)
'adguard-dns-family-ns2' # Adguard DNS with safesearch and adult content blocking ( =adguard-dns-ns2 + filtro parental)
'bn-fr0' # Non-logging, uncensored DNS resolver provided by Babylon Network
'bn-fr1' # Non-logging, uncensored DNS resolver provided by Babylon Network
'bn-nl0' # Non-logging, uncensored DNS resolver provided by Babylon Network
'ns0.dnscrypt.is' # DNSSEC enabled, non-logging, uncensored. Sponsored by 1984 Hosting
'dnscrypt.eu-dk' # Free, non-logged, uncensored. Hosted by Netgroup. (valida DNSSEC)
'dnscrypt.org-fr' # DNSSEC/Non-logged/Uncensored - ARM server donated by Scaleway.com
# Los siguientes tengo probados que no funcionan a 2019/07/20 o los he dejado de utilizar por inconsistencia en las respuestas o no validar DNSSEC
'cisco' # Son los de OpenDNS. Filtran malware pero no valida DNSSEC. Deje de utilizarlo cando habilite DNSSEC
'cisco-familyshield' # Son los de OpenDNS. = a 'cisco' pero con filtro parental añadido.
'dnscrypt.ca-1' # Uncensored DNSSEC validating and log-free
'dnscrypt.ca-2' # Uncensored DNSSEC validating and log-free
'dnscrypt.eu-nl' # Free, non-logged, uncensored. Hosted by Netgroup. (Valida DNSSEC)
'dnscrypt.nl-ns0'
'securedns'
'yandex' # Yandex public DNS server (Chino)
Activar y empezar a usarlo:
/etc/init.d/dnscrypt-proxy enable # Para que autoarranque (En la v18 de OpenWRT creo que ya lo hace automático al instalarlo)
/etc/init.d/dnscrypt-proxy start # Arrancar (En la v18 de OpenWRT creo que ya lo hace automático al instalarlo)
Decir a dnsmasq que vaya a consultar dnscrypt-proxy editando /etc/config/dhcp (por defecto Openwrt usa dnsmasq)
# option logqueries '1' # No lo habilito. Es para registrar las consultas en syslog (ojo si hay muchas te ensuciará el log y recuerda fail2ban_openwrt)
# option resolvfile '/tmp/resolv.conf.auto' # Para DNSCRYPT debe estar comentado/disabled ya que /tmp/resolv.conf.auto hace que dnsmasq consulte a los DNS que te da por DHCP tu operador/ISP
option noresolv '1' # Para DNSCRYPT debe estar habilitarse para que deshabilite /etc/resolv.conf por lo mismo que lo comentado arriba.
list server '/pool.ntp.org/208.67.222.222' # Las consultas DNSCryot son algo más lentas por lo que ntp puede verse afectado y dnscrypt es sensible a ello. Lo pongo primero por si usas 'strict order'
list server '/pool.ntp.org/1.1.1.1' # Las consultas DNSCryot son algo más lentas por lo que ntp puede verse afectado y dnscrypt es sensible a ello. Lo pongo primero por si usas 'strict order'
list server '/openwrt.pool.ntp.org/208.67.222.222'
list server '/openwrt.pool.ntp.org/9.9.9.9'
list server '/openwrt.pool.ntp.org/1.1.1.1'
list server '127.0.0.1#533' # Instancia de dnscrypt proxy que hayas configurado y levantado. La deshabilite cuando habilite DNSSEC, ya que OpenDNS no lo soporta
list server '127.0.0.1#534' # Instancia de dnscrypt proxy que hayas configurado y levantado.
list server '127.0.0.1#535' # Instancia de dnscrypt proxy que hayas configurado y levantado.
# Ojo, si guardas a traves de entorno web (luci) perderas todos los comentarios de los ficheros
/etc/init.d/dnsmasq restart # Reiniciar dnsmasq y ahora ya estará usando dnscrypt-proxy
Tests y revisión de logs:
logread | grep "Proxying from" # Ver que dnscrpt proxy ha arrancado correctamente
logread | grep -n "using nameserver" # Para ver si dnsmasq ha cargado los dns de dnscrypt-proxy que has configurado en el ficheor dhcp
netstat -nltpua | grep dnscrypt # Ver puestos enq ue está escuchando como servidor y conectando como cliente
dnscrypt-proxy --version # To support plugins for support blacklist dns, verify "Support for ldns-based plugins: present" and you have installed package libldns
Con nslookup:
nslookup google.com 127.0.0.1#533 # Test local a la primera instancia de dnscrypt
nslookup google.com 127.0.0.1#534 # Test local a la segunda instancia de dnscrypt
nslookup google.com 192.168.12.1#53 # Test de lo que servirá tu router a los clientes cuando le hagan consultas DNS (dnsmasq)
nslookup google.com # Test de lo que consultara OpenWRT cuando haga peticiones por si mismo- Como updates.
Con hostip:
hostip google.com -r 127.0.0.1:533 # Test local a la primera instancia de dnscrypt
hostip google.com -r 127.0.0.1:533 # Test local a la segunda instancia de dnscrypt
hostip google.com -r 192.168.12.1:53 # Test de lo que servirá tu router a los clientes cuando le hagan consultas DNS (dnsmasq)
hostip google.com # Test de lo que consultara OpenWRT cuando haga peticiones por si mismo- Como updates.
Tests Online:
http://dnssec.vs.uni-due.de/ # Test DNSSEC
https://www.dnsleaktest.com/ # Lanza varias consultas DNS y te muestra que servidores DNS has utilizado para ello
https://www.dns-oarc.net/oarc/services/dnsentropy/ # Comprueba si utiliza id y puertos aleatorios en las consultas, lo cual previene ataques por envenenamiento
Hacer flush de cache dns en cliente linux: sudo /etc/init.d/networking restart or sudo /etc/init.d/nscd restart
hacer flush de cache dns en cliente win: ipconfig/flushdns
Probar consultas parando el servicio para ver si responde ok (si he dejado otros dns pueden resolver estos...)
Hacks, notas y resolución de posibles incidencias:
Si dnscrypt-proxy no inicia al reiniciar el router puede ser por que lo intento antes de que la interface estuviera completamente activa
Es una buena práctica igualmente añadir por precaución lo siguiente al fichero /etc/rc.local , por encima de la linea "exit 0"
sleep 10 # No me hizo falta pero no te olvides del enable de arriba para que autoarranque
/etc/init.d/dnscrypt-proxy start # Inicia dnscrypt-proxy despues de los diez segundos de pause, dando tiempo a que lso interfaces esten iniciados
Crea el fichero /etc/resolv-crypt.conf con solo el texto "options timeout:1" (sin las comillas)
Esto reduce el timeout de las consultas de dnsmasq a un segundos. Asi las respuestas son más rápidas si el primer servidor estubiera caído.
La versión de DNSCrypt-proxy en OpenWRT está compilada sin todos sus plugins, pero con ellos tiene opciones muy interesantes.
Las respuestas en DNSCrypt me tardan unos 0.05 segundos vs tiempos de 0.30s en Stubby con DNS over TLS (Ambos con DNSSEC habilitado)
DNSCrypt-proxy 2, además de la versión dos del protocolo dnscrypt, también soporta DNS over HTTPS
DNSCrypt-proxy 2 no puede convivir con DNSCrypt-proxy v1, tendrás que desinstalarlo para poder instalar la versión 2.
Pendiente Estoy esperando a la versión 19 de OpenWRT para ver si facilitan su implementación. Por ahora estoy con DNSCrypt v1 y DNS over TLS
Instalaremos Stubby, el cual, al igual que con dnscrypt-proxy, levanta un servidor DNS local que a su vez nos hará de intermediario siendo cliente de los servidores DNS sobre TLS que le configuremos. Stubby soporta DNSSEC de dos maneras en conjunción con dnsmasq. En las dos dnsmasq requiere que instales la versión completa.
Instalación:
opkg install stubby ca-certificates
Configuración /etc/config/stubby
Por defecto ya viene configurado con las consultas hacia cloudflare. En mi caso comento los resolvers sobre ipv6 y añado los de cleanbrowsing y quad de ibm.
Si quieres añadir más, tan solo debes clonar una instancia y cambiar la ip y nombre acorde al servidor.
config stubby 'global'
option manual '0'
option trigger 'wan'
# option triggerdelay '2'
list dns_transport 'GETDNS_TRANSPORT_TLS'
option tls_authentication '1'
option tls_query_padding_blocksize '128'
# option tls_connection_retries '2'
# option tls_backoff_time '3600'
option timeout '2000'
option dnssec_return_status '1'
option appdata_dir '/var/lib/stubby'
# option trust_anchors_backoff_time 2500
# option dnssec_trust_anchors '/var/lib/stubby/getdns-root.key'
option edns_client_subnet_private '1'
option idle_timeout '10000'
option round_robin_upstreams '1'
list listen_address '127.0.0.1@5453'
# list listen_address '0::1@5453'
option log_level '3'
# option command_line_arguments ''
# option tls_cipher_list 'EECDH+AESGCM:EECDH+CHACHA20'
# option tls_ciphersuites 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256'
option tls_min_version '1.2'
# option tls_max_version '1.3'
# Upstream resolvers are specified using 'resolver' sections.
config resolver
option address '9.9.9.9'
option tls_auth_name 'dns.quad9.net'
option tls_port '853'
# list spki 'sha256/yioEpqeR4WtDwE9YxNVnCEkTxIjx6EEIwFSQW+lJsbc='
# option tls_cipher_list 'EECDH+AESGCM:EECDH+CHACHA20'
# option tls_ciphersuites 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256'
option tls_min_version '1.2'
config resolver
option address '149.112.112.112'
option tls_auth_name 'dns.quad9.net'
option tls_port '853'
# list spki 'sha256/yioEpqeR4WtDwE9YxNVnCEkTxIjx6EEIwFSQW+lJsbc='
# option tls_cipher_list 'EECDH+AESGCM:EECDH+CHACHA20'
# option tls_ciphersuites 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256'
option tls_min_version '1.2'
config resolver
option address '185.228.168.9'
option tls_auth_name 'security-filter-dns.cleanbrowsing.org'
# option tls_port '853'
# list spki 'sha256/yioEpqeR4WtDwE9YxNVnCEkTxIjx6EEIwFSQW+lJsbc='
# option tls_cipher_list 'EECDH+AESGCM:EECDH+CHACHA20'
# option tls_ciphersuites 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256'
option tls_min_version '1.2'
config resolver
option address '185.228.169.9'
option tls_auth_name 'security-filter-dns.cleanbrowsing.org'
# option tls_port '853'
# list spki 'sha256/yioEpqeR4WtDwE9YxNVnCEkTxIjx6EEIwFSQW+lJsbc='
# option tls_cipher_list 'EECDH+AESGCM:EECDH+CHACHA20'
# option tls_ciphersuites 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256'
option tls_min_version '1.2'
config resolver
option address '1.1.1.1'
option tls_auth_name 'cloudflare-dns.com'
# option tls_port '853'
# list spki 'sha256/yioEpqeR4WtDwE9YxNVnCEkTxIjx6EEIwFSQW+lJsbc='
# option tls_cipher_list 'EECDH+AESGCM:EECDH+CHACHA20'
# option tls_ciphersuites 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256'
option tls_min_version '1.2'
config resolver
option address '1.0.0.1'
option tls_auth_name 'cloudflare-dns.com'
# option tls_port '853'
# list spki 'sha256/yioEpqeR4WtDwE9YxNVnCEkTxIjx6EEIwFSQW+lJsbc='
# option tls_cipher_list 'EECDH+AESGCM:EECDH+CHACHA20'
# option tls_ciphersuites 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256'
option tls_min_version '1.2'
config resolver
option address '176.103.130.130'
option tls_auth_name 'dns.adguard.com'
# option tls_port '853'
# list spki 'sha256/yioEpqeR4WtDwE9YxNVnCEkTxIjx6EEIwFSQW+lJsbc='
# option tls_cipher_list 'EECDH+AESGCM:EECDH+CHACHA20'
# option tls_ciphersuites 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256'
option tls_min_version '1.2'
config resolver
option address '176.103.130.131'
option tls_auth_name 'dns.adguard.com'
# option tls_port '853'
# list spki 'sha256/yioEpqeR4WtDwE9YxNVnCEkTxIjx6EEIwFSQW+lJsbc='
# option tls_cipher_list 'EECDH+AESGCM:EECDH+CHACHA20'
# option tls_ciphersuites 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256'
option tls_min_version '1.2'
#config resolver
# option address '2606:4700:4700::1111'
# option tls_auth_name 'cloudflare-dns.com'
# # option tls_port '853'
# # list spki 'sha256/yioEpqeR4WtDwE9YxNVnCEkTxIjx6EEIwFSQW+lJsbc='
# # option tls_cipher_list 'EECDH+AESGCM:EECDH+CHACHA20'
# # option tls_ciphersuites 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256'
# # option tls_min_version '1.2'
#config resolver
# option address '2606:4700:4700::1001'
# option tls_auth_name 'cloudflare-dns.com'
# # option tls_port 853
# # list spki 'sha256/yioEpqeR4WtDwE9YxNVnCEkTxIjx6EEIwFSQW+lJsbc='
# # option tls_cipher_list 'EECDH+AESGCM:EECDH+CHACHA20'
# # option tls_ciphersuites 'TLS_AES_2
Activar y empezar a usarlo:
Decir a dnsmasq que vaya a consultar DoT con Stubby editando /etc/config/dhcp
# option logqueries '1' # No lo habilito. Es para registrar las consultas en syslog (ojo si hay muchas te ensuciará el log y recuerda fail2ban_openwrt)
# option resolvfile '/tmp/resolv.conf.auto' # Debe estar comentado/disabled ya que /tmp/resolv.conf.auto hace que dnsmasq consulte a lso DNS que te da por DHCP tu operador/ISP
option noresolv '1' # Debe habilitarse para que deshabilite /etc/resolv.conf por lo mismo que lo comentado arriba.
list server '/pool.ntp.org/208.67.222.222' # Las consultas por TLS son algo más lentas por lo que ntp puede verse afectado y las consultas DoT son sensibles a ello. Lo pongo arriba por si usas 'strict order'
list server '/pool.ntp.org/1.1.1.1' # Las consultas por TLS son algo más lentas por lo que ntp puede verse afectado y las consultas DoT son sensibles a ello. Lo pongo arriba por si usas 'strict order'
list server '/openwrt.pool.ntp.org/208.67.222.222'
list server '/openwrt.pool.ntp.org/9.9.9.9'
list server '/openwrt.pool.ntp.org/1.1.1.1'
list server '127.0.0.1#5453' # Instancia de Stubby levantada (puede convivir con otros servidores como por ejemplo dnscrypt-proxy)
list server '127.0.0.1#533' # Supuesta instancia de dnscrypt proxy que hayas configurado y levantado conviviendo con Stubby/DoT
/etc/init.d/dnsmasq restart # Reiniciar dnsmasq y ahora dnsmasq ya utilizará a stubby como un servidor de consultas DNS
Tests y revisión de logs:
hostip google.com -r 127.0.0.1:5453 # Test local a la instancia de stubby, el cual preguntara a sus resolvers configurados
https://dnssec.vs.uni-due.de/
https://dnsleaktest.com/
netstat -nltpua | grep stubby # Ver puestos en que está escuchando como servidor y conectando como cliente
logread | grep stubby # Ver que stubby ha arrancado correctamente
logread | grep -n "using nameserver" | grep "#5453" # Para ver si dnsmasq ha cargado Stubby como cliente DNS configurado en el fichero dhcp
stubby -V # Version de Stubby
stubby -i # Ver la configuracion de /etc/stubby/stubby.yml (OpenWRT usa /etc/config/stubby por defecto, el cual genera /var/etc/stubby/stubby.yml)
Hacks, notas y resolución de posibles incidencias:
DNSSEC: Ve a la sección DNNSEC
Stubby en OpenWRT usa /etc/config/stubby pero nativamente utiliza /etc/stubby/stubby.yml, el cual existe y genera /var/etc/stubby/stubby.yml. Si quieres usar etc/stubby/stubby.yml, en vez del de OpenWRT, has de activar manual mode.
Has de saber que las ventajas que aporta DNS over HTTPS no se aprovechan con OpenWRT. Lo interesante de DNS over HTTPS es configurarlo directamente en el navegador, de cara a que cifre el envío de cabeceras sni al solicitar peticiones web. Los navegadores modernos envían la petición de la web con la cabecera SNI y aunque pienses que https cifra esto, en ralidad no lo hacen actualmente y se envía en texto plano, cualquier intermediario podría analizar y ver incluso con mayor detalle que a nivel de dns plano, ya que en el sni viene todo el path y url entera.
Un esquema intermediario es configurarte Privoxy en el navegador y activar el cifrado sni junto a DNS over HTTPS en el navegador. En el Router dejaría los servicios de DNS cifrados habituales, DNSCRypt o DNS over TLS junto a adblock
Si pese a ello quieres experimentar, en OpenWRT se configura de manera similar a DNSCrypt-proxy v1. Instalarás un servicio de proxy DNS intermediario que escuchará las peticiones a nivel local y las retransmitirá en este caso por HTTPS, escuchando por un puerto a cada instancia y servidor que hayas añadido de DNS over HTTPS.
###Instalar:
También cuidado por que eliminará cualquier comentario que tuvieses en el fichero /etc/config/dhcp cada vez que se pare o inicie.
opkg update && opkg install https-dns-proxy luci-app-https-dns-proxy # Dependencias: libev libcares (Antes de la 18.06.6 se llamaba https_dns_proxy y no estaba el paquete para luci)
/etc/init.d/https-dns-proxy start # Arranca el servicio
/etc/init.d/https-dns-proxy enable # Para que arranque cada vez que inicias el router (A partir de versiones actuales ya lo hace por defecto)
Por defecto, depende de la versión, te levantara una o dos instancias con google y cloudflare en 127.0.0.1:5053 y 127.0.0.1:5054. Puedes probarlo con: hostip google.com -r 127.0.0.1:5053
Ahora la idea es configurar los DNS que queramos añadir. Debemos saber las url e ips de los servidores pero el problema es que https_dns_proxy envía la petición en json y solo algunos lo soportan, siendo otras de las razones por la que en OpenWRT y al menos usando https:dns_proxy no es algo atractivo. Los que si lo soporten es probable que debas añadir algo a la url para especificar el formato json de nuestra petición. Los tres que si me han funcionado son CloudFlare, Quad(IBM) y google, pero google lo deshabilito. Algunos servidores como blahdns.com te rechazarán la consulta si el SNI no viene cifrado.
Editamos las instancias que queremos con el fichero /etc/config/https-dns-proxy (Antes de la 18.06.6 https_dns_proxy)
#En versiones 18.06.6 o superiores de OpenWRT
config https-dns-proxy
option bootstrap_dns '1.1.1.1,1.0.0.1'
option resolver_url 'https://cloudflare-dns.com/dns-query'
option listen_addr '127.0.0.1'
option listen_port '5053'
option user 'nobody'
option group 'nogroup'
config https-dns-proxy
option bootstrap_dns '9.9.9.9,149.112.112.9'
#option url_prefix 'sdns://AgMAAAAAAAAABzkuOS45LjmAABJkbnM5LnF1YWQ5Lm5ldDo0NDMKL2Rucy1xdWVyeQ'
option resolver_url 'https://dns9.quad9.net:443/dns-query'
option listen_addr '127.0.0.1'
option listen_port '5054'
option user 'nobody'
option group 'nogroup'
option subnet_addr ''
option proxy_server ''
#config https-dns-proxy
# option bootstrap_dns '8.8.8.8,8.8.4.4'
# option resolver_url 'https://dns.google/dns-query'
# option listen_addr '127.0.0.1'
# option listen_port '5055'
# option user 'nobody'
# option group 'nogroup'
#En versiones anteriores a la 18.06.6 (El fichero se llamaba https_dns_proxy en vez de https-dns-proxy)
config https_dns_proxy
option dns_servers '1.1.1.1'
option url_prefix 'https://cloudflare-dns.com/dns-query?ct=application/dns-json&'
option listen_addr '127.0.0.1'
option listen_port '5053'
option user 'nobody'
option group 'nogroup'
option subnet_addr ''
option proxy_server ''
config https_dns_proxy
option dns_servers '9.9.9.9'
#option url_prefix 'sdns://AgMAAAAAAAAABzkuOS45LjmAABJkbnM5LnF1YWQ5Lm5ldDo0NDMKL2Rucy1xdWVyeQ'
#option url_prefix 'https://dns9.quad9.net:443/dns-query'
option listen_addr '127.0.0.1'
option listen_port '5054'
option user 'nobody'
option group 'nogroup'
option subnet_addr ''
option proxy_server ''
#config https_dns_proxy
# option dns_servers '8.8.8.8'
# option url_prefix 'https://dns.google.com/resolve?'
# option listen_addr '127.0.0.1'
# option listen_port '5055'
# option user 'nobody'
# option group 'nogroup'
# option subnet_addr ''
# option proxy_server ''
Reiniciamos y hacemos pruebas
/etc/init.d/https_dns_proxy restart
ps | grep https # En el proceso poremos ver que que cargue bien nuestra configuración
hostip linuxmint.com -r 127.0.0.1:5053;hostip linuxmint.com -r 127.0.0.1:5054 # Pruebas de resolución
###Añadir https_dns_proxy a dnsmasq:
Para que el router consulte estos dns a traves de dnsmasq, se debe especificar las instancias que hayamos configurado en el fichero /etc/config/dhcp. Al igual que con DNSCrypt y DNS over TLS, nos interesa que el router no consulte a los dns del operador, de ahí la opción noresolv ‘1’
/etc/config/dhcp with:
list server '/openwrt.pool.ntp.org/9.9.9.9' # Anular el cifrado DNS para el proveedor de NTP para evitar el estado de bloqueo si la hora del sistema no está sincronizada. Tenga cuidado con los problemas de tolerancia a fallos. Ponlo primero por si usases 'strict order'
list server '/openwrt.pool.ntp.org/1.1.1.1' # Anular el cifrado DNS para el proveedor de NTP para evitar el estado de bloqueo si la hora del sistema no está sincronizada. Tenga cuidado con los problemas de tolerancia a fallos. Ponlo primero por si usases 'strict order'
list server '/openwrt.pool.ntp.org/208.67.222.222'
list server '/pool.ntp.org/208.67.222.222' # Anular el cifrado DNS para el proveedor de NTP para evitar el estado de bloqueo si la hora del sistema no está sincronizada. Tenga cuidado con los problemas de tolerancia a fallos. Ponlo primero por si usases 'strict order'
list server '/pool.ntp.org/1.1.1.1' # Anular el cifrado DNS para el proveedor de NTP para evitar el estado de bloqueo si la hora del sistema no está sincronizada. Tenga cuidado con los problemas de tolerancia a fallos. Ponlo primero por si usases
list server '127.0.0.1#5053' # Instancia uno de https_dns_proxy (Quad)
list server '127.0.0.1#5054' # Instancia dos de https_dns_proxy (Cloudflare)
#list server '127.0.0.1#5055' # Instancia tres de https_dns_proxy (Google)
# option resolvfile '/tmp/resolv.conf.auto' # Debe estar comentado/disabled ya que /tmp/resolv.conf.auto hace que dnsmasq consulte a los DNS que te da por DHCP tu operador/ISP
option noresolv '1' # Debe habilitarse para que deshabilite /etc/resolv.conf por lo mismo que lo comentado arriba.
Nota: https_dns_proxy soporta dnssec pero no que lo tengas habilitado directamente en dnsmasq. Si tienes las siguientes opciones en dnsmasq, tendrás que comentarlas o deshabilitarlas. Esto puede entrar en conflicto en como tengas activado DNSSEC con los servidores que tuvieras antes.
#option dnssec '1'
#option dnsseccheckunsigned '1'
Ahora debes activar el cifrado de la cabecera SNI de HTTP en el navegador, que es lo tiene de bueno DNS over HTTPS respecto al resto de servidores DNS cifrados.
Para ello introduce about:config en firefox, si te salta una warning, aceptamos. Busca el texto “network.security.esni.enabled” y hazle doble click para que quede activado en negrita.
Aunque lo actives, el cifrado de la cabecera SNI solo te funcionará realmente si configuras DNS over HTTPs en el navegador. No usandolo en el router. Pero está bien que lo dejes activado y preparado.
En Firefox hay una opción para que el propio navegador consulte DNS over HTTPS sin necesidad de que configures el router. Ve a Preferencias, General, Configuración de red (abajo del todo) y marcamos “Activar DNS sobre HTTPS”. Esto no excluye que debas activar el cifrado de sni para que se cifre adecuadamente. Puedes elegir el que viene por defecto pero aquí podrás elegir algunos adicionales. Algunos servidores como blahdns.com te rechazarán la consulta si el SNI no viene cifrado, no olvides activarlo.
Para testear si el sni del navegador se está enviando cifrado: https://www.cloudflare.com/ssl/encrypted-sni/#
Para ver que DNS estás utilizando: https://dnsleaktest.com/
hostip google.com -r 127.0.0.1:5053 # Consulta dns a instancia https_dns_proxy
nslookup google.com 127.0.0.1#5053 # Consulta dns a instancia https_dns_proxy
logread -e https_dns_proxy # Revisar en el log
uci show https_dns_proxy # Si encuentra errores te dirá en que linea.
uci show dhcp # Si encuentra errores te dirá en que linea.
Instalaras kmod-usb-core, usbutils y el modulo correspondiente a las versiones de los puertos usb que tiene tu router
Si tu router es USB 1.1 tendrás que averiguar si utiliza OHCI o UHCI e instalar solo el modulos de kernel adecuados y no los dos.
Instala usbutils y podrás ver un desglose de lo que dispone tu router con lsusb -t (mira si tiene ohci, uhci, ehci o xhci)
Recuerda que cuando instalas modulos del kernel, debes reiniciar el router completo para que los cargue (paquetes con kmod*)
Name Size Required Desciption
usbutils 206985 no USB devices listing utilities: lsusb, …
kmod-usb-core 74274 yes Kernel support for USB.
kmod-usb-ohci 14935 specific Kernel support for USB1 OHCI controllers (USB 1.1)
kmod-usb-uhci 14897 specific Kernel support for USB1 UHCI controllers (USB 1.1)
kmod-usb2 24752 specific Kernel support for USB2 EHCI controllers (USB 2.0)
kmod-usb3 specific Kernel support for USB3 XHCI controllers (USB 3.0)
kmod-ledtrig-usbdev 3502 no Kernel module to drive LEDs based on USB device presence/activity. (Si no dispones kmod-usb-ledtrig-usbport)
kmod-usb-ledtrig-usbport no Kernel module to drive LEDs based on USB device presence/activity. (Es preferible éste a kmod-ledtrig-usbdev)
En Comtrend AR-5387un instalo: kmod-usb-core usbutils kmod-nls-base kmod-usb2 kmod-usb-ohci (No instalar kmod-usb-uhci)
En Xiaomi Router Mi3G instalo: kmod-usb-core usbutils kmod-nls-base kmod-usb2 kmod-usb3
En Linksys WRT1900ACS instalo: kmod-usb-core usbutils kmod-nls-base kmod-usb2 kmod-usb3 (tiene un puerto usb3 y otro usb2.0 compartido con el esata)
Requiere basicos para USB (Ve a la sección Soporte USB donde lo detallo)
Recuerda que cuando instalas modulos del kernel, debes reiniciar el router completo para que los cargue (paquetes con kmod*)
Prefiero particionar el pendrive/tarjeta en el ordenador para no tener que hacerlo desde el router e instalar más paquetes
Instala:
kmod-usb-storage # Añade soporte USB al kernel para al almacenamiento usb.
block-mount # Permite montar directorios. # Se integra con luci y aparece en sección "Mount Points"
kmod-usb-storage-uas # Para USB 3.0
kmod-fs-ext4 # Debes añadir el sistema de ficheros que utilice el disco/pendrive. Lista los disponibles con opkg list kmod-fs-*
Chequea con:
ls -l /dev/sd*
block info | grep "/dev/sd"
Crea el directorio donde lo montarás: mkdir /mnt/sda1
Monta con luci(Mount Points) o con editando el fichero /etc/config/fstab
config global
option anon_swap '0'
option anon_mount '0'
option auto_swap '0'
option auto_mount '1'
option delay_root '5'
option check_fs '0'
config mount
option target '/mnt/sda1'
# option device '/dev/sda1' # Prefiero con el identificador UUID
option uuid '867ab5cf-84a2-428c-914d-fadbd54da6e8'
option enabled '1'
option fstype 'ext4'
option options 'noatime' # o 'relatime,nodiratime'
Requisitos:
Revisa la sección SoporteUSB, tendrás que habilitar los puertos USB añadiendo soporte para los tipos de puertos que tenga tu equipo. USB 1.1, USB 2.0 o USB 3.0
Estaría bien saber el tipo de chip que utiliza tu dispositivo wifi USB, ya que una vez tengas habilitado el soporte USB al kernel, debes añadirle también el soporte para tu modelo.
Algunos ejemplos:
Con chip Atheros AR9271 (1T1R) (Son los que mejor me iban cuando los usaba en mi viejo Comtrend ar5387un)
Me funcionaba en Chaos Calmer y LEDE, pero no con el canal en “auto” y la primera vez tuve que lanzar wifi reload y /etc/init.d/network restart (quizá wifi reload no sea necesario) Paquetes a instalar: kmod-ath9k-htc # Te instalará: kmod-ath kmod-ath9k-common y kmod-ath9k-htc
Nano Wifi N EDUP EP-N8508 (1T1R) Copia en archive.org de la Wikidevi de EDUP_EP-N8508
Paquetes a instalar: kmod-rtlwifi kmod-rtlwifi-usb kmod-rtl8192c-common kmod-rtl8192cu # Aunque es un chip RTL8188CUS (1T1R), en el kernel se cargaba el driver del RTL8192 pero solo toma b/g
RTL8188 (1T1R)
http://www.ebay.com/itm/Realtek-RTL8188-USB-150M-802-11b-g-n-Wireless-N-WiFi-LAN-Antenna-Adapter-Dongle/190875445399 # RTL8188ETV https://www.amazon.es/SATKIT-Adaptador-Realtek-rtl8188-150mb/dp/B06Y3V6V66/ref=sr_1_1?ie=UTF8&qid=1505951995&sr=8-1 # RTL8188
Otros ejemplos con chipset RTL8192 (2T2R2S) (ojo que nay varios modelos con una letra diferente al final)
https://www.ebay.com/itm/300Mbps-USB-WiFi-802-11n-g-b-Wireless-Adapter-300M-LAN-Card-5dbi-Antenna-RTL8192-/222487949119 https://www.ebay.com/itm/300M-USB-Wifi-Adapter-Plug-and-Play-RTL8192CU-for-Raspberry-Pi-2-Model-B-1GB-/251954260898 https://www.ebay.com/itm/Mini-Wireless-WIFI-Lan-USB-2-0-Network-Adapter-802-11b-g-n-300Mbps-RTL8192CU-New-/352130232463?hash=item51fc98f08f:g:3YMAAOSwvk9Zgpu~ https://www.ebay.com/itm/Mini-Wireless-WIFI-Lan-USB-2-0-Network-Adapter-802-11n-g-b-300Mbps-RTL8192CU-/132280802988?hash=item1ecc8cdeac:g:Sh4AAOSwutFZgpvA Startech https://www.startech.com/Networking-IO/Wireless/mini-wireless-n-network-adapter~USB300WN2X2C # RTL8192SU en la versión mini y RTL8192EU en la nano
https://forum.openwrt.org/viewtopic.php?id=61799 ( EDIMax 7811u wireless USB with kmod-rtl8192cu) https://dev.openwrt.org/ticket/18539 ( Aun siendo Wifi n, hace años el driver RTL8192 solo tomaba velocidades b/g)
RTL8191 (1T2R)
http://www.ebay.com/itm/300M-USB-WiFi-Wireless-LAN-802-11-n-g-b-Adapter-Nano-Network-300Mbps-Easy-To-Use-/222408098680
Notas:
El número delante de T y R son las antenas que tiene para transmisión y recepción. La de delante de la S son las que puede usar al mismo tiempo (streams)
Cada stream de datos en Wifi n a 40MHz son 150Mbits/s. Con dos sería un enlace máximo teórico de 300Mbits/s.
Los chips Atheros son de los más compatibles con Linux y OpenWRT, pero no hay de tipo ac.
Ve a la sección “Alias”, allí tengo recopiladas varias herramientas interesantes de testeo de red.
Instalar:
opkg install luci-app-statistics # Instalará también collectd
Monitorizar temperatura
opkg install lm-sensors collectd-mod-thermal
# Edita /etc/config/luci_statistics y marca enabled la sección *collectd_thermal*
# Accede a https://RouterIP/cgi-bin/luci/admin/statistics/graph/thermal # Hay un problema de cache con luci. Comprueba que funciona con esta url y reinicia si está bien.
# Dispones también el comando sensors y en mis alias tienes t1 y t2
Notas
Entre mis favoritos:
collectd-mod-cpu
collectd-mod-load
collectd-mod-memory
collectd-mod-contextswitch
collectd-mod-sensors
collectd-mod-thermal # Es como mi alias t1. Si lm-sensors te detecta sensores, es mejor collectd-mod-sensors, que es como mi alias t2.
collectd-mod-processes # En los Xiaomi y version 19.07.2 me da error y tumba todos las estadísticas.
collectd-mod-network
collectd-mod-interface
collectd-mod-iwinfo
collectd-mod-iptables
collectd-mod-tcpconns
collectd-mod-conntrack
collectd-mod-dns
collectd-mod-openvpn
collectd-mod-rrdtool
Probados y descartados:
collectd-mod-vmem # No aparece nada, ni añadiendo al fichero collectd_vmem. Además es redundante, el modulo de memoria ya tiene la virtual
collectd-mod-cpufreq # No lo detecta en los Linksys, menos lo hará en lox Xiaomi.
collectd-mod-ted # Detector e energía. En el router no aparece nada. Supongo que es más para ACPI, portátiles o modos de cpu de ahorro de energía.
collectd-mod-wireless # No aparece nada, ni añadiendo al fichero collectd_wireless
collectd-mod-sqm # Complejo. Requiere ademas collectd-mod-exec
collectd-mod-uptime # En segundos
collectd-mod-protocols # Por los fichero que veo que lee en https://collectd.org/wiki/index.php/Plugin:Protocols, no me sirve.
collectd-mod-users # No me funciona en OpenWRT
collectd-mod-threshold # https://collectd.org/wiki/index.php/Notifications_and_thresholds
Incidencias
Me pasó al activar nuevos módulos como Thermal o DNS que no aparecía la pestaña para ver los gráficos. Suele ser tema de cache del navegador, comprueba si funciona realmente accediendo a https://RouterIP/cgi-bin/luci/admin/statistics/graph/dns
Si aún así en una nueva pestaña sigue fallando, prueba para solucionarlo:
rm -rf /tmp/luci-modulecache/*
/etc/init.d/uhttpd restart
/etc/init.d/luci_statistics restart
- bwm-ng # Muy simple. Muestra el de ancho de banda usado actual por interfaz
- bmon # Monitoriza trafico de red por consola (se puede linar a web) Instala: confuse libnl libncursesw
- iftop # Muestra conexiones establecidas y ancho de banda usado en tiempo real
- cat /proc/net/nf_conntrack
- luci-app-statistics # Varias herramientas de monitorización, entre las que se encuentran los datos usados por interface y wifi.
- luci-app-nlbwmon # Muestra tráfico total de subida/bajada por equipo e incluso desglosa por protocolo. Visualmente atractivo.
- luci-app-vnstat # Muestra totales de equipo por dia y mes. Visualmente no me acaba de gustar pero a veces le doy utilidad.
- luci-wrtbmon # Muestra el ancho de banda usado actualmente y total. No disponible, instalación externa.
- bandwithd # Estadísticas de tráfico por ip. Muy costoso a nivel de cpu. No recomendado para routers.
- iptmon # Script que se compagina con iptables y luci-app-statistics para mostrar datos subidos/bajados por cada cliente dhcp.
Muestra ancho de banda usado por equipo en diferentes periodo, pudiendo desglosar hasta por cada minuto. Visualmente no me resulta atracivo en la gui, pero plantea utilidades interesantes.
Instalar:
opkg install vnstat vnstati luci-app-vnstat
Configuración:
Solo debes elegir que interface deseas monitorizar. No he notado que tenga consuma apenas recursos.
Persistencia de la base de datos:
Por defecto guarda lo que tiene en memoria en /var/lib/vnstat cada 30 minutos. Eesta carpeta está en ram, por lo que se perderá al reiniciar.
Hay una opción en la que con un script se guarda la base de datos antes de reiniciar y se recupera al arrancar. Revisa los enlaces en "Fuentes y más información/ayuda"
Si tienes un pendrive o sd, puedes hacer que escriba allí los datos para hacerlos persistentes y estaría bien aumentar tmb el tiempo de guardado.
Edita: /etc/vnstat.conf
DatabaseDir "/mnt/sda1/vnstat" # En mi caso cambio /var/lib/vnstat para guardar en un pendrive
Interface "br-lan" # Puedes cambiar el interface por defecto (eth0), te será util a la hora de lanzar comandos.
SaveInterval 60 # how often (in minutes) data is saved to file
OfflineSaveInterval 60 # how often (in minutes) data is saved when all interface are offline
El máximo tiempo de guardado es solo 60 (minutos) y no acepta valores mayores. (Por defecto usa 30)
Ten presente que ante un reinicio perderás lo que no haya volcado de la memoria a disco desde el último guardado.
Comandos:
vnstat # Muestra los datos de todos los interfaces
vnstat -u # Comando para decirle que guarde la base de datos en memoria a disco (ideal para antes de reiniciar)
vnstat -i br-lan # Muestra los datos del interface (Cuando seleccionas un comando especifico usará por defecto eth0)
vnstat -h -i br-lan # Muestra datos por horas del interface br-lan
vnstat -d -i br-lan # Muestra datos diarios del interface (-w para semanales y -m mensuales)
vnstat -t -i br-lan # Muestra los diez días con mayor uso de datos del interface
vnstat -l -i br-lan # Monitoriza en tiempo real
vnstat -tr -i tun1 # Calcula el ancho de banda usado en cinco segundos que monitoriza
vnstat --help # Ayuda
Truco:
Si usas la base de datos persistente, antes de reiniciar deberías guardar la base de datos, aunque solo se perderían máximo 60 minutos si no lo haces.
Estos alias serán utiles para que lo haga automáticamente sin que debas preocuparte. Puedes combinarlo con el commit de nlbwmon. Revisa la sección Alias arriba del documento.
alias halt="vnstat -u;/sbin/halt"
alias reboot="vnstat -u;/sbin/reboot"
Monitoriza el total de datos bajados y subidos mostrando una media de velocidad en un histórico con gráfio a través de luci-app-statistics Para ello establece unas reglas iptables en la tabla mangle de aquellos equipos que reciben una ip por dhcp. Cuando caduca se elimina la regla.
Lanza los siguientes comandos:
opkg update && opkg install collectd-mod-iptables luci-app-statistics # Instalar
[ -d "/etc/collectd/conf.d/" ] || mkdir -p /etc/collectd/conf.d/
wget https://raw.githubusercontent.com/oofnikj/iptmon/master/etc/collectd/conf.d/iptables.conf -O /etc/collectd/conf.d/iptables.conf # Descarga
wget https://raw.githubusercontent.com/oofnikj/iptmon/master/iptmon/src/usr/sbin/iptmon -O /usr/sbin/iptmon # Descarga (2021/06/08 Probado con 19.07.7)
wget https://raw.githubusercontent.com/oofnikj/iptmon/master/files/usr/sbin/iptmon -O /usr/sbin/iptmon # Descarga (2020/06/20 Probado con 19.07.3)
wget https://raw.githubusercontent.com/oofnikj/iptmon/master/usr/sbin/iptmon -O /usr/sbin/iptmon # Descarga (Anterior Probado con 19.07.{1-2})
chmod +x /usr/sbin/iptmon # Da permisos de ejecucion al script
echo -e '\n\n# Para iptmon https://github.com/oofnikj/iptmon\ndhcp-script=/usr/sbin/iptmon\n' >> /etc/dnsmasq.conf # Configura que dnsmasq llame a iptmon con cada nuevo cliente dhcp
echo -e '\n\n# Para iptmon https://github.com/oofnikj/iptmon\n/usr/sbin/iptmon init\n' >> /etc/firewall.user # Crea las cadenas al iniciar iptables
uci set luci_statistics.collectd.Include='/etc/collectd/conf.d'
uci commit
# Estas dos lineas de antes revisan que /etc/config/luci_statistics tenga al menos esta linea dentro la sección siguiente:
# config statistics 'collectd'
# option Include '/etc/collectd/conf.d'
# La siguiente linea agrega para que se haga backup de los ficheros. iptables.conf, iptmon y dnsmasq.conf
echo -e '\n\n# Para iptmon https://github.com/oofnikj/iptmon\n/etc/collectd/conf.d/iptables.conf\n/usr/sbin/iptmon\n/etc/dnsmasq.conf\n' >> /etc/sysupgrade.conf
# Edita el fichero /etc/config/luci_statistics y busca el campo "config statistics 'collectd_iptables'" y marca el enable a 1 como las dos lineas de abajo (sin los #):
# config statistics 'collectd_iptables'
# option enable '1'
reboot # debería servir pero no me funciono con solo: service firewall restart y service luci_statistics restart
iptmon solo monitoriza equipos que obtienen la ip mediante dhcp. Puedes añadir dos entradas como las de este ejemmplo al final de /etc/firewall.user para cada equipo que quieras monitorzar sin dhcp:
iptables -t mangle -A iptmon_rx -s 0.0.0.0/0 -d 192.168.0.163 -m comment --comment "rx_NEO2" -j RETURN
iptables -t mangle -A iptmon_tx -s 192.168.0.163 -d 0.0.0.0/0 -m comment --comment "tx_NEO2" -j RETURN
Monitorización de tráfico desglosado por equipo y protocolo visualmente atractivo y no he visto que consuma muchos recursos
Al estilo luci-wrtbwmon pero más completo y visual. Escucha conntrack en vez de reglas iptables
opkg install nlbwmon luci-app-nlbwmon # Instala adicional: kmod-nfnetlink kmod-nf-conntrack-netlink nlbwmon
/etc/config/nlbwmon
config nlbwmon
option refresh_interval '30s' # Cada cuanto refrescará los contadores de tráfico de las conexiones establecidas de netlink
option database_interval '1' # 1 = primer dia de mes. -2 = second last day of month, ej: 30th in March. '2017-01-17/14' = every 14 days, starting at Tue
option protocol_database '/etc/config/myconfig/protocols_nlbmon' # Por defecto en /usr/share/nlbwmon/protocols.
# Si no te lo coje, yo creo un enlace con: rm /usr/share/nlbwmon/protocols && ln -s /etc/config/myconfig/protocols_nlbmon /usr/share/nlbwmon/protocols && reboot
option database_limit '99999' # Maximas entradas en la bbdd. 10000 por defecto, 0 para unlimited
option database_generations '0' # Limite de histórico de ficheros de bbdd generados (uno por mes). 0 sin limite
option commit_interval '12h' # Por defecto guarda en memoria y con este intervalo escribe a fichero (ojo si escribes en flash, no muy frecuente)
option database_directory '/mnt/sda1/nlbwmon' # Donde escribirá el fichero en el intervalo elegido. Por defecto en memoria con /var/lib/nlbwmon
option database_prealloc '1' # Reserva toda la memoria que podria usar para asegurarla en equipos que vayan justos (ojo a los límites que tengas puestos)
option database_compress '1' # Accederás al historico más lento pero se reducirá bastante el espacio al comrpimirla
list local_network '192.168.0.0/16' # Only conntrack streams from or to any of these subnets are counted.
list local_network '172.16.0.0/12'
list local_network '10.0.0.0/8'
list local_network 'WireGuard_Guest' # Logical interface names may be specified to resolve the local subnets on the fly
list local_network 'WireGuard_Home'
list local_network 'OpenVPN_Home'
list local_network 'VPN_2_CPD'
list local_network 'Invitados'
list local_network 'Servers'
list local_network 'lan'
Comandos consola de ejemplo:
nlbw -c commit # Guarda los datos de memoria en la bbdd.
nlbw -c show -g host -o host # -c show para mostrar por pantalla
nlbw -c show -g mac,fam -o conn # -g para agrupar por lo que indiques
nlbw -c show -g mac -o -conn,-tx # -o para ordenadr por lo que indiques. Con un - delante para invertir el orden
nlbw -c csv -g mac -o mac -q # Exporta a csv para ser interpretado por otro equipo. P.e. rrdcollect
nlbw -c json # Dump database to json
nlbw -t 2019-06-01 -c csv -g mac -o mac -q # Consultar una base de datos en concreto (yo guardo por mes)
Consejos si usas que la base de datos sea persistente en disco:
Antes de reiniciar lanza un commit con nlbw -c commit
Estos alias serán utiles. Revisa la sección Alias arriba del documento.
alias halt="nlbw -c commit;/sbin/halt"
alias reboot="nlbw -c commit;/sbin/reboot"
No disponible en OpenWRT. A mi me entra en conflicto con nlbwmon. Hasta que no entro a luci, no activa la monitorización. Mejor opta por uno o el otro.
Muestra el ancho de banda actual y total por equipo. Visualmente sencillo y muy claro e inteligible
wrtbwmon crea reglas iptables para monitorizar
luci-wrtbwmon es la interfaz luci para wrtbwmon
Usage (Instalar):
cd /tmp/
wget https://github.com/pyrovski/wrtbwmon/releases/download/0.36/wrtbwmon_0.36_all.ipk --no-check-certificate
opkg install /tmp/wrtbwmon_*_all.ipk && rm /tmp/wrtbwmon_*_all.ipk
/etc/init.d/wrtbwmon enable
/etc/init.d/wrtbwmon start
wget https://github.com/Kiougar/luci-wrtbwmon/releases/download/v0.8.3/luci-wrtbwmon_v0.8.3_all.ipk --no-check-certificate # 20190610 (No probado)
# wget https://github.com/Kiougar/luci-wrtbwmon/releases/download/v0.7.0/luci-wrtbwmon_0.7.0_all.ipk --no-check-certificate # 20180203
# wget https://github.com/Kiougar/luci-wrtbwmon/releases/download/v0.6.0/luci-wrtbwmon_0.6.0_all.ipk --no-check-certificate # 20170605
opkg install /tmp/luci-wrtbwmon_*_all.ipk && rm /tmp/luci-wrtbwmon_*_all.ipk
rm /tmp/luci-indexcache # Borra la cache de Luci (entorno web)
/etc/config/scripts/Gen_tmp_dnsmask.conf_for_wrtbwmon.sh # Script mio para que Usage muestre el nombre del equipo. Como openwrt no usa /tmp/dnsmasq.conf lo genero como seria con los datos de /etc/config/dhcp
Desinstalar:
wrtbwmon remove
opkg remove wrtbwmon
opkg remove luci-wrtbwmon
Estadísticas de tráfico por ip. Muy costoso a nivel de cpu. No recomendado para routers. A mayor ancho de banda, todavía más costoso.
Es un sniffer y analizador/inspector de trafico, excesivamente costoso si encima procesas la bbdd y genera graficas localmente.
Hay varias versiones según como quieres almacenar y mostrar los datos.
Servira web en http://TuRouterWRT/bandwidthd
###Esta es la parte superior del script con los valores y opciones que podrás configurar:
Reporta_Nuevas_Conexiones_a_Wifi_eMail=True # Reporta cuando alguien se conecta a nuestra wifi enviando un email
Reporta_Nuevas_Conexiones_a_Wifi_botTG=False # Reporta cuando alguien se conecta a nuestra wifi con un mensaje de Telegram
Reporta_Acciones_Fwknopd_eMail=True # Reporta cuando fwknopd acepta una peticion de apertura o redireccion de puertos (por correo)
Reporta_Acciones_Fwknopd_botTG=False # Reporta cuando fwknopd acepta una peticion de apertura o redireccion de puertos (por telegram)
Registra_ControlHorario=True # Funciona en conjuncion con el script ControlHorario.sh, que se lanzara antes de finalizar cada dia
PathForControlHorario="/tmp/ControlHorario" # Si no existe la carpeta, la creara. Aqui creara los ficheros FirstWcon.<NombreEquipo>.<YYYY-MM-DD> y LastWcon.<NombreEquipo>.<YYYY-MM-DD>
# Ten presente que /tmp esta en ram y se borra al reiniciar. Valora anadir un pendrive para no machacar la flash: https://micorreo.email/OpenWRT.html#USBStorage
#### Opciones de reporte conexiones a wifi ####
Omite_Reservas_DHCP=True # Omitira las mac que aparezcan en el fichero /etc/config/dhcp (reservas de DHCP)
Omite_Ficheros="/etc/config/myconfig/MailNewClients_Whitelist" # Omitira las mac que aparezan en este fichero. Puedes poner varios ficheros, ej: "/path/file1 /path/file2".
# El fichero debe tener una mac por linea y acepta un espacio y comentario, ej: 00:00:00:00:00:00 # Ejemplo
####### Datos para los envios de correo #######
SMTP_SERVER=smtp.gmail.com # Si pones la ip podras recibir notificaciones aunque todavia no haya levantado dnscrypt/adblock o haya alguna incidencia al respecto
SMTP_SERVER_PORT=587
SMTP_AUTH=tucorreo
SMTP_PASS="tupass"
MAIL_FROM=$SMTP_AUTH
MAIL_TO=correodestino
MAIL_SUBJECT_FWKNOPD="Nueva regla fwknopd en $(uname -n)"
MAIL_SUBJECT_WIFI="Nuevo dispositivo conectado en $(uname -n)"
#### Datos para la notificacion por Telegram ####
BOT_TG_CHAT_ID='[CHAT_ID]'
BOT_TG_TOKEN_KEY='[TOKEN_KEY]'
BOT_TG_API="https://api.telegram.org/bot$BOT_TG_TOKEN_KEY" # Crea bot con @BotFather para enviar info directamente a tu chat. https://core.telegram.org/bots#6-botfather
En la sección para notificar cada vez que alguien se conecta a nuestra wifi esta la parte superior del script con las opciones que puedes configurar
Si tienes una ip dinámica, se trata en mantener un registro DNS actualizado cuando tu ip cambie. Hay varios servicios en internet que te ofrecen esto de manera gratuita.
Nota: Piensa que son servicios gratuitos que se usan masivamente. Por favor, no configures las actualizaciones de manera agresiva.
Nota: Cada vez que haces cambios en el fichero, para que los tome debes reinicar els servicio con: /etc/init.d/ddns restart
Nota: Algunos servicios deben ver que hay actividad. Por eso los campos force_interval y force_unit se hacen importantes aunque no te cambie la ip.
Truco: Cuando lo configures por primera vez puedes ampliar el nivel de log y una vez lo tengas funcionando, desactivarlo para rebajar recursos o poner use_syslog a 5 para solo errores.
Truco: Si tienes un dominio tuyo, puedes crear una entrada CNAME en tu DNS que apunte al servicio ddns. Te será más fácil de recordar por ejemplo casa.midom.es y si algún dia has de cambiar de ddns, tan solo lo configuras en openwrt y cambias el cname y el resto todo seguira igual. Puedes registrar en dondominio.com dominios .com.es por 3€ al año y tmb tienen api para actualizar DNS
Revisa las opciones genéricas en la sección DNS Dinámico (Cliente DDNS)
No recomendado. Te obligan a logearte cada 30 días y si te descuidas, te cancelan el host (aunque se esté actualizando con el cliente).
config service 'NOIP'
option enabled '1'
option interface "wan" # Cuando arranca/cambia este interface, lanza el script para comprobar/actualizar la ip
option use_syslog '5' # Log sobre syslog(logread) 0=disable, 1=2+info, 2=3+notice, 3=4+warning, 5=solo errores. Por defecto 0.
option use_logfile '1' # Log en /var/log/ddns/Instancia.log Por defecto 1 y se trunca a máximo 250 lineas
option lookup_host 'host.no-ip.com'
option service_name 'no-ip.com' # service_name y update_url no pueden estar al mismo tiempo. Uno o el otro.
option check_interval '33'
option check_unit 'minutes'
option retry_interval '6'
option retry_unit 'minutes'
option force_interval '28'
option force_unit 'days'
option ip_source 'network' # Con web se conecta a una *web* especificada en *ip_url* para averiguar tu ip. Con *network* la toma del interface que le especifiques en *ip_network* y si no lo autodetecta
option ip_network 'wan' # Tomará de este interface para actualizar la ip si configuraste ip_source como 'network'
option domain 'TuHost.no-ip.org'
option username 'TuUsuario'
option password 'TuPassword'
option use_https '1' # Por defecto tomara las CAs para validar los certificados de /etc/ssl/certs que se habrán descargado con el paquete "ca-certificates".
option cacert 'IGNORE' # Le puedes especificar otro path o fichero de CAs para validar los certificados para la actualización cifrada. Por defecto '/etc/ssl/certs'
option cacert '/etc/ssl/certs' # Le puedes especificar otro path o fichero de CAs para validar los certificados para la actualización cifrada. Por defecto '/etc/ssl/certs'
Revisa las opciones genéricas en la sección DNS Dinámico (Cliente DDNS)
Cambia <subdomain>
y <duckdns-token>
con tus valores
config service "duckdns"
option enabled '1'
option interface 'wan' # Cuando arranca/cambia este interface, lanza el script para comprobar/actualizar la ip
option use_syslog '5' # Log sobre syslog(logread) 0=disable, 1=2+info, 2=3+notice, 3=4+warning, 5=solo errores. Por defecto 0.
option use_logfile '1' # Log en /var/log/ddns/Instancia.log Por defecto 1 y se trunca a máximo 250 lineas
option lookup_host '<subdomain>.duckdns.org'
option check_interval '1'
option check_unit 'hours'
option force_interval '24'
option force_unit 'days'
option ip_source 'network' # Con web se conecta a una *web* especificada en *ip_url* para averiguar tu ip. Con *network* la toma del interface que le especifiques en *ip_network* y si no lo autodetecta
option ip_network 'wan' # Tomará de este interface para actualizar la ip si configuraste ip_source como 'network'
option domain '<subdomain>.duckdns.org'
option username '<subdomain>'
option password '<duckdns-token>'
option update_url 'http://www.duckdns.org/update?domains=[USERNAME]&token=[PASSWORD]&ip=[IP]' #service_name y update_url no pueden estar al mismo tiempo. Uno o el otro
option use_https '1' # Por defecto tomara las CAs para validar los certificados de /etc/ssl/certs que se habrán descargado con el paquete "ca-certificates".
option cacert '/etc/ssl/certs/ca-bundle.pem' # Descarga Start SSL's ca bundle con: curl -k https://certs.secureserver.net/repository/sf_bundle-g2.crt > /etc/ssl/certs/ca-bundle.pem
Podría ser que con el paso de los años debas eliminar y descargar el certificado actualizado con el siguiente comando:
rm /etc/ssl/certs/ca-bundle.pem && curl -k https://certs.secureserver.net/repository/sf_bundle-g2.crt > /etc/ssl/certs/ca-bundle.pem # Asegurate que puedas descargarlo antes de borrarlo
Revisa las opciones genéricas en la sección DNS Dinámico (Cliente DDNS)
Ofrece cuatro dominios diferentes. Suelo usar urown.cloud, ya que el DNS responde con DNSSEC y el correo está restringido mediante SPF y DMARC.
Ojo, si entras a la web y pulsas en show configuration, te resetea y cambia la contraseña automáticamente por lo que deberás cambiarla en el cliente
Es OpenSource, por lo que si tienes tu propio dominio y servidor, te lo puedes montar tu mismo.
[ -d /etc/ssl/certs ] || mkdir -p /etc/ssl/certs # Deberías tenerla ya creada, pero por si acaso lo chequea y crea en caso de no ser así
wget -P /etc/ssl/certs http://curl.haxx.se/ca/cacert.pem # Descarga la CA para validar la conexión/actualizaciones con tls
config service 'Nsupdate'
option enabled '1'
option interface "wan" # Cuando arranca/cambia este interface, lanza el script para comprobar/actualizar la ip
option use_syslog '5' # Log sobre syslog(logread) 0=disable, 1=2+info, 2=3+notice, 3=4+warning, 5=solo errores. Por defecto 0.
option use_logfile '1' # Log en /var/log/ddns/Instancia.log Por defecto 1 y se trunca a máximo 250 lineas
option lookup_host 'host.nsupdate.info'
option service_name 'nsupdate.info' # service_name y update_url no pueden estar al mismo tiempo. Uno o el otro.
option check_interval '33'
option check_unit 'minutes'
option retry_interval '6'
option retry_unit 'minutes'
option force_interval '29'
option force_unit 'days'
option ip_source 'web' # Con web se conecta a una *web* especificada en *ip_url* para averiguar tu ip. Con *network* la toma del interface que le especifiques en *ip_network* y si no lo autodetecta
option ip_url 'http://ipv4.nsupdate.info/myip'
option domain 'host.nsupdate.info'
option username 'host.nsupdate.info'
option password 'Password' # Ojo, si entras en la web de nsupdate.info y le das a show configuration, te resetea y cambia el password de esa entrada
option use_https '1' # Por defecto tomara las CAs para validar los certificados de /etc/ssl/certs que se habrán descargado con el paquete "ca-certificates".
option cacert '/etc/ssl/certs/cacert.pem' # Debes haberlo descargado antes con wget -P /etc/ssl/certs http://curl.haxx.se/ca/cacert.pem
Podría ser que con el paso de los años debas eliminar y descargar el certificado actualizado con el siguiente comando:
wget -P /tmp http://curl.haxx.se/ca/cacert.pem && rm /tmp/cacert.pem && echo "OK" # Asegurate que puedas descargarlo antes de borrarlo
rm /etc/ssl/certs/cacert.pem && wget -P /etc/ssl/certs http://curl.haxx.se/ca/cacert.pem # Si no existe /etc/ssl/certs/cacert.pem, no lo descargara, lanza solo wget -P /etc/ssl/certs http://curl.haxx.se/ca/cacert.pem
Revisa las opciones genéricas en la sección DNS Dinámico (Cliente DDNS)
Cambia <dominio que queremos actualizar>
, <nombre de usuario>
y <DonDNS Key>
con tus valores
config service 'HostDonDominio'
option enabled '1'
option interface 'wan' # Cuando arranca/cambia este interface, lanza el script para comprobar/actualizar la ip
option use_syslog '5' # Log sobre syslog(logread) 0=disable, 1=2+info, 2=3+notice, 3=4+warning, 5=solo errores. Por defecto 0.
option use_logfile '1' # Log en /var/log/ddns/Instancia.log Por defecto 1 y se trunca a máximo 250 lineas
option check_interval '15'
option check_unit 'minutes'
option retry_interval '120'
option retry_unit 'seconds'
option force_interval '96'
option force_unit 'hours'
option ip_source 'network' # Con web se conecta a una *web* especificada en *ip_url* para averiguar tu ip. Con *network* la toma del interface que le especifiques en *ip_network* y si no lo autodetecta
option ip_network 'wan' # Tomará de este interface para actualizar la ip si configuraste ip_source como 'network'
option domain '<dominio que queremos actualizar>'
option username '<nombre de usuario>'
option password '<DonDNS Key>'
option update_url 'http://dondns.dondominio.com/plain/?user=[USERNAME]&password=[PASSWORD]&host=[DOMAIN]' #service_name y update_url no pueden estar al mismo tiempo. Uno o el otro
option use_https '1' # Por defecto tomara las CAs para validar los certificados de /etc/ssl/certs que se habrán descargado con el paquete "ca-certificates".
option cacert 'IGNORE' # Le puedes especificar otro path o fichero de CAs para validar los certificados para la actualización cifrada. Por defecto '/etc/ssl/certs'
Revisa las opciones genéricas en la sección DNS Dinámico (Cliente DDNS)
Mail-in-a-Box es una suite para Ubuntu 18.04 LTS que te instala un servidor de correo completo con todo lo necesario + algunos extras como por ejemplo Nextcloud.
Tiene una api para actualizar remotamente los dns, por lo que tan solo tendrías que colocar una linea como esta en el cron con tus datos. Yo me notificaba por correo cuando actualizaba la ip y para ello debes instalar mailsend
\*/30 * * * * Host='registro.dominio.ext';Ip_DNS="$(dig A $Host @box.dominio.ext | grep $Host | grep -v ';' | awk '{ print $5}')";Ip_Conexion="$(wget -qO- icanhazip.com)"; Mensaje="Actualizada ip para $Host Nueva:$Ip_Conexion Anterior:$Ip_DNS" ; if [ "$Ip_DNS" != "$Ip_Conexion" ]; then curl -X PUT -d "$Ip_Conexion" --user CuentaAdmin:AdminPass https://box.dominio.ext/admin/dns/custom/$Host/A;mailsend -smtp box.dominio.ext -f remitente@dominio.ext -t destino@dominio.ext -auth -user remitente@dominio.ext -pass "PasswordEmail" -sub "$Mensaje" -M "$Mensaje" -cs "iso-8859-1" -enc-type "8bit" -starttls -port 587;fi
Debes cambiar:
*/30 # Compruebo cada treinta minutos.
Host # Cambialo por tu entrada dns que mantendrás actualizada
box.dominio.ext # Cambialo por el dns que apunta a tu instancia de mailinabox.email (lo utilizo para actualizar el dns y enviar el correo)
CuentaAdmin # Email con derechos de administración en Mail-in-a-Box
AdminPass # Password del email con derechos de administración en Mail-in-a-Box
icanhazip.com # La web que utilizo para ver que ip tienes. Puede ser otras como ifconfig.me o similares (han de mostrar solo la ip sin texto adicional)
remitente@dominio.ext # El remitente y usuario de autentificación del correo
destino@dominio.ext # El destino donde notificar y enviar el correo
PasswordEmail # El password del usuario con el que te autentificas (remitente@dominio.ext)
Ve a https://box.tudominio.es/admin#custom_dns para ver la documentación de la api, por si quieres montartelo tu mismo y ver todas las opciones que soporta.
Al final nunca lo he llegado a probar por tantas opciones que ya tengo disponible, probadas y documentadas:
###Configurar el servidor/router
opkg install luci-app-wireguard # Instalará: kmod-wireguard kmod-udptunnel4 kmod-udptunnel6 wireguard-tools ip-tiny y luci-proto-wireguard. Debes reiniciar para que cargue el kernel
wg genkey | tee wg_privatekey.guest | wg pubkey > wg_publickey.guest # Genera donde estés los ficheros clave del servidor. Como suelo generar dos interfaces/servidores wireguard, pongo nombre para diferenciar sus dos claves que genero. Puedes dejar la clave en /etc/config/wireguard/ pero ve con cuidado donde guardas los backups, ya que están tus claves...
wg genkey | tee wg_privatekey.user1 | wg pubkey > wg_publickey.user1 # Genera nueva clave privada y publica para cada (peer/cliente). Genera tantas como usuarios/clientes necesites
wg genpsk > wg_psk # Opcional. Para hacerlo quantum resistence utilizaremos una clave adicional. Solo lo hago si van a acceder a la red interna, si lo vas a aislar como a wifis de invitados para navegar desde wifis publicas, no es necesario y dejas el cliente más sencillo de configurar)
chmod 600 * # Establece los permisos adecuados.
En Luci/Network/interfaces creo una nueva interface eligiendo el protocolo "Wireguard VPN" (si acabas de instalar, debes haber reiniciado antes)
El nombre de la interface suelo poner Wireguard_home o Wireguard_guest, para diferenciar por el nombre si la interface/vpn que estoy generando será de acceso a la red interna o aislada solo para navegación segura
Pega la clave privada de servidor que has generado. En el router: cat wg_privatekey.home
Elijo el puerto donde quiero escuchar y pongo la privatekey generada. Si quieres evitar restricciones puedes usar 53,80,443, 993 o 8080. Ojo, que no se solape en puertos que ya tengas levantados (53,80,443). Como altos puedes probar los UDP de watsapp: 34784, 45395, 50318 o 59234
Especifica la ip que tomará el servidor/router en la vpn generada. ej: 192.168.30.1/24 # Si pones /32 funciona, pero ojo en dnsmask con localservice '1' (abajo info)
En Advanced asegurate que esté marcada "bring up on boot" y personalmente yo deshabilito todo lo relacionado con ipv4, asi que desmarco "Use builtin IPv6-management"
En Firewall Settings puedes unirte a una zona firewall que ya tengas, ej: Invitados pero recuerda que he colocado un rango de ips diferente, quizá quieras crear una nueva zona por si quieres poner reglas en base a la ip. ej: VPN_LAN, VPN_Guest, Wireguard_guest, etc...
En Peers:
Añado uno por cliente y pongo la publickey repectiva de cada cliente que se quiere conectar (la privada la utilizarás en el equipo que se vaya a conectar, ej: mobil)
En allowed ip elijo la ip que va a tomar cada peer/cliente: 192.168.30.2/32
Habilita: "Route Allowed IPs" # Crea automáticamente las rutas a cada Allowed IP de este peer. (Le permite salir a internet, de otra manera o creas tu las rutas a mano o no tendrás salida a inernet por la vpn, solo tendrías acceso a la red local de la vpn)
Opcional: añado el campo "Preshared Key" y coloco el contenido de wg_psk # Es opcional pero le da mayor seguridad ante ataques (Lo hago solo si la vpnd e acceso a la red interna)
Optional: Persistent Keep Alive # Cada cuando envia una señal para ver si está viva y mantener la conexión. Recomiendan un valor de 25 pero si la conexión del cliente es estable suelo subirlo para reducir el tráfico de control. (En fichero es option persistent_keepalive '40')
Aconsejado: añade el campo "Description" y especificale un nombre a cada cliente. Si vas a tener varios peers te ayudara a identificarlos.
Habilita en Traffic Rules(Firewall)/"Open ports on router" para que se pueda conectar desde fuera al puerto elegido de escucha (udp). En nuestro ejemplo, el 8080. Revisa GeoIP. Suelo permitir solo el acceso a los paises en que me vaya a conectar.
El fichero /etc/config/network habrá añadido algo tal que así. Puedes usarlo como referencia para editarlo sin luci:
config interface 'WIREGUARD_PRINT'
option proto 'wireguard'
option private_key 'CP0dGm71wHaMyQw/l3hfbyEGrImBz164L8ufmVd4WF0=' # Tranquilo que no es mi clave ;)
option listen_port '8080' # Debes tenerlo abierto en el firewall del router. Network -> Firewall -> Traffic Rules # Si tienes el forzado DNS, no pongas el 53
list addresses '192.168.30.1/24' # No elijas un rango que ya tengas en tus interfaces
config wireguard_WIREGUARD_PRINT
option public_key 'OrHbfSh3mUpdcIIwWZpV2FJQcAVJ4nB1To2zfWwniT8=' # Tranquilo que no es mi clave ;)
list allowed_ips '192.168.30.2/32'
option route_allowed_ips '1'
option preshared_key 'KD8b6N2k8vkyYslhzJEfBuZUuRTn0iF2S0Jb8a0Vz9U=' # Tranquilo que no es mi clave ;)
option persistent_keepalive '30'
option description 'User1'
El fichero /etc/config/firewall habrá añadido algo tal que así (Si lo has unido a la zona firewall que tuvieras para invitados)
config zone
option name 'Invitados'
option output 'ACCEPT'
option input 'REJECT'
option forward 'REJECT'
option network 'Invitados WIREGUARD_PRINT'
config rule
option enabled '1'
option target 'ACCEPT'
option src 'wan'
option dest_port '8080'
option name 'Wireguard'
option family 'ipv4'
option proto 'udp'
wg # Comando para ver estado. Tmb en en Luci: Status -> WireGuard Status. Revisa tmb en Interfaces que haya tráfico y esté levantada
wg show WIREGUARD_PRINT # Por si tienes varias interfaces/VPN de wireguard y con muchos clientes, de esta manera miras solo la que te interesa
iptables -nvL zone_wan_input # Para ver si te llega la petición de fuera a la regla que hayas permitido con el firewall
------------------------------------------------------
A modo de resumen, como es lioso al principio, esquematizo que claves y peers deben ir en casa sitio:
En el servidor configurarás:
- Interface: Llave privada** del servidor e ip que no sea /32 (/24 por ejemplo. Motivo en el apartado Incidencias)
- Peers del servidor (Son los clientes y crearás uno por cada cliente): Llaves publicas de cada usuario/cliente que se conectará e ip que tomará o rango que aceptará que use
Luego en el cliente/s configurarás:
- Interface: Llave privada del cliente que estás cofigurando e ip o rango que usará (debe estar dentro del rango del Interface en el servidor)
- Peer del cliente: es el servidor y pondrás la ip pública y llave pública del servidor donde te quieres conectar
------------------------------------------------------
Conectar/configurar los dispositivos cliente:
Conectar/configurar los dispositivos cliente:
Name: ClienteWG # Creo conexión/interface y coloca el nombre que quieras para diferenciarla
PrivateKey: TuClavePrivada # Colocarás la clave privada del usuario. Puedes utilizar las claves que has generado en el router pero tmb el cliente suele dar opción a generar el mismo las claves privada y publica. Si fuera el caso, la publica es la que tendrás que colocar en las opciones Peer del router/servidor
Addresses: 192.168.30.2/32 # Coloca la ip que quieres/permites tome el movil cuando se conecte.
DNS Server: 192.168.30.1 # Opcional. Especifica el DNS donde hará las consultas. Pon la primera ip del rango de la VPN, que será la del router. Si no pones nada utilizarás la que tenga el equipo cliente: Ej en android 8.8.8.8 (Por eso pongo forzado DNS en Router)
En Peer:
Public Key # La clave pública del router/servidor
Allowed IPs: 0.0.0.0/0 # 0.0.0.0/0 para tunelizar todo el tráfico o solo con las redes que quieras que enrute (añade el servidor dns si lo vas a usar) ej: 192.168.1.0/24, 192.168.30.1/32
Endpoint: PubIP:8080 # La ip:puerto publicos del router. (Debes tenerlo abierto en el firewall del router. Network -> Firewall -> Traffic Rules)
Pre-shared Key: Opcional # Añade robustez extra con equipos cuanticos en mente (Es opcional, así que solo si la configuraste en Peer del Servidor/Router)
Keepalive: Opcional # Cada cuando envia señal para saber si al conexión está viva. Por defecto 40 (segundos). Si la conexión es estable, puedes bajarla un poco, por ejemplo a 30.
------------------------------------------------------
Forzado DNS (Opcional):
En Firewall/"Custom Rules" establezco dos entradas para forzar a que todas las consultas DNS que realicen los clientes conectados al router.
Esto es interesante para que todos los dispositivos pasen por el DNS del Router con Adblock, Dnscrypt-proxy, DNS over TLS o lo que tengas.
De esta manera, aunque las aplicaciones, por el ejemplo del movil, tengan hardcodeado el DNS hacia 8.8.8.8, pasarán forzadas por el router
Adblock te crea una regla pero solo lo aplica a una interfaz y en el firewall tendrías que crear una regla por interfaz, con estas dos lineas se aplica a todas de golpe.
iptables -w 9 -t nat -I PREROUTING ! -i eth1.832 -p udp -m multiport --dports 53,853,5353 -j REDIRECT -m comment --comment "Forzado DNS udp 53,853,5353"
iptables -w 9 -t nat -I PREROUTING ! -i eth1.832 -p tcp -m multiport --dports 53,853,5353 -j REDIRECT -m comment --comment "Forzado DNS tcp 53,853,5353"
# Donde pone eth1.832 debes cambiarlo por la interfaz o puente que te da acceso a internet.
Al hacer esto, si tienes alguna zona con INPUT en Reject (lo ideal en zonas invitados), tendrás que crear una regla en Custom Rules para que el router acepte peticiones al udp 53 en esa zona, sino no habrá salida a internet
------------------------------------------------------
Incidencias:
Primeramente coloqué la ip del servidor y clientes con /32. Funcionaba todo menos las consultas DNS.
El problema era dnsmask y la opcion localservice que tenía a '1' (Fichero /etc/config/dhcp).
option localservice '1' # Hace que dnsmask solo responda a ips y subnets del router.
Al poner en wireguard al servidor con /32, no contempla a los peers o clientes como local subnet y no atenderá sus consultas dns
Basta con poner la ip del interface/servidor de wireguard con /24 o bien establecer option localservice '0'
Preferí establecer /29 en el servidor, ya que no tendré tantos clientes y dejar la opcion localservice '1'
------------------------------------------------------
Para conectarte y acceder a otra red a través de Wireguard, crearás una interface y asignarás a esta a una zona firewall.
###Instalar:
opkg install luci-app-wireguard # Te instalará todos los requisitos y luego debes reiniciar para que cargue el nuevo kernel que habilita Wireguard
###Configurar:
Crearás un nuevo interface de tipo wireguard configurando las claves y pocos parámetros más, pero lo más fácil es que copies adaptando a tu gusto el siguiente ejemplo en el fichero /etc/config/network.
config interface 'VPN_2_OFI' # El nombre del interface que creara como cliente VPN Wireguard
option proto 'wireguard'
option private_key 'PrivKeyCli' # Clave privada del usuario con el que te quieres conectar al servidor Wireguard
list addresses 'IP/32' # Ip permitida y que tomará el usuario con el que te quieres conectar al servidor Wireguard
option delegate '0' # En mi caso no quiero usar ipv6 (motivos en seccion Firewall, ipv6)
option auto '1' # Si no quieres que conecte automaticamente, ponlo a 0
config wireguard_VPN_2_OFI
option public_key 'PubKeyServer' # Llave publica del servidor donde voy a conectarme'
option preshared_key 'PresharedKey # Si la tienes, establece la preshared key del servidor donde te conectas. Si no tienes, puedes eliminar esta linea
list allowed_ips '192.168.30.3/24' # Ips que permitira tomar (debe estar al menos obligada la ip que esta configurada como permitida para ti en el lado servidor)
list allowed_ips '192.168.2.1/24' # Con route_allowed_ips a 1 es a estas redes donde encaminara el trafico hacia esta interface/vpn
list allowed_ips '10.10.10.0/24' # Si quisieras encaminar todo el trafico hacia la vpn, puedes poner 0.0.0.0 (Todo tu tráfico saldría y Navegarás a través de la red VPN)
option route_allowed_ips '1' # Crea las rutas en el router para encaminar el trafico a traves de la VPN hacia las redes definidas en list allowed_ips
option endpoint_host 'lalala.publica.com' # Ip publica del servidor donde te vas a conectar
option endpoint_port '666' # Puerto del servidor donde te vas a conectar
option persistent_keepalive '30' # Para mantener la sesión abierta y reconectar cuando detecte que esta caida (no es necesario)
option description 'Wireguard_Ofi_Full.test' # Cuando tienes muchas vpns o peers es de ayuda para saber con quien trata
En el firewall crearás una zona para asignar a la vpn o puedes asociarla a otra zona que ya tuvieras.
En mi caso tengo también un cliente VPN con OpenVPN y tengo las dos interfacez en la misma zona. Ejemplo de lo que tendría en /etc/config/firewall
config zone
option name 'VPN_CLI_Job'
option input 'REJECT'
option output 'ACCEPT'
option forward 'REJECT'
option network 'VPN_2_OFI VPN_2_OFIb' # La zona firewall la tengo asignada a dos interfaces/clientes vpn, las cuales son para lo mismo y solo una activa con la otra parada como backup
option family 'ipv4'
option mtu_fix '1'
option masq '1' # Habilitas NAT. De manera que cuando te conectas a la red VPN destino, los equipos destino te veran como la ip que te asigna como cliente vpn.
list masq_src '192.168.1.10' # Puedes limitar a que haga nat solo a una o varias ips en vez de todo tu rango. De esta manera limitaras el acceso VPN a solo unos equipos
list masq_src '192.168.1.11' # Realmente estos equipos tendrían acceso, pero sin nat las redes por defecto no se van a ver y conectar correctamente
list masq_dest '192.168.2.0/24' # Habilita NAT cuando se desea acceder a la red destino especificada (debe cumplirse list masq_src hacia list masq_dest)
list masq_dest '10.10.10.0/24'
Claves:
Deberías tener la clave publica del servidor donde te quieras conectar y como opcional la preshared key.
Debes tener también la clave privada del usuario con el que te vas a conectar. El servidor tendrá configurado en su lado tu clave pública. Por lo que o bien el servidor ha generado las claves y te ha dado tu pública, o bien has generado tu tu privada y debes enviarles tu pública para que generen en su lado el servidor Wireguard al que te conectarás.
wg genkey | tee wg_privatekey.user1 | wg pubkey > wg_publickey.user1 # Graba en la carpeta donde estes tantnto la clave privada como la publica para user1
###Incidencias:
Los ficheros de claves deben tener permisos 600 (solo rw para propietario) Ojo con el solapamiennto de rangos ip. Si en el router ya tienes una red/interface del mismo rango de la que te daría la vpn a la que te vas a conectar, puede generar problemas de rutas.
Al crear VPN, la red origen y la red destino deben ser diferentes. Pues si las dos redes fueran 192.168.1.0/24, tu equipo no buscará al gateway/vpn si cree que el destino está en tu misma red.
No se encuentra en los repositorios. Puedes instalarlo de varias maneras, las dos más fáciles son:
La url de darkpro puedes sacarla de: http://www.desipro.de/openwrt/repo/18/targets/ipq806x/generic/packages/
Una vez instalado, puede que ya te la haya seleccionado pero puedes cambiar el tema en: System -> System -> Language and Style
Puede dar la impresión que va algo más lento, esto se debe a que el tema por defecto muestra lo que va cargando parcialmente hasta que finaliza la carga, con darkpro muestra un icono de carga en vez de mostrar lo que va cargando hasta que finaliza la carga por completo, momento en que mostrará la web cargada por completo.
En System -> Software -> Filter: luci*-es
Por consola con opkg update && opkg list luci*-es
Instala luci-i18n-base-es y todos las tools que quieras en castellano.
Para otro idioma, cambia -es por el que quieras. Para ver los disopnibles: opkg list luci-i18n-base-*
BackupWRT
) [ -d /etc/config/Backup ] || mkdir /etc/config/Backup
cd /etc/config/Backup
opkg list-installed > list-installed.`date -I` # No olvides sacarlo fuera del router por si acaso
sysupgrade -b SysBackup_`date -I`.tar.gz # No olvides sacarlo fuera del router por si acaso
# Para que haga backup de rutas o ficheros adicionales, edita /etc/sysupgrade.conf
# Opcional (Copiar todos los ficheros de configuración dentro de /etc/config/old/ añadiendoles la fecha como extensión)
# [ -d /etc/config/old ] || mkdir /etc/config/old
# find /etc/config/ -maxdepth 1 -type f -print | grep -v -e "opkg" -e "\." | awk '{ print "cp "$1" "$1".$(date +%Y%m%d)"}' | sh
# mv /etc/config/*.202????? /etc/config/old/
Haz el backup por Luci(web) y así tendrás en el backup descargado el listado y backup de configuración hecho con sysupgrade, ya que lo hemos dejado en /etc/config/Backup (ocupan muy poco)
Ten presente que de la 18.06.5 a la 19.07.X hay cambios en algunos ficheros de configuración. Por ejemplo wireless y adblock y si recuperas paquetes de la 18.06.6 ten en cuenta que esta lleva luci-compat.
cd /tmp/
# Algunos enlaces directos de routers que he flasheado (Recomendados los Linksys WRT a partir del WRT1900acs y para wifi los que tengan chips wifi Atheros)
wget https://downloads.openwrt.org/releases/19.07.8/targets/mvebu/cortexa9/openwrt-19.07.8-mvebu-cortexa9-linksys_wrt32x-squashfs-sysupgrade.bin # Linksys WRT32X v19.07.8
wget https://downloads.openwrt.org/releases/21.02.2/targets/mvebu/cortexa9/openwrt-21.02.2-mvebu-cortexa9-linksys_wrt1900acs-squashfs-sysupgrade.bin # Linksys WRT1900acs v21.02.2
wget https://downloads.openwrt.org/releases/21.02.2/targets/bcm63xx/generic/openwrt-21.02.2-bcm63xx-generic-comtrend_ar-5387un-squashfs-sysupgrade.bin # Comtrend AR5387un v21.02.2
wget https://downloads.openwrt.org/releases/21.02.2/targets/ramips/mt7621/openwrt-21.02.2-ramips-mt7621-xiaomi_mi-router-3g-squashfs-sysupgrade.bin # Xiaomi Mi3G v21.02.2
wget https://downloads.openwrt.org/releases/21.02.2/targets/ramips/mt7621/openwrt-21.02.2-ramips-mt7621-xiaomi_mi-router-ac2100-squashfs-sysupgrade.bin # Xiaomi Mi Router AC2100 v21.02.2
wget https://downloads.openwrt.org/releases/21.02.2/targets/sunxi/cortexa53/openwrt-21.02.2-sunxi-cortexa53-xunlong_orangepi-zero-plus-ext4-sdcard.img.gz # Orange Pi Zero Plus v21.02.2
wget https://downloads.openwrt.org/releases/21.02.2/targets/sunxi/cortexa53/openwrt-21.02.2-sunxi-cortexa53-xunlong_orangepi-zero-plus-squashfs-sdcard.img.gz # Orange Pi Zero + v21.02.2
wget https://downloads.openwrt.org/releases/21.02.2/targets/ath79/nand/openwrt-21.02.2-ath79-nand-glinet_gl-ar750s-nor-squashfs-sysupgrade.bin # GL.iNet GL-AR750S v21.02.2
wget https://downloads.openwrt.org/releases/21.02.2/targets/ath79/nand/openwrt-21.02.2-ath79-nand-glinet_gl-ar750s-nor-nand-squashfs-sysupgrade.bin # GL.iNet GL-AR750S v21.02.2
sysupgrade -c openwrt-19.07.8-mvebu-cortexa9-linksys_wrt32x-squashfs-sysupgrade.bin # Con -c te guarda los ficheros que hayas modificado en /etc/ # Se flashea y reinicia, por lo que tendrás que conectarte de nuevo por ssh
Descarga el firmware para tu arquitectura desde aquí: https://downloads.openwrt.org/releases/19.07.8/targets/
Si no sabes cual es tu arquitectura, puedes consultar en el listado de equipos soportados, pulsando su correspondiente “Device Techdata” en https://openwrt.org/toh/start
Los ficheros squashfs-sysupgrade son para actualizar equipos que ya tienen OpenWRT instalado. Para flasheo completo ha de ser el que ocupe más espacio.
A partir de la versión 19.07.0 los equipos de la arquitectura ar71xx pasarán a estar en la plataforma ath79
Si tienes wget-nossl no podrás descargar por https. Lanza: cd /tmp && opkg update && opkg download wget && opkg remove wget-nossl –force-depends;opkg install wget
Tmb puede que te falte: opkg install ca-bundle ca-certificates libustream-mbedtls
Asegurate que tengas espacio extra. Borra el /etc/config/Backup/SysBackup_date -I
.tar.gz, al generarlo antes de descargar el backup desde luci, ya lo tienes en tu equipo.
opkg update # && opkg list-upgradable | cut -d " " -f 1 | xargs opkg upgrade # Con la 18.06.2 la primera vez fallaba. Lo lanzo una segunda vez y todo ok. Pero ya solo lanzo el update.
cd /etc/config/Backup
#opkg remove wpad-basic && opkg install wpad # Solo si tenías wpad completo. Por ejemplo para 802.11w o 801.11r. Y en en OpenWRT < 19 wpad-basic= wpad-mini
cat list-installed.2020-06-20 | cut -d " " -f 1 | xargs opkg install # Te fallarán los que hayas instalado fuera de los repositorios oficiales. Ej: wrtbwmon y luci-wrtbwmon
#cd /tmp/ && opkg download dnsmasq-full && opkg remove dnsmasq && opkg install dnsmasq-full_* # Solo si tenías dnsmasq-full. Por ejemplo para DNSSEC.
reboot
OpenWRT trae un modo recovery que puede ayudarte si las has cagado trasteando.
Apaga el router y enciendelo de nuevo mientras aprietas el botón de reset del router durante unos 10/12 segundos (generalmente hasta que parpadea rápidamente la luz)
El router se colocará con la ip 192.168.1.1 y servidor ssh abierto sin contraseña. Al acceder, podrás lanzar:
* firstboot # Resetea y deja los valores de fabrica (Cuidadín, se cepilla todo y lo deja limpito)
* mount_root # Montará tu partición con los ficheros de configuracion para que puedas editarlos. Lo tendrás en /overlay/upper/etc/config/
* passwd # Podrás reestablecer la contraseña para acceder al router (Debes primero lanzar mount_root)
Nota: Si ves que vas a tener que recuperarlo más veces. Sal con “reboot;exit” para que no te deje la sesión colgada.