Accelera OpenVPN per $9.99* o integra Orange Pi One nel router

Accelera OpenVPN per $9.99* o integra Orange Pi One nel router

Alcuni di noi non navigano in internet senza VPN per vari motivi: alcuni hanno bisogno di un IP dedicato, ed è più facile ed economico acquistare un VPS con due IP piuttosto che comprare un indirizzo dal fornitore, altri vogliono accedere a tutti i siti web e non solo a quelli autorizzati sul territorio della Federazione Russa, infine ci sono quelli che necessitano di IPv6, ma il fornitore non lo offre...
La connessione VPN viene spesso stabilita sul dispositivo stesso che si sta utilizzando in quel momento, il che è del tutto ragionevole se si possiede solo un computer e un telefono e non li si usa mai contemporaneamente. Tuttavia, se nella tua rete domestica ci sono molteplici dispositivi, o magari ce ne sono alcuni dove non è possibile configurare VPN, sarebbe più comodo sollevare un tunnel direttamente sul router di casa, per non dover pensare a configurare ogni dispositivo singolarmente.

Se hai mai installato OpenVPN sul tuo router, probabilmente sei rimasto sconcertato dalla velocità con cui funziona. I SoC anche dei router economici gestiscono senza problemi il traffico vicino a un gigabit, grazie alla separazione delle funzioni di routing e NAT su un chip dedicato esclusivamente a tale compito, mentre i processori principali di tali router sono piuttosto deboli, poiché non hanno praticamente carichi di lavoro. Questo compromesso consente di ottenere alte velocità di funzionamento del router e ridurre notevolmente il prezzo dell'unità — i router con processori potenti costano diversi volte di più e vengono posizionati non solo come scatola per distribuire internet, ma anche come NAS, downloader torrent e sistemi multimediali domestici.

Il mio router, TP-Link TL-WDR4300, non può essere definito nuovo — il modello è apparso a metà del 2012 e possiede un processore da 560 MHz dell'architettura MIPS32 74Kc, la cui potenza è sufficiente per soli 20-23 Mb/s di traffico criptato tramite OpenVPN, che per gli standard della velocità moderna di internet domestico è piuttosto poco.
Come possiamo aumentare la velocità del tunnel criptato? Il mio router è abbastanza funzionale, supporta 3×3 MIMO e, in generale, funziona bene, non vorrei cambiarlo.
Poiché ora è consuetudine creare pagine internet da 10 megabyte, scrivere applicazioni desktop in node.js e impacchettarle in file da 100 megabyte, aumentando la capacità computazionale anziché ottimizzare, faremo qualcosa di terribile — installeremo la connessione VPN su un potente "computer" a scheda singola Orange Pi One, che metteremo dentro il guscio del router, senza occupare le porte di rete e USB esistenti, il tutto per $9.99*!
* + spese di spedizione, + tasse, + per la birra, + MicroSD.

OpenVPN

Non si può definire il processore del router completamente debole — è in grado di cifrare e hashare i dati utilizzando l'algoritmo AES-128-CBC-SHA1 a una velocità di 50 Mb/s, che è notevolmente più veloce rispetto a come funziona OpenVPN, e il moderno cifrario a flusso CHACHA20 con l'hash POLY1305 sviluppa addirittura 130 megabit al secondo! Perché allora la velocità del tunnel VPN è così bassa? Tutto dipende dal cambio di contesto tra lo spazio utente e lo spazio kernel: OpenVPN cifra il traffico e comunica con il mondo esterno nello spazio utente, mentre il routing avviene nello spazio kernel. Il sistema operativo deve continuamente passare da un contesto all'altro per ogni pacchetto ricevuto o inviato, e questa operazione non è veloce. Questo problema è comune a tutte le applicazioni VPN che operano tramite il driver TUN/TAP, e non si può dire che il problema della bassa velocità sia causato da una scarsa ottimizzazione di OpenVPN (anche se, ovviamente, ci sono aspetti che avrebbero bisogno di essere migliorati). Nessun client VPN in space users riesce a raggiungere anche un gigabit con la crittografia disattivata sul mio laptop, figuriamoci con sistemi con processori deboli.

Orange Pi One

Orange Pi One di Xunlong è l'offerta più vantaggiosa attualmente disponibile per quanto riguarda il rapporto prestazioni/prezzo. Con $9.99* ottieni un potente processore quad-core ARM Cortex-A7, che funziona in modo stabile a una frequenza di 1008 MHz, chiaramente più performante rispetto ai concorrenti Raspberry Pi Zero e Next Thing C.H.I.P. nella stessa fascia di prezzo. Tuttavia, i lati positivi finiscono qui. Xunlong non presta alcuna attenzione al software delle sue schede e, al momento del lancio di One, non ha nemmeno fornito un file di configurazione per la scheda, figurati immagini pronte. Allwinner, il produttore del SoC, non si preoccupa molto nemmeno del supporto del proprio prodotto. A loro interessa solo il funzionamento minimo con il sistema operativo Android 4.4.4, il che significa che dobbiamo usare un kernel di versione 3.4 con patch per Android. Fortunatamente, ci sono entusiasti che assemblano distribuzioni, modificano il kernel e scrivono codice per supportare le schede nel kernel mainline, in pratica svolgendo il lavoro del produttore e rendendo questo hardware accettabile da utilizzare. Per i miei scopi, ho scelto la distribuzione Armbian, che si aggiorna frequentemente e convenientemente (i nuovi kernel vengono installati direttamente tramite il gestore pacchetti, e non copiando file in una partizione dedicata come di solito accade con Allwinner), e supporta la maggior parte della periferica, a differenza delle altre.

Router

Per non sovraccaricare il debole processore del router con la crittografia e velocizzare la nostra connessione VPN, possiamo trasferire questo compito a un processore più potente come l'Orange Pi, collegandolo al router in qualche modo. Ci viene in mente di collegarlo tramite Ethernet o USB: entrambi gli standard sono supportati da entrambi i dispositivi, ma non vuoi occupare le porte già esistenti. Fortunatamente, c'è una soluzione.

Il chip USB hub GL850G, utilizzato nel router, supporta 4 porte USB, due delle quali non sono saldate. Non è chiaro perché il produttore non le abbia saldate, presumo per non permettere agli utenti di collegare subito 4 dispositivi ad alto consumo di corrente (come i dischi rigidi), dato che l'alimentatore fornito con il router non è progettato per sopportare tale carico. In ogni caso, questo ci avvantaggia.
Accelera OpenVPN per $9.99* o integra Orange Pi One nel router
Per ottenere un'altra porta USB, basta saldare due fili ai pin 8(D-) e 9(D+) o 11(D-) e 12(D+).

Accelera OpenVPN per $9.99* o integra Orange Pi One nel router

Tuttavia, non basta collegare semplicemente due dispositivi USB e sperare che tutto funzioni da solo, come accadrebbe con Ethernet. In primo luogo, dobbiamo impostare uno di essi in modalità USB Client, e non USB Host. In secondo luogo, dobbiamo decidere come i dispositivi si riconosceranno a vicenda. Esistono numerosi driver per quelli che vengono chiamati USB Gadgets (dal nome del sottosistema del kernel Linux), che consentono di emulare diversi tipi di dispositivi USB: adattatori di rete, schede audio, tastiere e mouse, unità flash, fotocamere, console tramite porta seriale. Poiché il nostro dispositivo lavorerà con la rete, l'emulazione dell'adattatore Ethernet è ciò che fa al caso nostro.

Ci sono tre standard Ethernet-over-USB:

  • Remote NDIS (RNDIS). Uno standard obsoleto di Microsoft, utilizzato principalmente ai tempi di Windows XP.
  • Ethernet Control Model (ECM). Uno standard semplice che incapsula i frame Ethernet nei pacchetti USB. Perfetto per i modem cablati con connessione USB, dove è comodo trasmettere i frame senza elaborazione, ma a causa della sua semplicità e delle limitazioni del bus USB, non funziona molto velocemente.
  • Ethernet Emulation Model (EEM). Un protocollo più intelligente che tiene conto delle limitazioni del USB e aggrega in modo ottimale più frame in uno, aumentando così la larghezza di banda.
  • Network Control Model (NCM). Il protocollo più recente. Ha i vantaggi dell'EEM e ottimizza ulteriormente il funzionamento con il bus.

Affinché uno di questi protocolli funzioni sulla nostra scheda, come sempre, ci troveremo di fronte ad alcune difficoltà. Poiché Allwinner è interessata solo alle parti Android del kernel, funziona normalmente solo Android Gadget — quel codice che implementa la connessione con adb, l'esportazione del dispositivo tramite il protocollo MTP e l'emulazione dell'unità flash sugli dispositivi Android. L'Android Gadget supporta anche il protocollo RNDIS, ma nel kernel di Allwinner è rotto. Se provi a compilare il kernel con un altro USB Gadget, il dispositivo semplicemente non apparirà nel sistema, qualunque cosa tu faccia.
Per risolvere il problema, sarebbe opportuno trovare il punto di inizializzazione del controller USB nel codice modificato degli sviluppatori dell'Android Gadget android.c, ma esiste anche una soluzione alternativa per far funzionare, almeno, l'emulazione Ethernet tramite 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;   /* is udc enable by gadget? */
+static u8 is_udc_enable = 1;   /* is udc enable by gadget? */
 
 #ifdef CONFIG_USB_SUNXI_USB0_OTG
 static struct platform_device *g_udc_pdev = NULL;

Questo patch abilita forzatamente la modalità USB client, consentendo l'uso di normali gadget USB da Linux.
Ora è necessario ricompilare il kernel con questo patch e il gadget necessario. Ho scelto EEM, poiché nei test si è dimostrato più performante di NCM.
Il team di Armbian offre un sistema di build molto semplice e pratico per tutte le schede supportate nel distributore. Basta scaricarlo, posizionare il nostro patch in userpatches/kernel/sun8i-default/otg.patch, modificare un po' compile.sh e scegliere il gadget necessario:

Accelera OpenVPN per $9.99* o integra Orange Pi One nel router

Il kernel sarà compilato in un pacchetto deb che sarà facile installare sulla scheda tramite dpkg.
Rimane solo da collegare la scheda tramite USB e configurare il nostro nuovo adattatore di rete per ricevere un indirizzo tramite DHCP. Per fare ciò, è necessario aggiungere circa quanto segue a /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'

È meglio impostare manualmente l'indirizzo MAC, poiché sarà casuale ad ogni riavvio del dispositivo, il che è scomodo e problematico.
Colleghiamo il cavo MicroUSB alla porta OTG, alimentando dalla router (può essere fornito sui pin 2 e 3 della striscia, non solo sulla porta di alimentazione).

Rimane solo da configurare il router. È sufficiente installare il pacchetto con il driver EEM e aggiungere il nostro nuovo dispositivo USB di rete al bridge della zona locale del firewall:

opkg install kmod-usb-net-cdc-eem

Accelera OpenVPN per $9.99* o integra Orange Pi One nel router
Per instradare tutto il traffico nel tunnel VPN, bisogna aggiungere una regola SNAT sull'indirizzo IP della scheda sul lato del router, oppure fornire come indirizzo gateway l'indirizzo della scheda tramite dnsmasq. Quest'ultimo viene fatto aggiungendo la seguente riga in /etc/dnsmasq.conf:

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

dove 192.168.1.100 — l'indirizzo IP della tua scheda. Non dimenticare di impostare l'indirizzo del router nelle impostazioni di rete sulla scheda stessa!

Per isolare i contatti della scheda dai contatti del router è stata utilizzata una spugna di melamina. Ecco come è venuto:
Accelera OpenVPN per $9.99* o integra Orange Pi One nel router

Conclusione

La rete funziona tramite USB sorprendentemente veloce: 100-120 MB/s, mi aspettavo di meno. OpenVPN gestisce circa 70 MB/s di traffico criptato, che non è molto, ma per le mie esigenze è sufficiente. Il coperchio del router si chiude male, lasciando una piccola fessura. Gli esteti possono saldare via le porte Ethernet e USB Host dalla scheda, il che permetterebbe di chiudere completamente il coperchio, e ci sarebbe ancora spazio.
O meglio, non cimentarsi in tale pornografia e comprare Turris Omnia.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS | ProHoster