Fremskynd OpenVPN for $9.99* eller integrer Orange Pi One i din router

Fremskynd OpenVPN for $9.99* eller integrer Orange Pi One i din router

Nogle af os bruger ikke internettet uden en VPN af den ene eller anden grund: nogen har brug for en dedikeret IP, og det er nemmere og billigere at købe en VPS med to IP'er end at købe en adresse fra en udbyder, nogen vil have adgang til alle hjemmesider , og ikke kun dem, der er tilladt på Den Russiske Føderations område, andre har brug for IPv6, men udbyderen leverer det ikke...
Oftest etableres en VPN-forbindelse på selve den enhed, der bliver brugt på et bestemt tidspunkt, hvilket giver mening, hvis du kun har én computer og én telefon og sjældent bruger dem på samme tid. Hvis der er mange enheder i dit hjemmenetværk, eller der for eksempel er nogle, hvor VPN ikke kan konfigureres, ville det være mere praktisk at oprette en tunnel direkte på hjemmerouteren for ikke at tænke på at opsætte hver enhed separat .

Hvis du nogensinde har installeret OpenVPN på din router, er du sikkert blevet ubehageligt overrasket over, hvor hurtigt det virker. SoC'erne for selv billige routere passerer omkring en gigabit-trafik uden problemer på grund af overførslen af ​​routing og NAT-funktioner til en separat chip designet udelukkende til denne opgave, og hovedprocessorerne i sådanne routere er ret svage, fordi Der er praktisk talt ingen belastning på dem. Dette kompromis giver dig mulighed for at opnå høj hastighed på routeren og betydeligt reducere prisen på den færdige enhed - routere med kraftfulde processorer koster flere gange mere og er placeret ikke kun som en boks til distribution af internettet, men også som en NAS, torrent downloader og multimediesystem til hjemmet.

Min router, TP-Link TL-WDR4300, kan ikke kaldes ny - modellen dukkede op i midten af ​​2012 og har en 560 MHz MIPS32 74Kc arkitekturprocessor, hvis kraft kun rækker til 20-23 Mb/s krypteret trafik via OpenVPN, som efter standard er Hastigheden på moderne hjemmeinternet er ret lav.
Hvordan kan vi øge hastigheden af ​​en krypteret tunnel? Min router er ret funktionel, understøtter 3x3 MIMO og fungerer generelt godt, jeg vil ikke ændre den.
Da det nu er kutyme at lave 10 megabyte internetsider, skrive desktop-applikationer i node.js og pakke dem ind i en 100 megabyte fil, øge computerkraften i stedet for optimering, vil vi gøre noget forfærdeligt - vi vil overføre VPN-forbindelsen til en produktiv single-board "computer" Orange Pi One, som vi vil installere i router-etuiet uden at tage eksisterende netværk og USB-porte, for kun $9.99*!
* + levering, + afgifter, + for øl, + MicroSD.

OpenVPN

Routerens processor kan ikke kaldes helt svag - den er i stand til at kryptere og hash data ved hjælp af AES-128-CBC-SHA1 algoritmen med en hastighed på 50 Mb/s, hvilket er mærkbart hurtigere end hvordan OpenVPN fungerer, og den moderne CHACHA20 stream cipher med en POLY1305 hash når endda 130 megabit pr. sekund! Hvorfor er VPN-tunnelens hastighed så lav? Det handler om kontekstskifte mellem brugerrum og kernerum: OpenVPN krypterer trafik og kommunikerer med omverdenen i brugerkonteksten, og selve routingen sker i kernekonteksten. Operativsystemet skal konstant skifte frem og tilbage for hver pakke, der modtages eller sendes, og denne operation er langsom. Dette problem er iboende i alle VPN-applikationer, der kører gennem en TUN/TAP-driver, og det kan ikke siges, at problemet med lav hastighed er forårsaget af dårlig OpenVPN-optimering (selvom der selvfølgelig er steder, der skal omarbejdes). Ikke en eneste VPN-klient til brugerrum giver endda en gigabit med kryptering deaktiveret på min bærbare computer, endsige systemer med en svag processor.

Orange PiOne

Single-board Orange Pi One fra Xunlong er det bedste bud i forhold til ydelse/pris forhold i øjeblikket. For 9.99 USD* får du en solid quad-core ARM Cortex-A7-processor, der kører (stabil) ved 1008 MHz, og overgår klart sine pris-naboer Raspberry Pi Zero og Next Thing CHIP. Det er her, fordelene slutter. Xunlong-virksomheden lægger nøjagtigt ingen opmærksomhed på softwaren på sine boards, og på det tidspunkt, hvor One blev lanceret til salg, leverede den ikke engang en board-konfigurationsfil, for ikke at nævne færdige billeder. Allwinner, en SoC-producent, er heller ikke særlig følsom over for at understøtte sit produkt. De er kun interesseret i minimal ydeevne i Android 4.4.4 OS, hvilket betyder, at vi er tvunget til at bruge 3.4 kernen med Android patches. Heldigvis er der entusiaster, der samler distributioner, redigerer kernen, skriver kode til support boards i mainline kernen, dvs. de gør faktisk arbejdet for producenten, hvilket får dette lort til at fungere acceptabelt. Til mit formål valgte jeg Armbian-distributionen; den opdateres hyppigt og bekvemt (nye kerner installeres direkte gennem pakkehåndteringen og ikke ved at kopiere filer til en speciel partition, som det normalt er tilfældet med Allwinner), og den understøtter de fleste perifere enheder i modsætning til de andre.

Router

For ikke at belaste routerens svage processor med kryptering og fremskynde vores VPN-forbindelse, kan vi flytte denne opgave til skuldrene af en mere kraftfuld Orange Pi-processor ved at forbinde den til routeren på en eller anden måde. Tilslutning enten via Ethernet eller USB kommer til at tænke på - begge disse standarder understøttes af begge enheder, men jeg ønskede ikke at tage eksisterende porte op. Heldigvis er der en vej ud.

GL850G USB-hub-chippen, som bruges i routeren, understøtter 4 USB-porte, hvoraf to ikke er kablet. Det er uklart, hvorfor producenten ikke afloddede dem, formoder jeg, for at forhindre brugere i at forbinde 4 enheder med højt strømforbrug (for eksempel harddiske) på én gang. Routerens standardstrømforsyning er ikke designet til en sådan belastning. Det er i hvert fald til vores fordel.
Fremskynd OpenVPN for $9.99* eller integrer Orange Pi One i din router
For at få en anden USB-port skal du blot lodde to ledninger til ben 8(D-) og 9(D+) eller 11(D-) og 12(D+).

Fremskynd OpenVPN for $9.99* eller integrer Orange Pi One i din router

Det er dog ikke nok blot at tilslutte to USB-enheder og håbe på, at alt fungerer af sig selv, som det ville med Ethernet. For det første skal vi få en af ​​dem til at fungere i USB Client-tilstand og ikke USB Host, og for det andet skal vi beslutte, hvordan enhederne vil opdage hinanden. Der er mange drivere til de såkaldte USB-gadgets (opkaldt efter Linux-kerneundersystemet), som giver dig mulighed for at emulere forskellige typer USB-enheder: netværksadapter, lydkort, tastatur og mus, flashdrev, kamera, konsol via en seriel. Havn. Da vores enhed fungerer med netværket, er det bedst for os at emulere en Ethernet-adapter.

Der er tre Ethernet-over-USB-standarder:

  • Fjern-NDIS (RNDIS). En forældet standard fra Microsoft, der primært bruges under Windows XP.
  • Ethernet kontrolmodel (ECM). En simpel standard, der indkapsler Ethernet-rammer i USB-pakker. Fantastisk til kablede modemer med en USB-forbindelse, hvor det er praktisk at overføre rammer uden bearbejdning, men på grund af sin enkelhed og begrænsninger af USB-bussen er det ikke særlig hurtigt.
  • Ethernet-emuleringsmodel (EEM). En smartere protokol, der tager højde for USB-begrænsninger og optimalt samler flere frames i én og dermed øger gennemløbet.
  • Netværkskontrolmodel (NCM). Den nyeste protokol. Har fordelene ved EEM og optimerer busoplevelsen yderligere.

For at få nogen af ​​disse protokoller til at fungere i vores bestyrelse, som altid, bliver vi nødt til at støde på nogle vanskeligheder. På grund af det faktum, at Allwinner kun er interesseret i Android-delene af kernen, fungerer kun Android Gadget normalt - koden, der implementerer kommunikation med adb, eksporterer enheden via MTP-protokollen og emulerer et flashdrev på Android-enheder. Android Gadget selv understøtter også RNDIS-protokollen, men den er brudt i Allwinner-kernen. Hvis du forsøger at kompilere kernen med en hvilken som helst anden USB-gadget, vil enheden simpelthen ikke vises på systemet, uanset hvad du gør.
For at løse problemet skal du på en mindelig måde finde det sted, hvor USB-controlleren initialiseres i koden til Android-gadgetten android.c, som er ændret af udviklerne, men der er også en løsning for at lave i det mindste Ethernet-emulering over USB arbejde:

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

Denne patch fremtvinger USB-klienttilstand, så du kan bruge almindelige USB-gadgets fra Linux.
Nu skal du genopbygge kernen med denne patch og den nødvendige gadget. Jeg valgte EEM fordi... Ifølge testresultater viste det sig at være mere produktivt end NCM.
Armbian-holdet sørger for meget enkelt og praktisk monteringssystem for alle støttede tavler i fordelingen. Bare download det, sæt vores patch ind userpatches/kernel/sun8i-default/otg.patch, rediger lidt compile.sh og vælg den ønskede gadget:

Fremskynd OpenVPN for $9.99* eller integrer Orange Pi One i din router

Kernen vil blive kompileret til en deb-pakke, som ikke vil være svær at installere på boardet via dpkg.
Tilbage er blot at tilslutte kortet via USB og konfigurere vores nye netværksadapter til at modtage en adresse via DHCP. For at gøre dette skal du tilføje noget som det følgende /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'

Det er bedre at indstille MAC-adressen manuelt, fordi... det vil være tilfældigt hver gang enheden genstartes, hvilket er ubelejligt og besværligt.
Vi forbinder MicroUSB-kablet til OTG-stikket, tilslutter strøm fra routeren (det kan leveres til ben 2 og 3 på kammen og ikke kun til strømstikket).

Det eneste, der er tilbage, er at konfigurere routeren. Det er nok at installere pakken med EEM-driveren og tilføje vores nye USB-netværksenhed til broen af ​​den lokale firewall-zone:

opkg install kmod-usb-net-cdc-eem

Fremskynd OpenVPN for $9.99* eller integrer Orange Pi One i din router
For at dirigere al trafik til VPN-tunnelen skal du enten tilføje en SNAT-regel til kortets IP-adresse på routersiden eller distribuere kortets adresse som en gateway-adresse via dnsmasq. Sidstnævnte gøres ved at tilføje følgende linje til /etc/dnsmasq.conf:

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

где 192.168.1.100 - IP-adressen på dit bord. Glem ikke at indtaste routeradressen i netværksindstillingerne på selve boardet!

En melaminsvamp blev brugt til at isolere kortets kontakter fra routerkontakterne. Det viste sig noget som dette:
Fremskynd OpenVPN for $9.99* eller integrer Orange Pi One i din router

Konklusion

Netværket via USB fungerer overraskende hurtigt: 100-120 Mb/s, jeg forventede mindre. OpenVPN passerer omkring 70 Mb/s krypteret trafik, hvilket heller ikke er ret meget, men nok til mit behov. Fræserens låg lukker ikke tæt, hvilket efterlader et lille hul. Æsteter kan fjerne Ethernet- og USB Host-stikkene fra kortet, hvilket vil tillade låget at lukke helt og stadig have lidt plads tilbage.
Det er bedre ikke at engagere sig i sådan pornografi og købe Turris Omnia.

Kilde: www.habr.com

Tilføj en kommentar