Aceleramos OpenVPN por $9.99* o integrando Orange Pi One en el router

Aceleramos OpenVPN por $9.99* o integrando Orange Pi One en el router

Algunos de nosotros no usamos Internet sin VPN por diversas razones: algunos necesitan una IP dedicada, y es más fácil y barato comprar un VPS con dos IP que adquirir una dirección del proveedor, otros quieren acceder a todos los sitios web y no solo a los permitidos en la Federación Rusa, y otros necesitan IPv6, pero su proveedor no lo ofrece...
La mayoría de las veces, la conexión VPN se establece en el propio dispositivo que se utiliza en un momento determinado, lo cual es bastante razonable si solo tienes una computadora y un teléfono, y los usas raramente al mismo tiempo. Sin embargo, si en tu red doméstica hay muchos dispositivos, o si hay algunos en los que no se puede configurar la VPN, sería más conveniente levantar un túnel directamente en el enrutador doméstico, para no tener que preocuparte por configurar cada dispositivo por separado.

Si alguna vez has instalado OpenVPN en tu enrutador, probablemente te hayas sorprendido negativamente por la velocidad de su funcionamiento. Los SoCs incluso de enrutadores económicos gestionan sin problemas el tráfico cercano a un gigabit, gracias a la transferencia de funciones de enrutamiento y NAT a un chip separado diseñado exclusivamente para esta tarea, mientras que los procesadores principales de tales enrutadores son bastante débiles, ya que casi no tienen carga. Este compromiso permite alcanzar altas velocidades de trabajo del enrutador y reducir significativamente el precio del dispositivo terminado; los enrutadores con procesadores potentes son varias veces más caros y se posicionan no solo como cajas para distribución de Internet, sino también como NAS, descargadores de torrents y sistemas multimedia domésticos.

Mi enrutador, TP-Link TL-WDR4300, no se puede considerar nuevo; el modelo salió a mediados de 2012 y cuenta con un procesador de 560 MHz de arquitectura MIPS32 74Kc, cuya potencia solo es suficiente para 20-23 Mb/s de tráfico cifrado a través de OpenVPN, lo que es bastante poco según los estándares de velocidad de Internet doméstico moderno.
¿Cómo podemos aumentar la velocidad del túnel cifrado? Mi enrutador es bastante funcional, soporta 3×3 MIMO y, en general, funciona bien, no me gustaría cambiarlo.
Dado que ahora es común hacer páginas web de 10 megabytes, escribir aplicaciones de escritorio en node.js y empaquetarlas en un archivo de 100 megabytes, y agregar potencia de cálculo en lugar de optimizar, haremos algo horrible: trasladaremos la conexión VPN a una potente placa única "computadora" Orange Pi One, que instalaremos en la carcasa del enrutador, sin ocupar los puertos de red y USB existentes, ¡todo por $9.99*!
* + envío, + impuestos, + para cerveza, + MicroSD.

OpenVPN

No se puede decir que el procesador del enrutador sea completamente débil: es capaz de cifrar y hashear datos con el algoritmo AES-128-CBC-SHA1 a una velocidad de 50 Mb/s, lo que es notablemente más rápido que cómo funciona OpenVPN, y el moderno cifrado en flujo CHACHA20 con hash POLY1305 alcanza incluso 130 megabits por segundo. ¿Por qué entonces la velocidad del túnel VPN es tan baja? Todo se debe al cambio de contexto entre el espacio de usuario y el espacio del núcleo: OpenVPN cifra el tráfico y se comunica con el mundo exterior en el contexto del usuario, mientras que la propia ruta ocurre en el contexto del núcleo. El sistema operativo tiene que cambiar constantemente de un lugar a otro para cada paquete recibido o transmitido, y esta operación no es rápida. Este problema es común a todas las aplicaciones VPN que operan a través de un controlador TUN/TAP, y no se puede decir que la baja velocidad se deba a una mala optimización de OpenVPN (aunque, por supuesto, hay áreas que necesitan ser revisadas). Ningún cliente VPN de espacio de usuario alcanza siquiera un gigabit con el cifrado desactivado en mi portátil, ¿qué se puede decir de los sistemas con un procesador débil?

Orange Pi One

La placa Orange Pi One de la compañía Xunlong es la oferta más atractiva en relación calidad-precio en este momento. Por $9.99* obtienes un sólido procesador ARM Cortex-A7 de cuatro núcleos, funcionando de manera estable a 1008 MHz, y claramente más potente que los competidores Raspberry Pi Zero y Next Thing C.H.I.P. en la misma categoría de precio. Sin embargo, aquí terminan las ventajas. La empresa Xunlong presta cero atención al software de sus placas, y al momento del lanzamiento de One no proporcionó ni siquiera un archivo de configuración de la placa, sin mencionar las imágenes listas. Allwinner, el fabricante del SoC, tampoco se preocupa mucho por el soporte de su producto. Les interesa únicamente la funcionalidad mínima en Android 4.4.4, lo que significa que tenemos que utilizar un núcleo de la versión 3.4 con parches de Android. Afortunadamente, hay entusiastas que recopilan distribuciones, modifican el núcleo y escriben código para dar soporte a las placas en el núcleo principal, es decir, hacen el trabajo del fabricante, logrando que este dispositivo funcione de manera aceptable. Para mis necesidades, elegí la distribución Armbian, que se actualiza con frecuencia y facilidad (los nuevos núcleos se instalan directamente a través del gestor de paquetes, en lugar de copiar archivos en una partición especial, como suele suceder con Allwinner), y además es compatible con la mayoría de los periféricos, a diferencia de los demás.

Router

Para evitar sobrecargar el débil procesador del enrutador con el cifrado y acelerar nuestra conexión VPN, podemos delegar esta tarea a un procesador más potente, el Orange Pi, conectándolo al enrutador de alguna manera. Se me ocurre conectarlo ya sea por Ethernet o por USB; ambos estándares son compatibles con ambos dispositivos, pero no quería ocupar los puertos ya existentes. Afortunadamente, hay una solución.

El chip del hub USB GL850G, que se utiliza en el enrutador, soporta la operación de 4 puertos USB, dos de los cuales no están soldados. No está claro por qué el fabricante no los soldó, supongo que para evitar que los usuarios conecten 4 dispositivos de alto consumo de energía (por ejemplo, discos duros), ya que la fuente de alimentación estándar del enrutador no está diseñada para tal carga. En cualquier caso, esto juega a nuestro favor.
Aceleramos OpenVPN por $9.99* o integrando Orange Pi One en el router
Para obtener otro puerto USB, solo hay que soldar dos cables a los pines 8(D-) y 9(D+) o a los pines 11(D-) y 12(D+).

Aceleramos OpenVPN por $9.99* o integrando Orange Pi One en el router

Sin embargo, no es suficiente simplemente conectar dos dispositivos USB y esperar que todo funcione por sí solo, como sucedería con Ethernet. En primer lugar, necesitamos hacer que uno de ellos funcione en modo USB Client y no en modo USB Host. En segundo lugar, debemos determinar cómo los dispositivos se reconocerán entre sí. Existen numerosos controladores de los llamados USB Gadgets (así llamados por el subsistema del núcleo Linux), que permiten emular varios tipos de dispositivos USB: adaptadores de red, tarjetas de sonido, teclado y ratón, memorias USB, cámaras, consolas a través de puerto serie. Dado que nuestro dispositivo funcionará con la red, la emulación de un adaptador Ethernet será la opción más adecuada.

Existen tres estándares de Ethernet sobre USB:

  • Remote NDIS (RNDIS). Un estándar obsoleto de Microsoft, que se utilizó principalmente durante la era de Windows XP.
  • Ethernet Control Model (ECM). Un estándar simple que encapsula tramas Ethernet en paquetes USB. Es ideal para módems por cable con conexión USB, donde es conveniente transmitir tramas sin procesamiento, pero debido a su simplicidad y las limitaciones del bus USB, no funciona muy rápido.
  • Ethernet Emulation Model (EEM). Un protocolo más inteligente que considera las limitaciones de USB y agrega óptimamente varios tramas en una, aumentando así el ancho de banda.
  • Network Control Model (NCM). El protocolo más nuevo. Tiene las ventajas de EEM y optimiza aún más el funcionamiento con el bus.

Para hacer que cualquiera de estos protocolos funcione en nuestra placa, como siempre, enfrentaremos algunas dificultades. Dado que a Allwinner solo le interesan las partes de Android del núcleo, solo funciona correctamente el Android Gadget: el código que implementa la conexión con adb, la exportación del dispositivo a través del protocolo MTP y la emulación de memorias en dispositivos Android. El Android Gadget en sí admite también el protocolo RNDIS, pero en el núcleo de Allwinner está roto. Si intentas compilar el núcleo con cualquier otro USB Gadget, el dispositivo simplemente no aparecerá en el sistema, hagas lo que hagas.
Para solucionar el problema, idealmente, es necesario encontrar el lugar de inicialización del controlador USB en el código modificado del desarrollador del Android-gadget android.c, pero también hay una maniobra alternativa para hacer que funcione, al menos, la emulación de Ethernet a través de USB:

--- sun8i/drivers/usb/sunxi_usb/udc/sunxi_udc.c 2016-04-16 15:01:40.427088792 +0300
+++ sun8i/drivers/usb/sunxi_usb/udc/sunxi_udc.c 2016-04-16 15:01:45.339088792 +0300
@@ -57,7 +57,7 @@
 static sunxi_udc_io_t g_sunxi_udc_io;
 static u32 usb_connect = 0;
 static u32 is_controller_alive = 0;
-static u8 is_udc_enable = 0;   
+static u8 is_udc_enable = 1;   
 /* es udc habilitado por gadget? */
 
 #ifdef CONFIG_USB_SUNXI_USB0_OTG
 static struct platform_device *g_udc_pdev = NULL;

Este parche habilita forzosamente el modo cliente USB, lo que permite usar gadgets USB comunes desde Linux.
Ahora hay que recompilar el núcleo con este parche y el gadget necesario. Elegí EEM, ya que según las pruebas, es más eficiente que NCM.
El equipo de Armbian proporciona un sistema de compilación muy simple y conveniente para todas las placas soportadas en la distribución. Solo necesitas descargarlo, colocar nuestro parche en userpatches/kernel/sun8i-default/otg.patch, editar un poco compile.sh y seleccionar el gadget necesario:

Aceleramos OpenVPN por $9.99* o integrando Orange Pi One en el router

El núcleo se compilará en un paquete deb, que será fácil de instalar en la placa a través de dpkg.
Solo queda conectar la placa por USB y configurar nuestro nuevo adaptador de red para obtener una dirección a través de DHCP. Para esto, es necesario agregar aproximadamente lo siguiente en /etc/network/interfaces:

auto usb0
        iface usb0 inet dhcp
        hwaddress ether c2:46:98:49:3e:9d
        pre-up /bin/sh -c 'echo 2 > /sys/bus/platform/devices/sunxi_usb_udc/otg_role'

Es mejor establecer manualmente la dirección MAC, ya que será aleatoria en cada reinicio del dispositivo, lo cual es incómodo y problemático.
Conectamos el cable MicroUSB al conector OTG, conectamos la alimentación del router (se puede suministrar a los pines 2 y 3 de la regleta, no solo al conector de alimentación).

Solo queda configurar el router. Basta con instalar el paquete con el controlador EEM y agregar nuestro nuevo dispositivo USB de red al puente de la zona de firewall local:

opkg install kmod-usb-net-cdc-eem

Aceleramos OpenVPN por $9.99* o integrando Orange Pi One en el router
Para enrutar todo el tráfico a través del túnel VPN, debes agregar una regla SNAT en la dirección IP de la placa en el lado del router, o asignar como dirección del gateway la dirección de la placa a través de dnsmasq. Esto último se hace agregando la siguiente línea en /etc/dnsmasq.conf:

dhcp-option = tag:lan, option:router, 192.168.1.100

donde 192.168.1.100 — la dirección IP de tu placa. ¡No olvides configurar la dirección del router en la configuración de red de la propia placa!

Se utilizó una esponja de melamina para aislar los contactos de la placa de los del router. Así quedó:
Aceleramos OpenVPN por $9.99* o integrando Orange Pi One en el router

Conclusión

La red funciona sorprendentemente rápido a través de USB: 100-120 Mb/s, esperaba menos. OpenVPN maneja alrededor de 70 Mb/s de tráfico cifrado, que tampoco es mucho, pero es suficiente para mis necesidades. La tapa del enrutador no se cierra bien, dejando un pequeño espacio. Los estetas pueden desoldar los conectores Ethernet y USB Host de la placa, lo que permitirá que la tapa se cierre completamente y aún quede espacio.
O mejor no hacer tal cosa y comprar Turris Omnia.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster