Beschleunigen Sie OpenVPN für 9.99 $* oder integrieren Sie Orange Pi One in Ihren Router

Beschleunigen Sie OpenVPN für 9.99 $* oder integrieren Sie Orange Pi One in Ihren Router

Einige von uns nutzen das Internet aus dem einen oder anderen Grund nicht ohne VPN: Jemand braucht eine dedizierte IP, und es ist einfacher und billiger, einen VPS mit zwei IPs zu kaufen, als eine Adresse von einem Anbieter zu kaufen, jemand möchte auf alle Websites zugreifen , und nicht nur diejenigen, die auf dem Territorium der Russischen Föderation erlaubt sind, auch andere benötigen IPv6, aber der Anbieter stellt es nicht zur Verfügung...
Am häufigsten wird eine VPN-Verbindung auf dem Gerät selbst hergestellt, das gerade verwendet wird. Dies ist sinnvoll, wenn Sie nur einen Computer und ein Telefon haben und diese selten gleichzeitig verwenden. Befinden sich viele Geräte in Ihrem Heimnetzwerk oder gibt es beispielsweise einige, auf denen VPN nicht konfiguriert werden kann, wäre es bequemer, einen Tunnel direkt auf dem Heimrouter zu erstellen, um nicht daran zu denken, jedes Gerät einzeln einzurichten .

Wenn Sie OpenVPN jemals auf Ihrem Router installiert haben, waren Sie wahrscheinlich unangenehm überrascht, wie schnell es funktioniert. Die SoCs selbst günstiger Router überstehen aufgrund der Übertragung von Routing- und NAT-Funktionen auf einen separaten, ausschließlich für diese Aufgabe konzipierten Chip problemlos etwa einen Gigabit-Verkehr, und die Hauptprozessoren solcher Router sind recht schwach, weil Sie sind praktisch nicht belastet. Mit diesem Kompromiss können Sie eine hohe Geschwindigkeit des Routers erreichen und den Preis des fertigen Geräts deutlich senken – Router mit leistungsstarken Prozessoren kosten ein Vielfaches und sind nicht nur als Box zur Verteilung des Internets, sondern auch als NAS, Torrent positioniert Downloader und Heim-Multimedia-System.

Mein Router, TP-Link TL-WDR4300, kann nicht als neu bezeichnet werden – das Modell erschien Mitte 2012 und verfügt über einen 560-MHz-MIPS32-74Kc-Architekturprozessor, dessen Leistung nur für 20-23 Mbit/s verschlüsselten Datenverkehrs ausreicht über OpenVPN, was im Vergleich zur Geschwindigkeit des modernen Heim-Internets recht niedrig ist.
Wie können wir die Geschwindigkeit eines verschlüsselten Tunnels erhöhen? Mein Router ist recht funktionsfähig, unterstützt 3x3 MIMO und funktioniert im Allgemeinen gut, ich würde ihn nicht ändern wollen.
Da es mittlerweile üblich ist, 10-Megabyte-Internetseiten zu erstellen, Desktop-Anwendungen in node.js zu schreiben und sie in eine 100-Megabyte-Datei zu packen, die Rechenleistung zu erhöhen statt zu optimieren, werden wir etwas Schreckliches tun – wir werden die VPN-Verbindung dorthin übertragen ein produktiver Einplatinen-„Computer“ Orange Pi One, den wir für nur 9.99 $* in das Routergehäuse einbauen, ohne vorhandene Netzwerk- und USB-Anschlüsse zu beanspruchen!
* + Lieferung, + Steuern, + für Bier, + MicroSD.

OpenVPN

Der Prozessor des Routers kann nicht als völlig schwach bezeichnet werden – er ist in der Lage, Daten mithilfe des AES-128-CBC-SHA1-Algorithmus mit einer Geschwindigkeit von 50 Mbit/s zu verschlüsseln und zu hashen, was deutlich schneller ist als die Funktionsweise von OpenVPN und den modernen CHACHA20-Stream Die Verschlüsselung mit einem POLY1305-Hash erreicht sogar 130 Megabit pro Sekunde! Warum ist die Geschwindigkeit des VPN-Tunnels so niedrig? Es geht um den Kontextwechsel zwischen User-Space und Kernel-Space: OpenVPN verschlüsselt den Datenverkehr und kommuniziert mit der Außenwelt im User-Kontext, das Routing selbst erfolgt im Kernel-Kontext. Das Betriebssystem muss bei jedem empfangenen oder gesendeten Paket ständig hin und her wechseln, und dieser Vorgang ist langsam. Dieses Problem tritt bei allen VPN-Anwendungen auf, die über einen TUN/TAP-Treiber laufen, und es kann nicht gesagt werden, dass das Problem der niedrigen Geschwindigkeit durch eine schlechte OpenVPN-Optimierung verursacht wird (obwohl es natürlich Stellen gibt, die überarbeitet werden müssen). Auf meinem Laptop bietet kein einziger Userspace-VPN-Client auch nur ein Gigabit mit deaktivierter Verschlüsselung, geschweige denn Systeme mit einem schwachen Prozessor.

Orange PiOne

Das Single-Board Orange Pi One von Xunlong ist derzeit das beste Angebot im Hinblick auf das Leistungs-/Preisverhältnis. Für 9.99 $* erhalten Sie einen soliden Quad-Core-ARM-Cortex-A7-Prozessor, der (stabil) mit 1008 MHz läuft und seine preislichen Nachbarn Raspberry Pi Zero und Next Thing CHIP deutlich übertrifft. Hier enden die Vorteile. Das Unternehmen Xunlong schenkt der Software seiner Boards überhaupt keine Beachtung, und als das One zum Verkauf angeboten wurde, stellte es nicht einmal eine Board-Konfigurationsdatei zur Verfügung, geschweige denn vorgefertigte Bilder. Auch Allwinner, ein SoC-Hersteller, legt keinen besonderen Wert auf die Unterstützung seines Produkts. Sie sind nur an minimaler Leistung im Android 4.4.4-Betriebssystem interessiert, was bedeutet, dass wir gezwungen sind, den 3.4-Kernel mit Android-Patches zu verwenden. Glücklicherweise gibt es Enthusiasten, die Distributionen zusammenstellen, den Kernel bearbeiten und Code schreiben, um Boards im Hauptkernel zu unterstützen, d. h. Sie erledigen tatsächlich die Arbeit für den Hersteller, sodass dieser Mist akzeptabel funktioniert. Für meine Zwecke habe ich die Armbian-Distribution gewählt; sie wird häufig und bequem aktualisiert (neue Kernel werden direkt über den Paketmanager installiert und nicht durch Kopieren von Dateien auf eine spezielle Partition, wie es normalerweise bei Allwinner der Fall 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 die Schultern eines leistungsstärkeren Orange Pi-Prozessors verlagern, indem wir ihn auf irgendeine Weise mit dem Router verbinden. Da fällt mir die Verbindung entweder über Ethernet oder USB ein – beide Standards werden von beiden Geräten unterstützt, ich wollte aber keine vorhandenen Anschlüsse beanspruchen. Zum Glück gibt es einen Ausweg.

Der GL850G USB-Hub-Chip, der im Router verwendet wird, unterstützt 4 USB-Anschlüsse, von denen zwei nicht verkabelt sind. Es ist unklar, warum der Hersteller sie nicht abgelötet hat, um zu verhindern, dass Nutzer gleichzeitig 4 Geräte mit hohem Stromverbrauch (z. B. Festplatten) anschließen. Das Standard-Netzteil des Routers ist für eine solche Belastung nicht ausgelegt. Das ist auf jeden Fall zu unserem Vorteil.
Beschleunigen Sie OpenVPN für 9.99 $* oder integrieren Sie Orange Pi One in Ihren Router
Um einen weiteren USB-Anschluss zu erhalten, müssen Sie lediglich zwei Drähte an die Pins 8 (D-) und 9 (D+) oder 11 (D-) und 12 (D+) anlöten.

Beschleunigen Sie OpenVPN für 9.99 $* oder integrieren Sie Orange Pi One in Ihren Router

Allerdings reicht es nicht aus, einfach zwei USB-Geräte anzuschließen und zu hoffen, dass alles von alleine klappt, wie es bei Ethernet der Fall wäre. Erstens müssen wir dafür sorgen, dass eines davon im USB-Client-Modus und nicht im USB-Host-Modus arbeitet, und zweitens müssen wir entscheiden, wie die Geräte einander erkennen. Es gibt viele Treiber für die sogenannten USB-Gadgets (benannt nach dem Linux-Kernel-Subsystem), mit denen Sie verschiedene Arten von USB-Geräten emulieren können: Netzwerkadapter, Audiokarte, Tastatur und Maus, Flash-Laufwerk, Kamera, Konsole über eine serielle Schnittstelle Hafen. Da unser Gerät mit dem Netzwerk funktioniert, ist die Emulation eines Ethernet-Adapters für uns am besten.

Es gibt drei Ethernet-over-USB-Standards:

  • Remote-NDIS (RNDIS). Ein veralteter Standard von Microsoft, der hauptsächlich unter Windows XP verwendet wird.
  • Ethernet-Steuerungsmodell (ECM). Ein einfacher Standard, der Ethernet-Frames in USB-Paketen kapselt. Ideal für kabelgebundene Modems mit USB-Anschluss, bei denen es praktisch ist, Frames ohne Verarbeitung zu übertragen, aber aufgrund der Einfachheit und der Einschränkungen des USB-Busses nicht sehr schnell ist.
  • Ethernet-Emulationsmodell (EEM). Ein intelligenteres Protokoll, das USB-Einschränkungen berücksichtigt und mehrere Frames optimal zu einem zusammenfasst und so den Durchsatz erhöht.
  • Netzwerksteuerungsmodell (NCM). Das neueste Protokoll. Verfügt über die Vorteile von EEM und optimiert das Buserlebnis weiter.

Um eines dieser Protokolle auf unserem Board zum Laufen zu bringen, müssen wir wie immer auf einige Schwierigkeiten stoßen. Da Allwinner nur an den Android-Teilen des Kernels interessiert ist, funktioniert nur Android Gadget normal – der Code, der die Kommunikation mit ADB implementiert, das Gerät über das MTP-Protokoll exportiert und ein Flash-Laufwerk auf Android-Geräten emuliert. Android Gadget selbst unterstützt auch das RNDIS-Protokoll, es ist jedoch im Allwinner-Kernel fehlerhaft. Wenn Sie versuchen, den Kernel mit einem anderen USB-Gadget zu kompilieren, wird das Gerät einfach nicht auf dem System angezeigt, egal was Sie tun.
Um das Problem auf einvernehmliche Weise zu lösen, müssen Sie im von den Entwicklern geänderten Code des Android-Gadgets android.c die Stelle finden, an der der USB-Controller initialisiert wird. Es gibt jedoch auch einen Workaround, um zumindest die Ethernet-Emulation zu übernehmen USB-Arbeit:

--- 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 erzwingt den USB-Client-Modus, sodass Sie normale USB-Gadgets unter Linux verwenden können.
Jetzt sollten Sie den Kernel mit diesem Patch und dem nötigen Gadget neu erstellen. Ich habe mich für EEM entschieden, weil... Den Testergebnissen zufolge erwies es sich als produktiver als NCM.
Das Armbian-Team sorgt dafür sehr einfaches und praktisches Montagesystem für alle unterstützten Boards in der Distribution. Laden Sie es einfach herunter und installieren Sie unseren Patch userpatches/kernel/sun8i-default/otg.patch, ein wenig bearbeiten compile.sh und wählen Sie das gewünschte Gadget aus:

Beschleunigen Sie OpenVPN für 9.99 $* oder integrieren Sie Orange Pi One in Ihren Router

Der Kernel wird in ein Deb-Paket kompiliert, dessen Installation auf dem Board nicht schwierig sein wird dpkg.
Jetzt müssen Sie nur noch das Board über USB anschließen und unseren neuen Netzwerkadapter so konfigurieren, dass er eine Adresse über DHCP erhält. Dazu müssen Sie etwas wie das Folgende hinzufügen /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 ist besser, die MAC-Adresse manuell einzustellen, weil... Es wird bei jedem Neustart des Geräts zufällig erfolgen, was unpraktisch und problematisch ist.
Wir schließen das MicroUSB-Kabel an den OTG-Anschluss an und schließen den Strom vom Router an (er kann an die Pins 2 und 3 des Kamms und nicht nur an den Stromanschluss geliefert werden).

Es bleibt nur noch die Konfiguration des Routers. Es reicht aus, das Paket mit dem EEM-Treiber zu installieren und unser neues USB-Netzwerkgerät zur Bridge der lokalen Firewall-Zone hinzuzufügen:

opkg install kmod-usb-net-cdc-eem

Beschleunigen Sie OpenVPN für 9.99 $* oder integrieren Sie Orange Pi One in Ihren Router
Um den gesamten Datenverkehr zum VPN-Tunnel zu leiten, müssen Sie entweder auf der Routerseite eine SNAT-Regel zur IP-Adresse des Boards hinzufügen oder die Adresse des Boards als Gateway-Adresse über dnsmasq verteilen. Letzteres geschieht durch das Hinzufügen der folgenden Zeile zu /etc/dnsmasq.conf:

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

wo 192.168.1.100 — IP-Adresse Ihres Boards. Vergessen Sie nicht, die Router-Adresse in den Netzwerkeinstellungen auf dem Board selbst einzugeben!

Um die Platinenkontakte von den Routerkontakten zu isolieren, wurde ein Melaminschwamm verwendet. Es stellte sich ungefähr so ​​heraus:
Beschleunigen Sie OpenVPN für 9.99 $* oder integrieren Sie Orange Pi One in Ihren Router

Abschluss

Das Netzwerk über USB funktioniert überraschend schnell: 100-120 Mbit/s, ich habe weniger erwartet. OpenVPN leitet etwa 70 Mbit/s verschlüsselten Datenverkehr durch, was ebenfalls nicht sehr viel ist, aber für meine Bedürfnisse ausreichend. Der Deckel des Routers schließt nicht richtig, so dass ein kleiner Spalt entsteht. Ästheten können die Ethernet- und USB-Host-Anschlüsse von der Platine entfernen, sodass sich der Deckel vollständig schließen lässt und noch etwas Platz übrig bleibt.
Es ist besser, sich nicht auf solche Pornografie einzulassen und sie zu kaufen Turris Omnia.

Source: habr.com

Kommentar hinzufügen