Accélérez OpenVPN pour 9.99 $* ou intégrez Orange Pi One à votre routeur

Accélérez OpenVPN pour 9.99 $* ou intégrez Orange Pi One à votre routeur

Certains d'entre nous n'utilisent pas Internet sans VPN pour une raison ou une autre : quelqu'un a besoin d'une IP dédiée, et il est plus facile et moins cher d'acheter un VPS avec deux IP que d'acheter une adresse auprès d'un fournisseur, quelqu'un veut accéder à tous les sites Web. , et pas seulement ceux autorisés sur le territoire de la Fédération de Russie, d'autres ont besoin d'IPv6, mais le fournisseur ne le fournit pas...
Le plus souvent, une connexion VPN est établie sur l'appareil lui-même qui est utilisé à un moment donné, ce qui est logique si vous n'avez qu'un seul ordinateur et un seul téléphone et que vous les utilisez rarement en même temps. S'il y a de nombreux appareils dans votre réseau domestique, ou, par exemple, s'il y en a sur lesquels le VPN ne peut pas être configuré, il serait plus pratique de créer un tunnel directement sur le routeur domestique pour ne pas penser à configurer chaque appareil séparément. .

Si vous avez déjà installé OpenVPN sur votre routeur, vous avez probablement été désagréablement surpris par la rapidité avec laquelle il fonctionne. Les SoC des routeurs, même bon marché, traversent sans problème un trafic d'environ un gigabit, en raison du transfert des fonctions de routage et de NAT vers une puce distincte conçue exclusivement pour cette tâche, et les processeurs principaux de ces routeurs sont assez faibles, car Il n'y a pratiquement aucune charge sur eux. Ce compromis vous permet d'atteindre une vitesse élevée du routeur et de réduire considérablement le prix de l'appareil fini - les routeurs dotés de processeurs puissants coûtent plusieurs fois plus cher et se positionnent non seulement comme un boîtier de distribution d'Internet, mais également comme un NAS, un torrent. téléchargeur et système multimédia domestique.

Mon routeur, TP-Link TL-WDR4300, ne peut pas être qualifié de nouveau - le modèle est apparu mi-2012 et dispose d'un processeur d'architecture MIPS560 32Kc à 74 MHz, dont la puissance n'est suffisante que pour 20-23 Mb/s de trafic crypté. via OpenVPN, qui selon les normes, la vitesse de l'Internet domestique moderne est assez faible.
Comment augmenter la vitesse d’un tunnel crypté ? Mon routeur est assez fonctionnel, prend en charge le MIMO 3x3 et fonctionne généralement bien, je ne voudrais pas le changer.
Puisqu'il est désormais d'usage de créer des pages Internet de 10 mégaoctets, d'écrire des applications de bureau dans node.js et de les regrouper dans un fichier de 100 mégaoctets, d'augmenter la puissance de calcul au lieu de l'optimisation, nous ferons quelque chose de terrible - nous transférerons la connexion VPN vers un « ordinateur » Orange Pi One productif à carte unique, que nous installerons dans le boîtier du routeur sans utiliser les ports réseau et USB existants, pour seulement 9.99 $* !
* + livraison, + taxes, + pour la bière, + MicroSD.

OpenVPN

Le processeur du routeur ne peut pas être qualifié de complètement faible - il est capable de crypter et de hacher des données à l'aide de l'algorithme AES-128-CBC-SHA1 à une vitesse de 50 Mb/s, ce qui est nettement plus rapide que le fonctionnement d'OpenVPN et du flux CHACHA20 moderne. le chiffrement avec un hachage POLY1305 atteint même 130 mégabits par seconde ! Pourquoi la vitesse du tunnel VPN est-elle si faible ? Tout est question de changement de contexte entre l'espace utilisateur et l'espace noyau : OpenVPN crypte le trafic et communique avec le monde extérieur dans le contexte utilisateur, et le routage lui-même se produit dans le contexte noyau. Le système d'exploitation doit constamment basculer pour chaque paquet reçu ou transmis, et cette opération est lente. Ce problème est inhérent à toutes les applications VPN exécutées via un pilote TUN/TAP, et on ne peut pas dire que le problème de faible vitesse soit causé par une mauvaise optimisation d'OpenVPN (même si, bien sûr, il y a des endroits qui doivent être retravaillés). Pas un seul client VPN en espace utilisateur ne fournit ne serait-ce qu'un gigabit avec le cryptage désactivé sur mon ordinateur portable, encore moins sur les systèmes dotés d'un processeur faible.

Orange Pi Un

L'Orange Pi One monocarte de Xunlong est la meilleure offre en termes de rapport performance/prix du moment. Pour 9.99 $*, vous obtenez un solide processeur ARM Cortex-A7 quadricœur fonctionnant (stable) à 1008 4.4.4 MHz et surpasse clairement ses voisins en termes de prix, le Raspberry Pi Zero et le Next Thing CHIP. C'est là que s'arrêtent les avantages. La société Xunlong n'accorde absolument aucune attention au logiciel de ses cartes, et au moment du lancement de la One à la vente, elle ne fournissait même pas de fichier de configuration de la carte, sans parler des images toutes faites. Allwinner, un fabricant de SoC, n'est pas non plus particulièrement sensible au support de son produit. Ils ne s'intéressent qu'aux performances minimales du système d'exploitation Android 3.4, ce qui nous oblige à utiliser le noyau XNUMX avec les correctifs Android. Heureusement, il y a des passionnés qui assemblent des distributions, éditent le noyau, écrivent du code pour prendre en charge les cartes dans le noyau principal, c'est-à-dire ils font en fait le travail pour le fabricant, ce qui rend cette merde acceptable. Pour mes besoins, j'ai choisi la distribution Armbian ; elle est fréquemment et facilement mise à jour (les nouveaux noyaux sont installés directement via le gestionnaire de paquets, et non en copiant les fichiers sur une partition spéciale, comme c'est généralement le cas avec Allwinner), et elle prend en charge la plupart des périphériques, contrairement aux autres.

Routeur

Afin de ne pas charger le processeur faible du routeur avec le cryptage et d'accélérer notre connexion VPN, nous pouvons confier cette tâche à un processeur Orange Pi plus puissant en le connectant au routeur d'une manière ou d'une autre. La connexion via Ethernet ou USB me vient à l’esprit – ces deux normes sont prises en charge par les deux appareils, mais je ne voulais pas utiliser les ports existants. Heureusement, il existe une issue.

La puce du hub USB GL850G, utilisée dans le routeur, prend en charge 4 ports USB, dont deux non câblés. On ne sait pas pourquoi le fabricant ne les a pas dessoudés, je suppose, pour empêcher les utilisateurs de connecter 4 appareils à forte consommation de courant (par exemple des disques durs) à la fois. L'alimentation standard du routeur n'est pas conçue pour une telle charge. En tout cas, c'est à notre avantage.
Accélérez OpenVPN pour 9.99 $* ou intégrez Orange Pi One à votre routeur
Afin d'obtenir un autre port USB, il vous suffit de souder deux fils aux broches 8(D-) et 9(D+) ou 11(D-) et 12(D+).

Accélérez OpenVPN pour 9.99 $* ou intégrez Orange Pi One à votre routeur

Cependant, il ne suffit pas de simplement brancher deux périphériques USB et d'espérer que tout fonctionnera tout seul, comme avec Ethernet. Premièrement, nous devons faire fonctionner l'un d'entre eux en mode client USB, et non en mode hôte USB, et deuxièmement, nous devons décider comment les appareils se détecteront mutuellement. Il existe de nombreux pilotes pour les soi-disant gadgets USB (du nom du sous-système du noyau Linux), qui vous permettent d'émuler différents types de périphériques USB : adaptateur réseau, carte audio, clavier et souris, clé USB, appareil photo, console via une connexion série. port. Étant donné que notre appareil fonctionnera avec le réseau, l’émulation d’un adaptateur Ethernet est la meilleure solution pour nous.

Il existe trois normes Ethernet sur USB :

  • NDIS distant (RNDIS). Un standard obsolète de Microsoft, utilisé principalement sous Windows XP.
  • Modèle de contrôle Ethernet (ECM). Une norme simple qui encapsule les trames Ethernet dans les paquets USB. Idéal pour les modems filaires avec connexion USB, où il est pratique de transférer des images sans traitement, mais en raison de sa simplicité et des limites du bus USB, ce n'est pas très rapide.
  • Modèle d'émulation Ethernet (EEM). Un protocole plus intelligent qui prend en compte les limitations USB et regroupe de manière optimale plusieurs trames en une seule, augmentant ainsi le débit.
  • Modèle de contrôle de réseau (NCM). Le protocole le plus récent. Présente les avantages de l’EEM et optimise davantage l’expérience du bus.

Pour que l'un de ces protocoles fonctionne sur notre tableau, comme toujours, nous devrons rencontrer quelques difficultés. Étant donné qu'Allwinner ne s'intéresse qu'aux parties Android du noyau, seul Android Gadget fonctionne normalement - le code qui implémente la communication avec adb, exporte l'appareil via le protocole MTP et émule un lecteur flash sur les appareils Android. Android Gadget lui-même prend également en charge le protocole RNDIS, mais il est défectueux dans le noyau Allwinner. Si vous essayez de compiler le noyau avec un autre gadget USB, le périphérique n'apparaîtra tout simplement pas sur le système, quoi que vous fassiez.
Pour résoudre le problème, à l'amiable, il faut trouver l'endroit où le contrôleur USB est initialisé dans le code du gadget Android android.c modifié par les développeurs, mais il existe aussi une solution de contournement pour faire au moins une émulation Ethernet via Travail 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;

Ce correctif force le mode client USB, vous permettant d'utiliser des gadgets USB classiques de Linux.
Vous devez maintenant reconstruire le noyau avec ce patch et le gadget nécessaire. J'ai choisi EEM parce que... Selon les résultats des tests, il s'est avéré plus productif que NCM.
L'équipe Armbian fournit système de montage très simple et pratique pour toutes les cartes prises en charge dans la distribution. Téléchargez-le simplement, installez notre patch userpatches/kernel/sun8i-default/otg.patch, édite un peu compile.sh et sélectionnez le gadget souhaité :

Accélérez OpenVPN pour 9.99 $* ou intégrez Orange Pi One à votre routeur

Le noyau sera compilé dans un package deb, qui ne sera pas difficile à installer sur la carte via dpkg.
Il ne reste plus qu'à connecter la carte via USB et configurer notre nouvel adaptateur réseau pour recevoir une adresse via DHCP. Pour ce faire, vous devez ajouter quelque chose comme ce qui suit à /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'

Il est préférable de définir l'adresse MAC manuellement, car... ce sera aléatoire à chaque redémarrage de l'appareil, ce qui est gênant et gênant.
Nous connectons le câble MicroUSB au connecteur OTG, connectons l'alimentation du routeur (elle peut être fournie aux broches 2 et 3 du peigne, et pas seulement au connecteur d'alimentation).

Il ne reste plus qu'à configurer le routeur. Il suffit d'installer le package avec le pilote EEM et d'ajouter notre nouveau périphérique réseau USB au pont de la zone pare-feu local :

opkg install kmod-usb-net-cdc-eem

Accélérez OpenVPN pour 9.99 $* ou intégrez Orange Pi One à votre routeur
Pour acheminer tout le trafic vers le tunnel VPN, vous devez soit ajouter une règle SNAT à l'adresse IP de la carte côté routeur, soit distribuer l'adresse de la carte en tant qu'adresse de passerelle via dnsmasq. Cette dernière se fait en ajoutant la ligne suivante à /etc/dnsmasq.conf:

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

192.168.1.100 — Adresse IP de votre carte. N'oubliez pas de saisir l'adresse du routeur dans les paramètres réseau de la carte elle-même !

Une éponge de mélamine a été utilisée pour isoler les contacts de la carte des contacts du routeur. Il s'est avéré quelque chose comme ceci :
Accélérez OpenVPN pour 9.99 $* ou intégrez Orange Pi One à votre routeur

Conclusion

Le réseau via USB fonctionne étonnamment vite : 100-120 Mb/s, je m'attendais à moins. OpenVPN transite environ 70 Mb/s de trafic crypté, ce qui n'est pas non plus beaucoup, mais suffisant pour mes besoins. Le couvercle du routeur ne se ferme pas hermétiquement, laissant un petit espace. Les esthètes peuvent retirer les connecteurs Ethernet et USB Host de la carte, ce qui permettra au couvercle de se fermer complètement et de laisser encore un peu d'espace.
Il vaut mieux ne pas se livrer à une telle pornographie et acheter Turris Omnia.

Source: habr.com

Ajouter un commentaire