OpenVPN für 9,99 $* beschleunigen oder Orange Pi One in den Router integrieren

OpenVPN für 9,99 $* beschleunigen oder Orange Pi One in den Router integrieren

Einige von uns nutzen das Internet aus verschiedenen Gründen nicht ohne VPN: Manche benötigen eine dedizierte IP-Adresse und es ist einfacher und günstiger, einen VPS mit zwei IPs zu kaufen, als eine Adresse von einem Anbieter zu erwerben. Andere möchten auf alle Websites zugreifen können, nicht nur auf die, die in Russland erlaubt sind, und wieder andere benötigen IPv6, das von ihrem Anbieter nicht bereitgestellt wird…
In den meisten Fällen wird die VPN-Verbindung auf dem Gerät eingerichtet, das zu einem bestimmten Zeitpunkt verwendet wird, was nachvollziehbar ist, wenn Sie nur einen Computer und ein Telefon haben und diese selten gleichzeitig nutzen. Wenn jedoch in Ihrem Heimnetzwerk viele Geräte vorhanden sind oder es beispielsweise Geräte gibt, auf denen VPN nicht eingerichtet werden kann, wäre es praktischer, das Tunnel-Protokoll direkt auf dem Heimrouter einzurichten, damit Sie sich nicht um die Konfiguration jedes einzelnen Geräts kümmern müssen.

Wenn Sie jemals OpenVPN auf Ihrem Router installiert haben, waren Sie wahrscheinlich unangenehm überrascht von der Geschwindigkeit seiner Leistung. Die SoCs selbst von preiswerten Routern bewältigen problemlos nahezu gigabitfähigen Datenverkehr, da die Funktionen für Routing und NAT auf einen separaten Chip ausgelagert werden, der ausschließlich für diese Aufgabe konzipiert ist. Die Hauptprozessoren solcher Router sind jedoch recht schwach, da sie kaum belastet werden. Dieser Kompromiss ermöglicht es, eine hohe Geschwindigkeit des Routers zu erreichen und den Preis des Endgeräts erheblich zu senken – Router mit leistungsstärkeren Prozessoren kosten das Mehrfache und positionieren sich nicht nur als Geräte zur Bereitstellung von Internet, sondern auch als NAS, Torrent-Downloader und Heim-Multimedia-Systeme.

Mein Router, TP-Link TL-WDR4300, kann nicht als neu bezeichnet werden – das Modell wurde Mitte 2012 vorgestellt und verfügt über einen 560 MHz MIPS32 74Kc-Prozessor, dessen Leistung lediglich für 20 bis 23 Mb/s verschlüsselten Datenverkehr über OpenVPN ausreicht. Das ist im Vergleich zur Geschwindigkeit moderner heimischer Internetverbindungen recht wenig.
Wie können wir die Geschwindigkeit des verschlüsselten Tunnels erhöhen? Mein Router ist recht leistungsfähig, unterstützt 3×3 MIMO und funktioniert insgesamt gut, ich würde ihn ungern ersetzen.
Da es heutzutage üblich ist, 10-Megabyte-Webseiten zu erstellen, Desktop-Anwendungen mit node.js zu programmieren und sie in eine 100-Megabyte-Datei zu packen, sowie die Rechenleistung zu steigern statt zu optimieren, werden wir etwas Heftiges wagen – wir verlagern die VPN-Verbindung auf einen leistungsstarken Einplatinen-Computer, den Orange Pi One. Diesen installieren wir im Router-Gehäuse, ohne die vorhandenen Netzwerk- und USB-Ports zu belegen, und das Ganze für nur 9,99 $*!
* + Versand, + Steuern, + für Bier, + MicroSD.

OpenVPN

Der Routerprozessor kann zwar nicht als schwach bezeichnet werden — er ist in der Lage, Daten mit dem Algorithmus AES-128-CBC-SHA1 mit einer Geschwindigkeit von 50 Mb/s zu verschlüsseln und zu hashen, was deutlich schneller ist als die Arbeitsweise von OpenVPN. Der moderne Stream-Cipher CHACHA20 mit dem Hash POLY1305 erreicht sogar Geschwindigkeiten von bis zu 130 Megabit pro Sekunde! Warum ist die Geschwindigkeit des VPN-Tunnels also so niedrig? Der Grund liegt im Kontextwechsel zwischen dem Nutzermodus und dem Kernelmodus: OpenVPN verschlüsselt den Datenverkehr und kommuniziert im Nutzermodus, während die tatsächliche Routierung im Kernelmodus erfolgt. Das Betriebssystem muss ständig zwischen diesen beiden Modi wechseln, für jedes empfangene oder gesendete Paket, und dieser Vorgang ist nicht gerade schnell. Dieses Problem betrifft alle VPN-Anwendungen, die über den TUN/TAP-Treiber arbeiten, und man kann nicht sagen, dass die geringe Geschwindigkeit auf eine schlechte Optimierung von OpenVPN zurückzuführen ist (auch wenn es natürlich Bereiche gibt, die verbessert werden sollten). Kein VPN-Client im Nutzermodus erreicht auch nur annähernd ein Gigabit ohne Verschlüsselung auf meinem Laptop, ganz zu schweigen von Systemen mit schwächeren Prozessoren.

Orange Pi One

Das Orange Pi One von Xunlong bietet derzeit das beste Preis-Leistungs-Verhältnis. Für 9,99 $* erhalten Sie einen soliden Quad-Core ARM Cortex-A7 Prozessor, der stabil mit 1008 MHz läuft, und der eindeutig leistungsstärker ist als die Nachbarn Raspberry Pi Zero und Next Thing C.H.I.P. in derselben Preisklasse. Damit enden jedoch die Vorteile. Xunlong kümmert sich überhaupt nicht um die Software seiner Platinen und hat zum Zeitpunkt des Verkaufsstartes des One noch nicht einmal eine Konfigurationsdatei bereitgestellt, geschweige denn fertige Abbildungen. Auch Allwinner, der Hersteller des SoC, zeigt sich wenig engagiert in der Unterstützung seines Produkts. Sie interessieren sich nur für die minimale Funktionalität unter Android 4.4.4, was bedeutet, dass wir gezwungen sind, einen Kernel der Version 3.4 mit Android-Patches zu verwenden. Glücklicherweise gibt es Enthusiasten, die Distributionen zusammenstellen, den Kernel anpassen und Code zur Unterstützung der Platinen im Mainline-Kernel entwickeln, also letztlich die Arbeit des Herstellers übernehmen, um das System akzeptabel zum Laufen zu bringen. Für meine Zwecke habe ich die Distribution Armbian gewählt, da sie häufig und bequem aktualisiert wird (neue Kerne werden direkt über den Paketmanager installiert, anstatt Dateien auf eine spezielle Partition zu kopieren, wie es bei Allwinner üblich ist), und sie unterstützt die meisten Peripheriegeräte, im Gegensatz zu den anderen.

Router

Um den schwachen Prozessor des Routers nicht mit der Verschlüsselung zu belasten und unsere VPN-Verbindung zu beschleunigen, können wir diese Aufgabe auf den leistungsfähigeren Prozessor des Orange Pi übertragen, indem wir ihn auf irgendeine Weise mit dem Router verbinden. Mir kommt in den Sinn, entweder eine Ethernet- oder eine USB-Verbindung zu nutzen – beide Standards werden von beiden Geräten unterstützt, aber ich möchte die bereits vorhandenen Ports nicht belegen. Glücklicherweise gibt es eine Lösung.

Der USB-Hub-Chip GL850G, der im Router verwendet wird, unterstützt den Betrieb von 4 USB-Ports, von denen zwei nicht verlötet sind. Es ist unklar, warum der Hersteller sie nicht verlötet hat; ich vermute, um zu verhindern, dass Benutzer gleichzeitig 4 Geräte mit hohem Stromverbrauch (wie z. B. Festplatten) anschließen, da das mitgelieferte Netzteil des Routers für eine solche Belastung nicht ausgelegt ist. In jedem Fall kommt uns das zugute.
OpenVPN für 9,99 $* beschleunigen oder Orange Pi One in den Router integrieren
Um einen weiteren USB-Port zu erhalten, genügt es, zwei Drähte an die Pins 8(D-) und 9(D+) oder 11(D-) und 12(D+) zu löten.

OpenVPN für 9,99 $* beschleunigen oder Orange Pi One in den Router integrieren

Es reicht jedoch nicht aus, einfach zwei USB-Geräte anzuschließen und zu hoffen, dass alles wie bei Ethernet von selbst funktioniert. Zuerst müssen wir eines der Geräte im USB-Client-Modus betreiben, nicht im USB-Host-Modus. Zudem müssen wir klären, wie die Geräte sich gegenseitig erkennen. Es gibt viele Treiber für sogenannte USB-Gadgets (benannt nach dem Subsystem des Linux-Kernels), die es ermöglichen, verschiedene Arten von USB-Geräten zu emulieren: Netzwerkadapter, Soundkarten, Tastaturen und Mäuse, Flash-Laufwerke, Kameras und Konsolen über serielle Schnittstellen. Da unser Gerät mit dem Netzwerk arbeitet, ist die Emulation eines Ethernet-Adapters für uns am geeignetsten.

Es gibt drei Standards für Ethernet über USB:

  • Remote NDIS (RNDIS). Ein veralteter Standard von Microsoft, der hauptsächlich in Zeiten von Windows XP verwendet wurde.
  • Ethernet Control Model (ECM). Ein einfacher Standard, der Ethernet-Frames in USB-Pakete kapselt. Dieser eignet sich hervorragend für kabelgebundene Modems mit USB-Anschluss, da die Frames ohne Verarbeitung übertragen werden, aber aufgrund seiner Einfachheit und der Einschränkungen des USB-Busses nicht besonders schnell ist.
  • Ethernet Emulation Model (EEM). Ein intelligenterer Protokoll, der USB-Einschränkungen berücksichtigt und mehrere Frames optimal in einem zusammenführt, wodurch die Bandbreite erhöht wird.
  • Network Control Model (NCM). Das neueste Protokoll. Es bietet Vorteile gegenüber EEM und optimiert die Nutzung des Busses noch weiter.

Um eines dieser Protokolle auf unserem Board zum Laufen zu bringen, gibt es, wie immer, einige Herausforderungen. Da Allwinner sich nur für die Android-Teile des Kernels interessiert, funktioniert nur Android Gadget normal — der Code, der die Verbindung zu adb, den Export des Geräts über das MTP-Protokoll und die Emulation eines Flash-Laufwerks auf Android-Geräten realisiert. Das Android Gadget unterstützt auch das RNDIS-Protokoll, allerdings ist es im Allwinner-Kernel defekt. Wenn Sie versuchen, den Kernel mit einem anderen USB Gadget zu kompilieren, wird das Gerät einfach nicht im System angezeigt, egal was Sie tun.
Um das Problem ordnungsgemäß zu lösen, müsste man den Initialisierungsort des USB-Controllers im von den Entwicklern modifizierten Android-Gadget-Code android.c finden, aber es gibt auch eine Umgehung, um zumindest die Ethernet-Emulation über USB zum Laufen zu bringen:

--- 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;

Dieser Patch aktiviert den USB-Client-Modus zwangsweise, wodurch reguläre USB-Gadgets unter Linux verwendet werden können.
Nun muss der Kernel mit diesem Patch und dem benötigten Gadget neu compiliert werden. Ich habe EEM gewählt, da es in den Tests leistungsfähiger war als NCM.
Das Armbian-Team bietet ein sehr einfaches und benutzerfreundliches Build-System für alle unterstützten Platinen in der Distribution. Es reicht aus, es herunterzuladen und unseren Patch in userpatches/kernel/sun8i-default/otg.patch, ein wenig die compile.sh anzupassen und das benötigte Gadget auszuwählen:

OpenVPN für 9,99 $* beschleunigen oder Orange Pi One in den Router integrieren

Der Kernel wird als deb-Paket erstellt, das sich problemlos auf die Platine über dpkg.
installieren lässt. Jetzt müssen Sie nur noch die Platine über USB anschließen und unseren neuen Netzwerkadapter so konfigurieren, dass er eine Adresse über DHCP erhält. Dazu sollte Folgendes in etwa hinzugefügt werden: /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'

Die MAC-Adresse sollte man besser manuell festlegen, da sie bei jedem Neustart des Geräts zufällig generiert wird, was unpraktisch und mühsam ist.
Verbinden Sie das MicroUSB-Kabel mit dem OTG-Anschluss und schließen Sie die Stromversorgung vom Router an (es kann sowohl an den Pins 2 und 3 der Leiste als auch nur an den Stromanschluss angeschlossen werden).

Jetzt müssen wir den Router konfigurieren. Es genügt, das Paket mit dem EEM-Treiber zu installieren und unser neues USB-Netzwerkgerät in die Bridge der lokalen Firewall-Zone hinzuzufügen:

opkg install kmod-usb-net-cdc-eem

OpenVPN für 9,99 $* beschleunigen oder Orange Pi One in den Router integrieren
Um den gesamten Traffic in den VPN-Tunnel zu leiten, müssen Sie entweder eine SNAT-Regel für die IP-Adresse der Platine auf der Routerseite hinzufügen oder die IP-Adresse der Platine über dnsmasq als Gateway-Adresse vergeben. Letzteres erfolgt durch Hinzufügen der folgenden Zeile zu /etc/dnsmasq.conf:

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

wobei 192.168.1.100 — die IP-Adresse Ihrer Platine. Vergessen Sie nicht, die Router-Adresse in den Netzwerkeinstellungen der Platine einzutragen!

Zur Isolierung der Kontakte der Platine von den Kontakten des Routers wurde ein Melamin-Schwamm verwendet. So sieht das Ergebnis aus:
OpenVPN für 9,99 $* beschleunigen oder Orange Pi One in den Router integrieren

Fazit

Das Netzwerk funktioniert überraschend schnell über USB: 100-120 MB/s, ich hatte mit weniger gerechnet. OpenVPN verarbeitet etwa 70 MB/s verschlüsselten Verkehr, was nicht viel ist, aber für meine Bedürfnisse ausreichend ist. Der Deckel des Routers schließt nicht richtig und lässt einen kleinen Spalt. Ästheten können die Ethernet- und USB-Host-Anschlüsse von der Platine ablöten, damit der Deckel vollständig schließt und noch Platz bleibt.
Oder besser gesagt, sich nicht mit solcher Pornografie beschäftigen und einfach kaufen Turris Omnia.

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster