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

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

Alcuni di noi non usano Internet senza VPN per un motivo o per l'altro: qualcuno ha bisogno di un IP dedicato, ed è più facile ed economico acquistare un VPS con due IP che acquistare un indirizzo da un provider, qualcuno vuole accedere a tutti i siti web , e non solo quelli ammessi sul territorio della Federazione Russa, altri necessitano di IPv6, ma il provider non lo fornisce...
Molto spesso, una connessione VPN viene stabilita sul dispositivo stesso che viene utilizzato in un determinato momento, il che è logico se si dispone di un solo computer e di un telefono e li si utilizza raramente contemporaneamente. Se nella rete domestica ci sono molti dispositivi, o ad esempio ce ne sono alcuni su cui non è possibile configurare la VPN, sarebbe più conveniente creare un tunnel direttamente sul router di casa in modo da non pensare a configurare ogni dispositivo separatamente .

Se hai mai installato OpenVPN sul tuo router, probabilmente sei rimasto spiacevolmente sorpreso dalla velocità con cui funziona. I SoC anche dei router economici attraversano un traffico di circa un gigabit senza problemi, grazie al trasferimento delle funzioni di routing e NAT su un chip separato progettato esclusivamente per questo compito, e i processori principali di tali router sono piuttosto deboli, perché Non c'è praticamente alcun carico su di loro. Questo compromesso consente di ottenere un'elevata velocità del router e di ridurre significativamente il prezzo del dispositivo finito: i router con potenti processori costano molte volte di più e sono posizionati non solo come box per la distribuzione di Internet, ma anche come NAS, torrent downloader e sistema multimediale domestico.

Il mio router, TP-Link TL-WDR4300, non può essere definito nuovo: il modello è apparso a metà del 2012 e dispone di un processore con architettura MIPS560 32Kc da 74 MHz, la cui potenza è sufficiente solo per 20-23 Mb/s di traffico crittografato tramite OpenVPN, che per gli standard la velocità della moderna Internet domestica è piuttosto bassa.
Come possiamo aumentare la velocità di un tunnel crittografato? Il mio router è abbastanza funzionale, supporta 3x3 MIMO e generalmente funziona bene, non vorrei cambiarlo.
Poiché ormai è consuetudine creare pagine Internet da 10 megabyte, scrivere applicazioni desktop in node.js e comprimerle in un file da 100 megabyte, aumentare la potenza di calcolo anziché l'ottimizzazione, faremo qualcosa di terribile: trasferiremo la connessione VPN a un produttivo “computer” a scheda singola Orange Pi One, che installeremo nel case del router senza occupare le porte di rete e USB esistenti, per soli $ 9.99*!
*+ consegna, + tasse, + per la birra, + MicroSD.

OpenVPN

Il processore del router non può essere definito completamente debole: è in grado di crittografare e eseguire l'hashing dei dati utilizzando l'algoritmo AES-128-CBC-SHA1 a una velocità di 50 Mb/s, che è notevolmente più veloce di come funziona OpenVPN, e il moderno flusso CHACHA20 la cifratura con un hash POLY1305 raggiunge addirittura i 130 megabit al secondo! Perché la velocità del tunnel VPN è così bassa? È tutta una questione di cambio di contesto tra spazio utente e spazio kernel: OpenVPN crittografa il traffico e comunica con il mondo esterno nel contesto utente e il routing stesso avviene nel contesto kernel. Il sistema operativo deve passare costantemente avanti e indietro per ogni pacchetto ricevuto o trasmesso e questa operazione è lenta. Questo problema è inerente a tutte le applicazioni VPN che utilizzano un 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 punti che devono essere rielaborati). Nessun client VPN per spazio utente fornisce nemmeno un gigabit con crittografia disabilitata sul mio laptop, per non parlare dei sistemi con un processore debole.

Arancio Pi One

La scheda singola Orange Pi One di Xunlong è al momento la migliore offerta in termini di rapporto prestazioni/prezzo. Per $ 9.99* ottieni un solido processore quad-core ARM Cortex-A7 in esecuzione (stabile) a 1008 MHz e supera chiaramente i suoi vicini di fascia di prezzo Raspberry Pi Zero e Next Thing CHIP. Qui finiscono i vantaggi. L'azienda Xunlong presta esattamente zero attenzione al software delle sue schede e al momento del lancio in vendita della One non ha fornito nemmeno un file di configurazione della scheda, per non parlare delle immagini già pronte. Anche Allwinner, un produttore di SoC, non è particolarmente sensibile al supporto del suo prodotto. A loro interessano solo le prestazioni minime del sistema operativo Android 4.4.4, il che significa che siamo costretti a utilizzare il kernel 3.4 con le patch Android. Fortunatamente, ci sono appassionati che assemblano distribuzioni, modificano il kernel, scrivono codice per supportare le schede nel kernel principale, ad es. in realtà fanno il lavoro per il produttore, facendo funzionare questa schifezza in modo accettabile. Per i miei scopi, ho scelto la distribuzione Armbian; viene aggiornata frequentemente e comodamente (i nuovi kernel vengono installati direttamente tramite il gestore pacchetti e non copiando file su una partizione speciale, come di solito accade con Allwinner), e supporta la maggior parte periferiche, a differenza delle altre.

Router

Per non caricare di crittografia il debole processore del router e velocizzare la nostra connessione VPN, possiamo spostare questo compito sulle spalle di un processore Orange Pi più potente collegandolo in qualche modo al router. Mi viene in mente la connessione tramite Ethernet o USB: entrambi questi standard sono supportati da entrambi i dispositivi, ma non volevo utilizzare le porte esistenti. Fortunatamente, c'è una via d'uscita.

Il chip hub USB GL850G, utilizzato nel router, supporta 4 porte USB, due delle quali non cablate. Non è chiaro il motivo per cui il produttore non li ha dissaldati, presumo, per impedire agli utenti di collegare 4 dispositivi con elevato consumo di corrente (ad esempio dischi rigidi) contemporaneamente. L'alimentatore standard del router non è progettato per un tale carico. In ogni caso, questo va a nostro vantaggio.
Velocizza OpenVPN per $ 9.99* o integra Orange Pi One nel tuo router
Per ottenere un'altra porta USB è sufficiente saldare due fili ai pin 8(D-) e 9(D+) o 11(D-) e 12(D+).

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

Tuttavia non è sufficiente collegare semplicemente due dispositivi USB e sperare che tutto funzioni da solo, come con Ethernet. In primo luogo, dobbiamo far funzionare uno di essi in modalità client USB e non host USB e, in secondo luogo, dobbiamo decidere in che modo i dispositivi si rileveranno a vicenda. Esistono molti driver per i cosiddetti Gadget USB (dal nome del sottosistema del kernel Linux), che permettono di emulare vari tipi di dispositivi USB: adattatore di rete, scheda audio, tastiera e mouse, chiavetta USB, fotocamera, console tramite porta seriale porta. Poiché il nostro dispositivo funzionerà con la rete, emulare un adattatore Ethernet è la soluzione migliore per noi.

Esistono tre standard Ethernet su USB:

  • NDIS remoto (RNDIS). Uno standard obsoleto di Microsoft, utilizzato principalmente in Windows XP.
  • Modello di controllo Ethernet (ECM). Uno standard semplice che incapsula i frame Ethernet all'interno dei pacchetti USB. Ottimo per modem cablati con connessione USB, dove è conveniente trasferire frame senza elaborazione, ma a causa della sua semplicità e delle limitazioni del bus USB, non è molto veloce.
  • Modello di emulazione Ethernet (EEM). Un protocollo più intelligente che tiene conto delle limitazioni USB e aggrega in modo ottimale più frame in uno solo, aumentando così il throughput.
  • Modello di controllo della rete (NCM). Il protocollo più recente. Presenta i vantaggi di EEM e ottimizza ulteriormente l'esperienza dell'autobus.

Per far funzionare uno qualsiasi di questi protocolli sulla nostra scheda, come sempre, dovremo incontrare alcune difficoltà. Dato che Allwinner è interessato solo alle parti Android del kernel, funziona normalmente solo il gadget Android: il codice che implementa la comunicazione con adb, esportando il dispositivo tramite il protocollo MTP ed emulando un'unità flash sui dispositivi Android. Lo stesso Android Gadget supporta anche il protocollo RNDIS, ma è interrotto nel kernel Allwinner. Se provi a compilare il kernel con qualsiasi altro gadget USB, il dispositivo semplicemente non apparirà sul sistema, qualunque cosa tu faccia.
Per risolvere il problema, in modo amichevole, è necessario trovare il punto in cui è inizializzato il controller USB nel codice del gadget Android android.c modificato dagli sviluppatori, ma esiste anche una soluzione alternativa per effettuare almeno l'emulazione Ethernet Lavoro 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;

Questa patch forza la modalità client USB, consentendoti di utilizzare i normali gadget USB da Linux.
Ora dovresti ricostruire il kernel con questa patch e il gadget necessario. Ho scelto EEM perché... Secondo i risultati dei test, si è rivelato più produttivo di NCM.
Il team armbiano fornisce sistema di assemblaggio molto semplice e conveniente per tutte le schede supportate nella distribuzione. Basta scaricarlo e inserire la nostra patch userpatches/kernel/sun8i-default/otg.patch, modifica un po' compile.sh e seleziona il gadget richiesto:

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

Il kernel verrà compilato in un pacchetto deb, che non sarà difficile da installare sulla scheda tramite dpkg.
Non resta che collegare la scheda tramite USB e configurare il nostro nuovo adattatore di rete per ricevere un indirizzo tramite DHCP. Per fare ciò è necessario aggiungere qualcosa di simile a quanto segue /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, perché... sarà casuale ogni volta che il dispositivo viene riavviato, il che è scomodo e problematico.
Colleghiamo il cavo MicroUSB al connettore OTG, colleghiamo l'alimentazione dal router (può essere fornito ai pin 2 e 3 del pettine e non solo al connettore di alimentazione).

Non resta che configurare il router. È sufficiente installare il pacchetto con il driver EEM e aggiungere il nostro nuovo dispositivo di rete USB al bridge della zona firewall locale:

opkg install kmod-usb-net-cdc-eem

Velocizza OpenVPN per $ 9.99* o integra Orange Pi One nel tuo router
Per instradare tutto il traffico al tunnel VPN, è necessario aggiungere una regola SNAT all'indirizzo IP della scheda sul lato router o distribuire l'indirizzo della scheda come indirizzo gateway tramite dnsmasq. Quest'ultimo viene fatto aggiungendo la seguente riga a /etc/dnsmasq.conf:

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

dove 192.168.1.100 — Indirizzo IP della tua scheda. Non dimenticare di inserire 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 melammina. Si è scoperto qualcosa del genere:
Velocizza OpenVPN per $ 9.99* o integra Orange Pi One nel tuo router

conclusione

La rete tramite USB funziona in modo sorprendentemente veloce: 100-120 Mb/s, mi aspettavo di meno. OpenVPN attraversa circa 70 Mb/s di traffico crittografato, anche questo non è molto, ma sufficiente per le mie esigenze. Il coperchio del router non si chiude ermeticamente, lasciando un piccolo spazio vuoto. Gli esteti possono rimuovere i connettori Ethernet e USB Host dalla scheda, consentendo così al coperchio di chiudersi completamente e di avere ancora dello spazio rimasto.
È meglio non impegnarsi in tale pornografia e acquistare Turris Omnia.

Fonte: habr.com

Aggiungi un commento