Bypass selectivo de bloqueos en enrutadores con firmware Padavan y Keenetic OS

Se ha publicado una gran cantidad de instrucciones con varias opciones para evitar el bloqueo de recursos de Internet. Pero el tema no pierde relevancia. Aún más a menudo, se escuchan iniciativas a nivel legislativo para bloquear artículos sobre métodos para evitar las cerraduras. Y hubo rumores de que Roskomnadzor recibirá otro paquete de dinero de los contribuyentes por "mejores" cerraduras. Los usuarios experimentados no aprenderán nada nuevo o útil del artículo. Pero otros recibirán instrucciones paso a paso ya preparadas para una derivación selectiva simple y efectiva de las cerraduras en los enrutadores populares con firmware Padavan y Keenetic.



Contenido



Introduccion


Usé la opción de bypass de bloqueo Zolg durante unos dos años. Muchas instrucciones en la red se basan en ella. El mío incluido.

Todo estaba bien, pero "lo mejor siempre es enemigo de lo bueno". En primer lugar, algunos programas nuevos se han vuelto demasiado "inteligentes" y resolverán dominios usando sus propios métodos, sin pasar por el servidor DNS del enrutador. Esto no permite que dnsmasq en el enrutador agregue la dirección al conjunto de ipset para desbloquear y conduce a un resultado lógico: el recurso permanece bloqueado. En Android 9, soporte nativo para DNS sobre TLS, es decir Este método de evitar el bloqueo deja de funcionar (si el otro dispositivo no ha accedido a dnsmasq antes). En segundo lugar, actualizar toda la lista de dominios desde antizapret conduce a resultados impredecibles cada vez. La lista puede incluir dominios que no están realmente bloqueados y cuya operación es importante a través del canal principal. Debe estar constantemente alerta y editar los archivos generados con sus manos. En tercer lugar, estoy cansado de "llevar" una enorme lista de dominios con decenas de miles de casinos y similares, que simplemente no son necesarios. Con el tiempo, me di cuenta de que solo necesitaba una pequeña lista específica de recursos bloqueados.

Así que durante un año he estado usando un método de desbloqueo ligeramente modificado, con el que estoy completamente satisfecho:

  • Simplicidad y facilidad de control (después de la configuración).
  • Control total sobre los recursos que necesita para desbloquear.
  • Requisitos mínimos para los recursos del procesador y la RAM del enrutador.
  • Amplia cobertura de matices al evitar las cerraduras.

Es importante tener en cuenta que mi opción no está pensada para el caso en que necesite desbloquear cientos y miles de dominios. Porque cuando se inicia el enrutador, se resuelve cada dominio de la lista dada. Cuantos más dominios haya en la lista, mayor será la inicialización de muchos ipset para desbloquear.

La base para evitar las cerraduras es la misma: la red Tor. Su uso se debe a dos factores simples: de forma gratuita, y la probabilidad de que Tor sea bloqueado en Rusia es cercana a cero, a diferencia de cualquier servicio VPN. Tor es la base del narcotráfico en Rusia desde el medio hasta el fondo. El bloqueo de Tor conducirá a la búsqueda de nuevas herramientas para el mercado y a una disminución del anonimato, lo que implicará la activación exitosa del trabajo de las agencias locales de aplicación de la ley. En última instancia, esto, como un virus, comenzará a afectar negativamente el enlace superior. Dadas las últimas noticias sorprendentes sobre la relación de altos funcionarios del gobierno con el tráfico mundial de drogas hacia Rusia, el bloqueo de Tor en Rusia es solo un tabú, aunque es trivial. Ni Roskomnadzor, no importa cuántos miles de millones se asignen a este departamento, ni un solo tribunal en Rusia tiene permiso "desde arriba" para bloquear Tor. Y ni siquiera sorprende a nadie ni asusta a nadie, a pesar de que Rusia simplemente se está ahogando en drogas (cualquier alumno sabe lo que va a hacer, y después de 30 minutos es realmente posible en cualquier ciudad con una población de 10 mil personas obtener prácticamente cualquier droga de forma gratuita en cualquier cantidad, una verdad tan malvada de la vida). En el modo actual, la probabilidad de bloquear la red Tor es menor que la probabilidad de bloquear el sitio del museo Hermitage.

Las instrucciones dadas son fáciles de adaptar para enrutadores con OpenWrt. Además, pequeños cambios hacen que sea fácil reemplazar Tor con OpenVPN.

¿Cómo logrará evitar los bloqueos después de la configuración?


Todo es muy sencillo. Tiene el archivo /opt/etc/unblock.txt, una lista simple para desbloquear. Puede desbloquear un dominio, dirección IP, rango de direcciones o CIDR. Una línea, un elemento. Se permiten líneas vacías, y puede usar el carácter # al comienzo de la línea para ignorar.

Aquí hay un ejemplo de mi archivo personal
###- rutracker.org rutor.info rutor.is mega-tor.org kinozal.tv nnm-club.me nnm-club.ws tfile.me tfile-home.org tfile1.cc megatfile.cc megapeer.org megapeer.ru tapochek.net tparser.org tparser.me rustorka.com uniongang.tv fast-torrent.ru ###    rezka.ag hdrezka.ag hdrezka.me filmix.co filmix.cc seasonvar.ru ### lib.rus.ec flibusta.is flibs.me flisland.net flibusta.site ### telegram.org tdesktop.com tdesktop.org tdesktop.info tdesktop.net telesco.pe telegram.dog telegram.me t.me telegra.ph web.telegram.org desktop.telegram.org updates.tdesktop.com venus.web.telegram.org flora.web.telegram.org vesta.web.telegram.org pluto.web.telegram.org aurora.web.telegram.org 149.154.160.0/20 91.108.4.0/22 91.108.8.0/22 91.108.12.0/22 91.108.16.0/22 91.108.56.0/22 109.239.140.0/24 67.198.55.0/24 ### 7-zip.org edem.tv 4pna.com 2019.vote ### Tor check.torproject.org ###   IP ( #   ) #195.82.146.214 ###   CIDR ( #   ) #103.21.244.0/22 ###    ( #   ) #100.100.100.200-100.100.100.210 


Después de editar este archivo, simplemente ejecute el comando para aplicar la nueva configuración:

 unblock_update.sh 

Todos los recursos de unblock.txt se desbloquean sin tener que reiniciar el enrutador.

Principio de funcionamiento


  • La inicialización del enrutador crea un conjunto vacío de direcciones IP de IPset llamadas desbloqueo.
  • Se agrega al firewall una regla para redirigir todos los paquetes con destinos desde desbloquear al servicio Tor.
  • El servicio Tor se inicia en modo proxy transparente.
  • Se inicia el script especial unblock_ipset.sh, que resuelve todos los dominios de unblock.txt y agrega sus direcciones IP al conjunto de desbloqueo. Las direcciones IP, rangos y CIDR de este archivo también se agregan para desbloquear.
  • Dnsmasq se inicia con un archivo de configuración adicional, unblock.dnsmasq, que indica la adición de direcciones IP de dominio de unblock.txt al conjunto de desbloqueo al resolver.
  • cron ejecuta unblock_ipset.sh con cierta frecuencia para compensar parcialmente los posibles casos con matices.
  • Si es necesario, todos los dominios de unblock.txt (y solo ellos) se resuelven a través de dnscrypt-proxy si el proveedor filtra DNS.

Configurar un enrutador Padavan


Debe tener un enrutador con firmware Padavan instalado y un administrador de paquetes Entware ya configurado. En Windows, puede usar el cliente PuTTY para conectarse al enrutador a través de SSH.

Asegúrese de estar utilizando Entware, no el Entware-ng heredado. Ver el contenido de la carpeta / opt / var / opkg-lists. Habrá un archivo entware o entware-ng. En el segundo caso, debe actualizar el firmware Padavan de su enrutador a la última versión y reinstalar el administrador de paquetes Entware. Solo entonces proceda con las instrucciones paso a paso.

Como mostraron las revisiones, principalmente aquellos que tienen Entware configurado incorrectamente inicialmente (es decir, los scripts de init.d no se cargan) en la memoria interna del enrutador. Si tiene Xiaomi Mi Router 3 o 3G, y no está seguro de que Entware en su memoria interna funcione correctamente (inicio automático), simplemente configure todo de nuevo. Toma PROMETHEUS. Actualiza el script (1). Actualice el código fuente (2). Recopile y actualice el firmware más reciente (4). Restablezca la configuración del firmware (NVRAM y almacenamiento de archivos) - Avanzado> Administración> Configuración. Configure el acceso a Internet en el enrutador y habilite SSH. Realice en PROMETHEUS Firmware> Formateo RWFS. Elija Avanzado> Administración> Configuración> Montar sistema de archivos en la sección R / W> UBIFS. Reinicia el enrutador. Todos los scripts de inicio de Entware actuales de la memoria interna se registrarán automáticamente y todo funcionará como un reloj.

Para las pruebas, utilicé el popular Xiaomi Mi Router 3G (Entware está instalado en la memoria interna) con el último firmware: 32a93db. Todo funcionará incluso en el legendario bebé WT3020 AD / F / H por $ 10.



1. Instalar el software necesario en el enrutador


 opkg update opkg install mc tor tor-geoip bind-dig cron 

mc : administrador de archivos de Midnight Commander. Solo es necesario debido al conveniente editor mcedit. Si está acostumbrado a usar otro editor de texto, entonces no se puede instalar mc.
tor - Servicio de tor.
tor-geoip - base de datos geo-IP para Tor.
bind-dig : cliente DNS (análogo de nslookup y host).
cron - programador de tareas.

2. Inicialice ipset, cree múltiples direcciones IP de desbloqueo (start_script.sh)


Conecte los módulos necesarios y cree un conjunto de direcciones vacío con el nombre desbloqueado cuando se inicie el enrutador. Para hacer esto, abra el archivo /etc/storage/start_script.sh en el editor:

 mcedit /etc/storage/start_script.sh 

Añadir al final:

 modprobe ip_set modprobe ip_set_hash_ip modprobe ip_set_hash_net modprobe ip_set_bitmap_ip modprobe ip_set_list_set modprobe xt_set ipset create unblock hash:net 

Para pegar desde el búfer, use Mayús + Insertar, guarde - F2, salga - F10.



Si lo desea, puede editar el archivo start_script.sh a través de la interfaz web del enrutador: "Avanzado"> "Personalización"> "Scripts"> "Ejecutar antes de inicializar el enrutador". Después de editar, haga clic en "Aplicar".



3. Configuración de Tor


Elimine el contenido del archivo de configuración Tor:

 cat /dev/null > /opt/etc/tor/torrc 

Abra el archivo de configuración de Tor:

 mcedit /opt/etc/tor/torrc 

Pegue (Mayús + Insertar) el contenido:

 User admin PidFile /opt/var/run/tor.pid ExcludeExitNodes {RU},{UA},{AM},{KG},{BY} StrictNodes 1 TransPort 192.168.0.1:9141 ExitRelay 0 ExitPolicy reject *:* ExitPolicy reject6 *:* GeoIPFile /opt/share/tor/geoip GeoIPv6File /opt/share/tor/geoip6 DataDirectory /opt/var/lib/tor 

Si es necesario, reemplace 192.168.0.1 con la dirección interna de su enrutador (LAN). Breve descripción de la configuración:

  • Excluir nodos de salida: Rusia, Ucrania, Armenia, Kirguistán, Bielorrusia.
  • Cuelgue un proxy transparente en la dirección 192.168.0.1, puerto 9141.
  • Negarse a ser un punto de salida.

4. La lista de dominios (y no solo) para evitar el bloqueo (unblock.txt)


unblock.txt es una lista simple para desbloquear. Puede desbloquear un dominio, dirección IP, rango o CIDR. Una línea, un elemento. Las líneas vacías (incluidos los espacios y las pestañas) se ignoran. Puede usar el carácter # al comienzo de una línea para ignorarlo.

Cree el archivo /opt/etc/unblock.txt :

 mcedit /opt/etc/unblock.txt 

Cada fila puede contener un nombre de dominio, dirección IP, rango o CIDR. Puede usar el carácter # para comentar líneas.

Aquí hay un ejemplo de mi archivo personal
 ###- rutracker.org rutor.info rutor.is mega-tor.org kinozal.tv nnm-club.me nnm-club.ws tfile.me tfile-home.org tfile1.cc megatfile.cc megapeer.org megapeer.ru tapochek.net tparser.org tparser.me rustorka.com uniongang.tv fast-torrent.ru ###    rezka.ag hdrezka.ag hdrezka.me filmix.co filmix.cc seasonvar.ru ### lib.rus.ec flibusta.is flibs.me flisland.net flibusta.site ### telegram.org tdesktop.com tdesktop.org tdesktop.info tdesktop.net telesco.pe telegram.dog telegram.me t.me telegra.ph web.telegram.org desktop.telegram.org updates.tdesktop.com venus.web.telegram.org flora.web.telegram.org vesta.web.telegram.org pluto.web.telegram.org aurora.web.telegram.org 149.154.160.0/20 91.108.4.0/22 91.108.8.0/22 91.108.12.0/22 91.108.16.0/22 91.108.56.0/22 109.239.140.0/24 67.198.55.0/24 ### 7-zip.org edem.tv 4pna.com 2019.vote ### Tor check.torproject.org ###   IP ( #   ) #195.82.146.214 ###   CIDR ( #   ) #103.21.244.0/22 ###    ( #   ) #100.100.100.200-100.100.100.210 


5. Un script para completar un conjunto de direcciones IP desbloqueadas de una lista de dominios dada (unblock_ipset.sh)


Cree el script /opt/bin/unblock_ipset.sh :

 mcedit /opt/bin/unblock_ipset.sh 

Pegue (Mayús + Insertar) el contenido:

 #!/bin/sh until ADDRS=$(dig +short google.com @localhost) && [ -n "$ADDRS" ] > /dev/null 2>&1; do sleep 5; done while read line || [ -n "$line" ]; do [ -z "$line" ] && continue [ "${line:0:1}" = "#" ] && continue cidr=$(echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}') if [ ! -z "$cidr" ]; then ipset -exist add unblock $cidr continue fi range=$(echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}-[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}') if [ ! -z "$range" ]; then ipset -exist add unblock $range continue fi addr=$(echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}') if [ ! -z "$addr" ]; then ipset -exist add unblock $addr continue fi dig +short $line @localhost | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | awk '{system("ipset -exist add unblock "$1)}' done < /opt/etc/unblock.txt 

Dar derechos de ejecución:

 chmod +x /opt/bin/unblock_ipset.sh 

El script es bastante simple, esa es la esencia de su trabajo ... Estamos esperando que funcione la resolución de dominio de google.com (si esto no se hace, no se completará mucho desbloqueo cuando se inicie el enrutador, porque el enrutador aún estará en proceso de inicialización). Leemos las líneas en el archivo unblock.txt. Las líneas de lectura eliminan automáticamente espacios y pestañas al principio y al final. Salta las líneas vacías. Omita las líneas que comienzan con el carácter #. Estamos buscando en la línea CIDR. Si se encuentra CIDR, agréguelo para desbloquear. Estamos buscando en el rango de rango. Si se encuentra, agréguelo para desbloquear. Estamos buscando la dirección IP en la cadena. Si se encuentra IP, agréguelo para desbloquear. Resolvamos una línea a través de la excavación. Todas las direcciones IP del resultado se agregan para desbloquear.

6. Un script para generar un archivo de configuración dnsmasq adicional a partir de una lista dada de dominios (unblock_dnsmasq.sh)


Cree el script /opt/bin/unblock_dnsmasq.sh :

 mcedit /opt/bin/unblock_dnsmasq.sh 

Pegue (Mayús + Insertar) el contenido:

 #!/bin/sh cat /dev/null > /opt/etc/unblock.dnsmasq while read line || [ -n "$line" ]; do [ -z "$line" ] && continue [ "${line:0:1}" = "#" ] && continue echo $line | grep -Eq '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' && continue echo "ipset=/$line/unblock" >> /opt/etc/unblock.dnsmasq done < /opt/etc/unblock.txt 

Dar derechos de ejecución:

 chmod +x /opt/bin/unblock_dnsmasq.sh 

El guión es bastante simple, esa es la esencia de su trabajo ... Leemos secuencialmente las líneas de /opt/etc/unblock.txt. Las líneas de lectura eliminan automáticamente espacios y pestañas al principio y al final. Salta las líneas vacías. Salta las líneas que comienzan con #. Omitimos las líneas que contienen la dirección IP (IP, rango, CIDR), es decir solo nos interesan las cadenas con nombres de dominio. En el archivo /opt/etc/unblock.dnsmasq agregamos líneas de la forma "ipset = / domain_name / unblock". Esto significa que después de determinar las direcciones IP de un dominio en particular, se agregarán automáticamente al conjunto de desbloqueo.

Asegúrese de ejecutar el script para generar el archivo unblock.dnsmasq:

 unblock_dnsmasq.sh 

Verifique que se haya creado el archivo unblock.dnsmasq:

 cat /opt/etc/unblock.dnsmasq 

7. El script para la actualización forzada manual del sistema después de editar la lista de dominios (unblock_update.sh)


Cree el script /opt/bin/unblock_update.sh :

 mcedit /opt/bin/unblock_update.sh 

Pegue (Mayús + Insertar) el contenido:

 #!/bin/sh ipset flush unblock /opt/bin/unblock_dnsmasq.sh restart_dhcpd sleep 3 /opt/bin/unblock_ipset.sh & 

Dar derechos de ejecución:

 chmod +x /opt/bin/unblock_update.sh 

8. Script para completar automáticamente un conjunto de desbloqueo al iniciar un enrutador (S99unblock)


Cree el script /opt/etc/init.d/S99unblock :

 mcedit /opt/etc/init.d/S99unblock 

Pegue (Mayús + Insertar) el contenido:

 #!/bin/sh [ "$1" != "start" ] && exit 0 /opt/bin/unblock_ipset.sh & 

Dar derechos de ejecución:

 chmod +x /opt/etc/init.d/S99unblock 

9. Reenvío de paquetes con destinos desde desbloquear a Tor (post_iptables_script.sh)


Abra el archivo /etc/storage/post_iptables_script.sh en el editor:

 mcedit /etc/storage/post_iptables_script.sh 

Añadir al final:

 iptables -t nat -A PREROUTING -i br0 -p tcp -m set --match-set unblock dst -j REDIRECT --to-port 9141 



Si lo desea, puede editar el archivo post_iptables_script.sh a través de la interfaz web del enrutador: "Avanzado"> "Personalización"> "Scripts"> "Ejecutar después de reiniciar las reglas del firewall". Después de editar, haga clic en "Aplicar".



Puede agregar (esto es opcional) al mismo archivo para redirigir todas las solicitudes al puerto externo 53 hacia usted. Esto es necesario para que los clientes en la red local no utilicen servicios DNS de terceros. Las solicitudes pasarán por el servidor DNS normal.

 iptables -t nat -I PREROUTING -i br0 -p udp --dport 53 -j DNAT --to 192.168.0.1 iptables -t nat -I PREROUTING -i br0 -p tcp --dport 53 -j DNAT --to 192.168.0.1 

Si es necesario, reemplace 192.168.0.1 con la dirección interna de su enrutador (LAN).

10. Conexión de un archivo de configuración adicional a dnsmasq


Necesitamos conectar el archivo unblock.dnsmasq creado a dnsmasq. Para hacer esto, abra el archivo /etc/storage/dnsmasq/dnsmasq.conf en el editor:

 mcedit /etc/storage/dnsmasq/dnsmasq.conf 

Añadir al final:

 conf-file=/opt/etc/unblock.dnsmasq 

Si lo desea (esto es opcional), puede agregar un servidor adicional para resolución y confiabilidad:

 server=8.8.8.8 

Si lo desea, puede editar el archivo dnsmasq.conf a través de la interfaz web del enrutador: "Avanzado"> "LAN"> "Servidor DHCP"> "Archivo de configuración del usuario dnsmasq.conf". Después de editar, haga clic en "Aplicar".



11. Agregar una tarea a cron para actualizar periódicamente el contenido del conjunto de desbloqueo


Este es un seguro adicional en caso de que los programas / dispositivos usen su propio método de resolución y la dirección IP del dominio haya cambiado. Todo lo que necesita hacer es ejecutar el script unblock_ipset.sh con la frecuencia deseada. Por ejemplo, lanzaremos todos los días a las 6 de la mañana.

Reemplace el nombre raíz con admin en el archivo de configuración cron:

 sed -i 's/root/admin/g' /opt/etc/crontab 

Abra el archivo / opt / etc / crontab en el editor:

 mcedit /opt/etc/crontab 

Añadir al final:

 00 06 * * * admin /opt/bin/unblock_ipset.sh 

Si lo desea, puede comentar todas las demás tareas de plantilla. Así se verá su archivo crontab:



12. Reiniciando el enrutador


Ejecute el comando:

 reboot 

Después del reinicio, abra el sitio web check.torproject.org en su navegador (debe agregarse a unblock.txt). Si hiciste todo correctamente, verás la inscripción "Felicitaciones. Este navegador está configurado para usar Tor ".




Configurar un enrutador con Keenetic OS


Debe tener un enrutador Keenetic / Zyxel con Entware Package Manager (OPKG) ya configurado. Por ejemplo, aquí hay una lista de algunos enrutadores que admiten Entware: Keenetic II, Keenetic III, Extra, Extra II, Giga II, Giga III, Omni, Omni II, Viva, Ultra, Ultra II, Omni (KN-1410), Extra (KN -1710), Giga (KN-1010), Ultra (KN-1810), Viva (KN-1910), DSL (KN-2010), Duo (KN-2110). Las instrucciones para configurar Entware se pueden encontrar aquí (hasta 10 puntos).

Si anteriormente (con firmware bajo 2.07) ya agregó soporte para Entware, entonces asegúrese de estar usando el Entware-ng obsoleto .

Asegúrese de habilitar "Módulos del núcleo del subsistema Netfilter" - Configuración general> Cambiar conjunto de componentes. Si no está en la lista de disponibles, intente instalar primero el componente de protocolo IPv6. Si después de esto no aparece, intente sin él, pero es muy probable que no pueda desbloquear por rango y CIDR (porque no habrá soporte para el conjunto hash: net).



Para las pruebas, utilicé Keenetic Ultra (KN-1810) con el último firmware: 2.14.C.0.0-4.

Nota importante. Tendrá que deshabilitar el servidor DNS normal en el sistema, usaremos dnsmasq en su lugar. Perderá la capacidad de asignar servicios DNS (Yandex.DNS / SkyDNS / AdGuard DNS) individualmente para los clientes, pero puede usarlos globalmente a través de la configuración de dnsmasq si es necesario.

1. Instalar el software necesario en el enrutador


 opkg update opkg install mc tor tor-geoip bind-dig cron dnsmasq-full ipset iptables 

mc : administrador de archivos de Midnight Commander. Solo es necesario debido al conveniente editor mcedit. Si está acostumbrado a usar otro editor de texto, entonces no se puede instalar mc.
tor - Servicio de tor.
tor-geoip - base de datos geo-IP para Tor.
bind-dig : cliente DNS (análogo de nslookup y host).
cron - programador de tareas.
dnsmasq-full : servidor DNS.
ipset e iptables son utilidades de la consola ipset e iptables (pueden estar ya en el sistema y no son necesarias, las agregué por seguridad).

2. Inicialice ipset, cree múltiples direcciones IP de desbloqueo (100-ipset.sh)


Compruebe que su sistema de enrutador admite muchos hash: net (como resultó, no todos los enrutadores Keenetic lo tienen):

 ipset create test hash:net 

Si el equipo no dio ningún error o mensaje, entonces hay soporte y simplemente siga las instrucciones. De lo contrario (hay un error) en el siguiente script, debe reemplazar hash: net con hash: ip . En este caso, pierde la capacidad de desbloquear el rango y el CIDR.

Cree un conjunto de direcciones vacío llamado desbloqueo cuando se inicia el enrutador. Para hacer esto, cree el archivo /opt/etc/ndm/fs.d/100-ipset.sh :

 mcedit /opt/etc/ndm/fs.d/100-ipset.sh 

Pegue (Mayús + Insertar) el contenido:

 #!/bin/sh [ "$1" != "start" ] && exit 0 ipset create unblock hash:net -exist exit 0 

Para pegar desde el búfer, use Mayús + Insertar, guarde - F2, salga - F10.

Dar derechos de ejecución:

 chmod +x /opt/etc/ndm/fs.d/100-ipset.sh 

3. Configuración de Tor


Elimine el contenido del archivo de configuración Tor:

 cat /dev/null > /opt/etc/tor/torrc 

Abra el archivo de configuración de Tor:

 mcedit /opt/etc/tor/torrc 

Pegue (Mayús + Insertar) el contenido:

 User root PidFile /opt/var/run/tor.pid ExcludeExitNodes {RU},{UA},{AM},{KG},{BY} StrictNodes 1 TransPort 192.168.0.1:9141 ExitRelay 0 ExitPolicy reject *:* ExitPolicy reject6 *:* GeoIPFile /opt/share/tor/geoip GeoIPv6File /opt/share/tor/geoip6 DataDirectory /opt/var/lib/tor 

Si es necesario, reemplace 192.168.0.1 con la dirección interna de su enrutador (LAN). Breve descripción de la configuración:

  • Excluir nodos de salida: Rusia, Ucrania, Armenia, Kirguistán, Bielorrusia.
  • Cuelgue un proxy transparente en la dirección 192.168.0.1, puerto 9141.
  • Negarse a ser un punto de salida.

4. La lista de dominios (y no solo) para evitar el bloqueo (unblock.txt)


unblock.txt es una lista simple para desbloquear. Puede desbloquear un dominio, dirección IP, rango o CIDR. Una línea, un elemento. Las líneas vacías (incluidos los espacios y las pestañas) se ignoran. Puede usar el carácter # al comienzo de una línea para ignorarlo.

Cree el archivo /opt/etc/unblock.txt :

 mcedit /opt/etc/unblock.txt 

Cada fila puede contener un nombre de dominio, dirección IP, rango o CIDR. Puede usar el carácter # para comentar líneas.

Aquí hay un ejemplo de mi archivo personal
 ###- rutracker.org rutor.info rutor.is mega-tor.org kinozal.tv nnm-club.me nnm-club.ws tfile.me tfile-home.org tfile1.cc megatfile.cc megapeer.org megapeer.ru tapochek.net tparser.org tparser.me rustorka.com uniongang.tv fast-torrent.ru ###    rezka.ag hdrezka.ag hdrezka.me filmix.co filmix.cc seasonvar.ru ### lib.rus.ec flibusta.is flibs.me flisland.net flibusta.site ### telegram.org tdesktop.com tdesktop.org tdesktop.info tdesktop.net telesco.pe telegram.dog telegram.me t.me telegra.ph web.telegram.org desktop.telegram.org updates.tdesktop.com venus.web.telegram.org flora.web.telegram.org vesta.web.telegram.org pluto.web.telegram.org aurora.web.telegram.org 149.154.160.0/20 91.108.4.0/22 91.108.8.0/22 91.108.12.0/22 91.108.16.0/22 91.108.56.0/22 109.239.140.0/24 67.198.55.0/24 ### 7-zip.org edem.tv 4pna.com 2019.vote ### Tor check.torproject.org ###   IP ( #   ) #195.82.146.214 ###   CIDR ( #   ) #103.21.244.0/22 ###    ( #   ) #100.100.100.200-100.100.100.210 


5. Un script para completar un conjunto de direcciones IP desbloqueadas de una lista de dominios dada (unblock_ipset.sh)


Cree el script /opt/bin/unblock_ipset.sh :

 mcedit /opt/bin/unblock_ipset.sh 

Pegue (Mayús + Insertar) el contenido:

 #!/bin/sh until ADDRS=$(dig +short google.com @localhost) && [ -n "$ADDRS" ] > /dev/null 2>&1; do sleep 5; done while read line || [ -n "$line" ]; do [ -z "$line" ] && continue [ "${line:0:1}" = "#" ] && continue cidr=$(echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}') if [ ! -z "$cidr" ]; then ipset -exist add unblock $cidr continue fi range=$(echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}-[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}') if [ ! -z "$range" ]; then ipset -exist add unblock $range continue fi addr=$(echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}') if [ ! -z "$addr" ]; then ipset -exist add unblock $addr continue fi dig +short $line @localhost | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | awk '{system("ipset -exist add unblock "$1)}' done < /opt/etc/unblock.txt 

Dar derechos de ejecución:

 chmod +x /opt/bin/unblock_ipset.sh 

El script es bastante simple, esa es la esencia de su trabajo ... Estamos esperando que la resolución del dominio google.com funcione (si esto no se hace, no se completará mucho desbloqueo cuando se inicie el enrutador, porque el enrutador aún estará en proceso de inicialización). Leemos las líneas en el archivo unblock.txt. Las líneas de lectura eliminan automáticamente espacios y pestañas al principio y al final. Salta las líneas vacías. Omita las líneas que comienzan con el carácter #. Estamos buscando en la línea CIDR. Si se encuentra CIDR, agréguelo para desbloquear. Estamos buscando un rango en la cadena. Si se encuentra, agréguelo para desbloquear. Estamos buscando la dirección IP en la cadena. Si se encuentra IP, agréguelo para desbloquear. Resolvamos una línea a través de la excavación. Todas las direcciones IP del resultado se agregan para desbloquear.

6. Un script para generar un archivo de configuración dnsmasq adicional a partir de una lista dada de dominios (unblock_dnsmasq.sh)


Cree el script /opt/bin/unblock_dnsmasq.sh :

 mcedit /opt/bin/unblock_dnsmasq.sh 

Pegue (Mayús + Insertar) el contenido:

 #!/bin/sh cat /dev/null > /opt/etc/unblock.dnsmasq while read line || [ -n "$line" ]; do [ -z "$line" ] && continue [ "${line:0:1}" = "#" ] && continue echo $line | grep -Eq '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' && continue echo "ipset=/$line/unblock" >> /opt/etc/unblock.dnsmasq done < /opt/etc/unblock.txt 

Dar derechos de ejecución:

 chmod +x /opt/bin/unblock_dnsmasq.sh 

El guión es bastante simple. Leemos secuencialmente las líneas de /opt/etc/unblock.txt. Las líneas de lectura eliminan automáticamente espacios y pestañas al principio y al final. Salta las líneas vacías. Salta las líneas que comienzan con #. Omitir líneas que contienen una dirección IP (IP o CIDR), es decir solo nos interesan las cadenas con nombres de dominio. En el archivo /opt/etc/unblock.dnsmasq agregamos líneas de la forma "ipset = / domain_name / unblock". Esto significa que después de determinar las direcciones IP de un dominio en particular, se agregarán automáticamente al conjunto de desbloqueo.

Asegúrese de ejecutar el script para generar el archivo unblock.dnsmasq:

 unblock_dnsmasq.sh 

Verifique que se haya creado el archivo unblock.dnsmasq:

 cat /opt/etc/unblock.dnsmasq 

7. El script para la actualización forzada manual del sistema después de editar la lista de dominios (unblock_update.sh)


Cree el script /opt/bin/unblock_update.sh :

 mcedit /opt/bin/unblock_update.sh 

Pegue (Mayús + Insertar) el contenido:

 #!/bin/sh ipset flush unblock /opt/bin/unblock_dnsmasq.sh /opt/etc/init.d/S56dnsmasq restart /opt/bin/unblock_ipset.sh & 

Dar derechos de ejecución:

 chmod +x /opt/bin/unblock_update.sh 

8. Script para completar automáticamente un conjunto de desbloqueo al iniciar un enrutador (S99unblock)


Cree el script /opt/etc/init.d/S99unblock :

 mcedit /opt/etc/init.d/S99unblock 

Pegue (Mayús + Insertar) el contenido:

 #!/bin/sh [ "$1" != "start" ] && exit 0 /opt/bin/unblock_ipset.sh & 

Dar derechos de ejecución:

 chmod +x /opt/etc/init.d/S99unblock 

9. Reenvío de paquetes con destinos desde desbloquear a Tor (100-redirect.sh)


Para hacer esto, cree el archivo /opt/etc/ndm/netfilter.d/100-redirect.sh :

 mcedit /opt/etc/ndm/netfilter.d/100-redirect.sh 

Pegue (Mayús + Insertar) el contenido:

 #!/bin/sh [ "$type" == "ip6tables" ] && exit 0 if [ -z "$(iptables-save 2>/dev/null | grep unblock)" ]; then ipset create unblock hash:net -exist iptables -w -t nat -A PREROUTING -i br0 -p tcp -m set --match-set unblock dst -j REDIRECT --to-port 9141 fi exit 0 

Si usó hash: ip en el paso 2 y no hash: net , reemplace hash: net con hash: ip. De hecho, también duplicamos la función de crear un conjunto de desbloqueo a partir de 2 pasos. Esto es necesario para la seguridad, si los scripts de fs.d aún no han comenzado a ejecutarse, y los scripts netfilter.d ya se están ejecutando. Está bien si el desbloqueo ya se ha creado anteriormente, simplemente se ignorará el comando.

Puede agregar (esto es opcional) al mismo archivo para redirigir todas las solicitudes al puerto externo 53 hacia usted. Esto es necesario para que los clientes en la red local no utilicen servicios DNS de terceros. Las solicitudes pasarán por el servidor DNS normal. Antes de la última salida, agregue:

 if [ -z "$(iptables-save 2>/dev/null | grep "udp \-\-dport 53 \-j DNAT")" ]; then iptables -w -t nat -I PREROUTING -i br0 -p udp --dport 53 -j DNAT --to 192.168.0.1 fi if [ -z "$(iptables-save 2>/dev/null | grep "tcp \-\-dport 53 \-j DNAT")" ]; then iptables -w -t nat -I PREROUTING -i br0 -p tcp --dport 53 -j DNAT --to 192.168.0.1 fi 

Si es necesario, reemplace 192.168.0.1 con la dirección interna de su enrutador (LAN).

Dar derechos de ejecución:

 chmod +x /opt/etc/ndm/netfilter.d/100-redirect.sh 

10. Configurar dnsmasq y adjuntar un archivo de configuración adicional a dnsmasq


Elimine el contenido del archivo de configuración dnsmasq:

 cat /dev/null > /opt/etc/dnsmasq.conf 

Abra el archivo de configuración dnsmasq:

 mcedit /opt/etc/dnsmasq.conf 

Pegue (Mayús + Insertar) el contenido:

 user=nobody bogus-priv no-negcache clear-on-reload bind-dynamic listen-address=192.168.0.1 listen-address=127.0.0.1 min-port=4096 cache-size=1536 expand-hosts log-async conf-file=/opt/etc/unblock.dnsmasq server=8.8.8.8 

Si es necesario, reemplace 192.168.0.1 con la dirección interna de su enrutador (LAN).

11. Agregar una tarea a cron para actualizar periódicamente el contenido del conjunto de desbloqueo


Este es un seguro adicional en caso de que los programas / dispositivos usen su propio método de resolución y la dirección IP del dominio haya cambiado. Todo lo que necesita hacer es ejecutar el script unblock_ipset.sh con la frecuencia deseada. Por ejemplo, lanzaremos todos los días a las 6 de la mañana.

Abra el archivo / opt / etc / crontab en el editor :

 mcedit /opt/etc/crontab 

Añadir al final:

 00 06 * * * root /opt/bin/unblock_ipset.sh 

Si lo desea, puede comentar todas las demás tareas de plantilla. Así se verá su archivo crontab:



12. Deshabilitar el servidor DNS normal y reiniciar el enrutador


Conéctese a la CLI de Keenetic Router (puerto 23 para Telnet y 22 para SSH si el componente "Servidor SSH" se agrega al sistema).

Ejecute el comando:

 opkg dns-override system configuration save system reboot 

El servidor DNS integrado en el firmware se apagará, y en su lugar se usará dnsmasq de Entware. El enrutador, en el arranque, verifica si la carpeta opt está montada (¿hay una unidad flash USB / unidad con Entware). Si lo hay, no se utiliza un servidor DNS normal. Si no, úsalo. Es decirretirando la unidad flash y reiniciando el enrutador, todo funcionará para usted, como antes (antes de configurar).

Después del reinicio, abra el sitio web check.torproject.org en su navegador (debe agregarse a unblock.txt). Si hiciste todo correctamente, verás la inscripción "Felicitaciones. Este navegador está configurado para usar Tor ".




Métodos básicos para diagnosticar errores después de la configuración.


Si el cheque con el sitio check.torproject.org (debe agregarse a unblock.txt) pasa, pero el talón del proveedor continúa abriéndose para otros recursos (o no se abre), lo más probable es que el proveedor interfiera con el tráfico DNS, reemplazando las respuestas: usted Se necesita una solución adicional para filtrar las consultas DNS.

Si después de la configuración algo no funciona como debería, use comandos simples para determinar el paso del problema.

Mostrar el contenido del conjunto de desbloqueo:

 ipset list unblock 

Si el sistema informa que no existen tales conjuntos, el error se encuentra en el paso 2 o no activó el módulo Netfilter en el sistema (en el caso de Keenetic).

Si el conjunto resulta estar vacío, la secuencia de comandos unblock_ipset.sh no funcionó, que a su vez debería iniciarse con la secuencia de comandos de inicio S99unblock. Ejecute este script unblock_ipset.sh manualmente. Si el conjunto está lleno, entonces el error se encuentra en el paso 8. Si el script no se puede ejecutar (lo más probable es que esté esperando la resolución de google.com), entonces el error está en algún lugar del lado del servidor DNS, posiblemente en el paso 10 o 6.

Verifique la redirección en iptables :

 iptables-save 2>/dev/null | grep unblock 

Si no está allí, entonces el error está en el paso 9.

Si todos los sitios no funcionan, es decir, DNS no funciona, el error está en algún lugar en la etapa 6 o 10. Quizás, en la etapa 9.

Si todos los sitios de unblock.txt no funcionan (se excede el tiempo de espera), pero todos los demás funcionan, entonces el problema está en algún lado del lado de Tor, error en la etapa 3.


Bypass adicional para filtrar consultas DNS por parte del proveedor


Si un proveedor interfiere con el tráfico DNS al reemplazar las respuestas de los recursos bloqueados, es muy fácil evitarlo. Para esto usaremos dnscrypt-proxy. Si lo desea y tiene experiencia, puede reemplazar fácilmente dnscrypt con rechoncho (DNS sobre TLS).

dnscrypt solo se usará para los dominios enumerados en unblock.txt. Todas las demás consultas pasarán por servidores DNS regulares.

Si está seguro de que su proveedor no filtra las consultas DNS, entonces no necesita hacer esta configuración adicional.

Ya debería haber configurado la omisión de los bloqueos descritos anteriormente. La siguiente configuración es idéntica para Padavan y Keenetic OS.

Instale software adicional en el enrutador:

 opkg update opkg install dnscrypt-proxy2 

Abra el archivo de configuración dnscrypt-proxy:

 mcedit /opt/etc/dnscrypt-proxy.toml 

Busque los parámetros listen_addresses, fallback_resolver, cache y cámbielos:

 listen_addresses = ['127.0.0.1:9153'] fallback_resolver = '77.88.8.8:1253' cache = false 

77.88.8.8:1253 es la dirección del servidor Yandex DNS con un puerto no estándar. Es una copia de seguridad en caso de que dnscrypt-proxy tenga algún problema.

Ejecute dnscrypt-proxy:

 /opt/etc/init.d/S09dnscrypt-proxy2 start 

Asegúrese de que dnscrypt-proxy esté funcionando (debería ver una lista de direcciones IP en respuesta):

 dig +short google.com @localhost -p 9153 

Abra el script /opt/bin/unblock_ipset.sh en el editor :

 mcedit /opt/bin/unblock_ipset.sh 

Reemplace el contenido con:

 #!/bin/sh until ADDRS=$(dig +short google.com @localhost -p 9153) && [ -n "$ADDRS" ] > /dev/null 2>&1; do sleep 5; done while read line || [ -n "$line" ]; do [ -z "$line" ] && continue [ "${line:0:1}" = "#" ] && continue cidr=$(echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}') if [ ! -z "$cidr" ]; then ipset -exist add unblock $cidr continue fi range=$(echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}-[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}') if [ ! -z "$range" ]; then ipset -exist add unblock $range continue fi addr=$(echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}') if [ ! -z "$addr" ]; then ipset -exist add unblock $addr continue fi dig +short $line @localhost -p 9153 | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | awk '{system("ipset -exist add unblock "$1)}' done < /opt/etc/unblock.txt 

Hicimos un pequeño cambio: ahora cavar para resolver no utiliza un servidor DNS normal, sino dnscrypt-proxy con el puerto 9153.

Abra el script /opt/bin/unblock_dnsmasq.sh en el editor :

 mcedit /opt/bin/unblock_dnsmasq.sh 

Reemplace el contenido con:

 #!/bin/sh cat /dev/null > /opt/etc/unblock.dnsmasq while read line || [ -n "$line" ]; do [ -z "$line" ] && continue [ "${line:0:1}" = "#" ] && continue echo $line | grep -Eq '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' && continue echo "ipset=/$line/unblock" >> /opt/etc/unblock.dnsmasq echo "server=/$line/127.0.0.1#9153" >> /opt/etc/unblock.dnsmasq done < /opt/etc/unblock.txt 

Hicimos un pequeño cambio: ahora al generar el archivo unblock.dnsmasq, se agregan líneas adicionales como "server = / domain_name / 127.0.0.1 # 9153". Esto significa que la resolución de dominios de la lista ocurrirá a través de dnscrypt-proxy.

Ejecute unblock_update.sh:

 unblock_update.sh 

ListoTodas las configuraciones complicadas están atrás. Ahora solo editará la lista unblock.txt si es necesario, agregando o eliminando dominios o direcciones IP para desbloquearla, y activará los cambios realizados con el comando unblock_update.sh.

ACTUALIZACIÓN 01/04/2019 . A menudo vienen mensajes personales en el artículo con preguntas típicas. Contestaré aquí lo más común.

¿Cómo poner a disposición los sitios de la zona de dominio .onion?

En torrc agregue:
 VirtualAddrNetwork 10.254.0.0/16 DNSPort 127.0.0.1:9053 AutomapHostsOnResolve 1 

Para acceder a todos los dominios de la zona de cebolla, agregue dnsmasq.conf:
 server=/onion/127.0.0.1#9053 ipset=/onion/unblock 

Si no desea abrir el acceso a todos los dominios de la zona de cebolla, sino solo a ciertos dominios, agregue las siguientes entradas en dnsmasq.conf:
 server=/rutorc6mqdinc4cz.onion/127.0.0.1#9053 ipset=/rutorc6mqdinc4cz.onion/unblock server=/nnmclub5toro7u65.onion/127.0.0.1#9053 ipset=/nnmclub5toro7u65.onion/unblock server=/flibustahezeous3.onion/127.0.0.1#9053 ipset=/flibustahezeous3.onion/unblock 


¿Cómo evitar bloqueos para clientes de un servidor VPN que se ejecuta en un enrutador?

En torrc, reemplace la línea con TransPort con:
 TransPort 0.0.0.0:9141 

Agregue una redirección adicional con la interfaz necesaria (INTERFAZ - Interfaz de red VPN):
 iptables -t nat -A PREROUTING -i  -p tcp -m set --match-set unblock dst -j REDIRECT --to-port 9141 

Source: https://habr.com/ru/post/es428992/


All Articles