Pabilisin ang OpenVPN sa halagang $9.99* o isama ang Orange Pi One sa iyong router

Pabilisin ang OpenVPN sa halagang $9.99* o isama ang Orange Pi One sa iyong router

Ang ilan sa atin ay hindi gumagamit ng Internet nang walang VPN para sa isang kadahilanan o iba pa: ang isang tao ay nangangailangan ng isang nakalaang IP, at ito ay mas madali at mas mura bumili ng isang VPS na may dalawang IP kaysa sa pagbili ng isang address mula sa isang provider, may gustong ma-access ang lahat ng mga website , at hindi lamang sa mga pinapayagan sa teritoryo ng Russian Federation, ang iba ay nangangailangan ng IPv6, ngunit hindi ito ibinibigay ng provider...
Kadalasan, ang isang koneksyon sa VPN ay itinatag sa mismong device na ginagamit sa isang tiyak na sandali, na makatuwiran kung mayroon ka lamang isang computer at isang telepono at bihirang gamitin ang mga ito sa parehong oras. Kung maraming device sa iyong home network, o, halimbawa, may ilan kung saan hindi ma-configure ang VPN, magiging mas maginhawang gumawa ng tunnel nang direkta sa home router para hindi mag-isip tungkol sa pagse-set up ng bawat device nang hiwalay. .

Kung na-install mo na ang OpenVPN sa iyong router, malamang na hindi ka nagulat sa kung gaano ito kabilis gumana. Ang mga SoC ng kahit na murang mga router ay dumaan sa halos isang gigabit na trapiko nang walang anumang mga problema, dahil sa paglipat ng routing at NAT function sa isang hiwalay na chip na idinisenyo nang eksklusibo para sa gawaing ito, at ang mga pangunahing processor ng naturang mga router ay medyo mahina, dahil Halos walang load sa kanila. Ang kompromiso na ito ay nagbibigay-daan sa iyo upang makamit ang mataas na bilis ng router at makabuluhang bawasan ang presyo ng tapos na aparato - ang mga router na may makapangyarihang mga processor ay nagkakahalaga ng maraming beses, at nakaposisyon hindi lamang bilang isang kahon para sa pamamahagi ng Internet, kundi pati na rin bilang isang NAS, torrent. downloader at home multimedia system.

Ang aking router, TP-Link TL-WDR4300, ay hindi matatawag na bago - lumitaw ang modelo noong kalagitnaan ng 2012, at may 560 MHz MIPS32 74Kc na processor ng arkitektura, ang kapangyarihan nito ay sapat lamang para sa 20-23 Mb/s ng naka-encrypt na trapiko sa pamamagitan ng OpenVPN, na ayon sa mga pamantayan Ang bilis ng modernong home Internet ay medyo mababa.
Paano natin mapapataas ang bilis ng isang naka-encrypt na lagusan? Ang aking router ay medyo gumagana, sumusuporta sa 3x3 MIMO, at sa pangkalahatan ay gumagana nang maayos, hindi ko nais na baguhin ito.
Dahil nakaugalian na ngayon na gumawa ng 10-megabyte na mga pahina sa Internet, magsulat ng mga desktop application sa node.js at i-pack ang mga ito sa isang 100-megabyte na file, dagdagan ang kapangyarihan ng pag-compute sa halip na pag-optimize, gagawa kami ng isang bagay na kakila-kilabot - ililipat namin ang koneksyon sa VPN sa isang produktibong single-board na "computer" Orange Pi One, na i-install namin sa case ng router nang hindi gumagamit ng mga kasalukuyang network at USB port, sa halagang $9.99* lang!
* + paghahatid, + buwis, + para sa beer, + MicroSD.

OpenVPN

Ang processor ng router ay hindi matatawag na ganap na mahina - ito ay may kakayahang mag-encrypt at mag-hash ng data gamit ang AES-128-CBC-SHA1 algorithm sa bilis na 50 Mb/s, na kapansin-pansing mas mabilis kaysa sa kung paano gumagana ang OpenVPN, at ang modernong CHACHA20 stream Ang cipher na may POLY1305 hash ay umabot pa sa 130 megabits bawat segundo! Bakit ang bilis ng VPN tunnel ay napakababa? Ang lahat ay tungkol sa paglipat ng konteksto sa pagitan ng espasyo ng gumagamit at espasyo ng kernel: Ini-encrypt ng OpenVPN ang trapiko at nakikipag-ugnayan sa labas ng mundo sa konteksto ng gumagamit, at ang pagruruta mismo ay nangyayari sa konteksto ng kernel. Ang operating system ay kailangang patuloy na lumipat pabalik-balik para sa bawat packet na natanggap o ipinadala, at ang operasyong ito ay mabagal. Ang problemang ito ay likas sa lahat ng mga aplikasyon ng VPN na tumatakbo sa pamamagitan ng isang TUN/TAP driver, at hindi masasabi na ang problema ng mababang bilis ay sanhi ng mahinang pag-optimize ng OpenVPN (bagaman, siyempre, may mga lugar na kailangang i-rework). Wala ni isang userspace VPN client ang nagbibigay ng kahit isang gigabit na may naka-disable na encryption sa aking laptop, pabayaan ang mga system na may mahinang processor.

Orange PiOne

Ang single-board na Orange Pi One mula sa Xunlong ay ang pinakamahusay na alok sa mga tuntunin ng ratio ng pagganap/presyo sa ngayon. Para sa $9.99* makakakuha ka ng solid quad-core ARM Cortex-A7 processor na tumatakbo (stable) sa 1008 MHz, at malinaw na nahihigitan ang performance ng mga price-point na kapitbahay nito na Raspberry Pi Zero at Next Thing CHIP. Dito nagtatapos ang mga pakinabang. Ang kumpanya ng Xunlong ay nagbabayad ng eksaktong zero pansin sa software ng mga board nito, at sa oras na ang One ay inilunsad para sa pagbebenta, hindi man lang ito nagbigay ng board configuration file, hindi pa banggitin ang mga yari na larawan. Ang Allwinner, isang tagagawa ng SoC, ay hindi rin partikular na sensitibo sa pagsuporta sa produkto nito. Interesado lang sila sa minimal na performance sa Android 4.4.4 OS, na nangangahulugang napipilitan kaming gamitin ang 3.4 kernel na may mga Android patch. Sa kabutihang palad, may mga mahilig mag-assemble ng mga distribusyon, i-edit ang kernel, magsulat ng code upang suportahan ang mga board sa pangunahing linya ng kernel, i.e. talagang ginagawa nila ang trabaho para sa tagagawa, na ginagawang katanggap-tanggap ang crap na ito. Para sa aking mga layunin, pinili ko ang pamamahagi ng Armbian; ito ay madalas at maginhawang na-update (ang mga bagong kernel ay direktang naka-install sa pamamagitan ng manager ng package, at hindi sa pamamagitan ng pagkopya ng mga file sa isang espesyal na partisyon, tulad ng karaniwang kaso sa Allwinner), at ito ay sumusuporta sa karamihan. peripheral, hindi katulad ng iba.

Ruta

Upang hindi ma-load ang mahinang processor ng router na may encryption at mapabilis ang aming koneksyon sa VPN, maaari naming ilipat ang gawaing ito sa mga balikat ng isang mas malakas na processor ng Orange Pi sa pamamagitan ng pagkonekta nito sa router sa ilang paraan. Naiisip ko ang pagkonekta sa alinman sa pamamagitan ng Ethernet o USB - pareho sa mga pamantayang ito ay sinusuportahan ng parehong device, ngunit hindi ko gustong gumamit ng mga kasalukuyang port. Sa kabutihang palad, may isang paraan out.

Ang GL850G USB hub chip, na ginagamit sa router, ay sumusuporta sa 4 na USB port, dalawa sa mga ito ay hindi naka-wire. Hindi malinaw kung bakit hindi inalis ng tagagawa ang mga ito, sa palagay ko, upang maiwasan ang mga user na kumonekta sa 4 na device na may mataas na kasalukuyang pagkonsumo (halimbawa, mga hard drive) nang sabay-sabay. Ang karaniwang power supply ng router ay hindi idinisenyo para sa gayong pagkarga. Sa anumang kaso, ito ay para sa aming kalamangan.
Pabilisin ang OpenVPN sa halagang $9.99* o isama ang Orange Pi One sa iyong router
Upang makakuha ng isa pang USB port, kailangan mo lamang maghinang ng dalawang wire sa mga pin 8(D-) at 9(D+) o 11(D-) at 12(D+).

Pabilisin ang OpenVPN sa halagang $9.99* o isama ang Orange Pi One sa iyong router

Gayunpaman, hindi sapat na magsaksak lamang ng dalawang USB device at umaasa na ang lahat ay gagana sa sarili nitong, tulad ng gagawin nito sa Ethernet. Una, kailangan nating gawin ang isa sa mga ito sa USB Client mode, at hindi USB Host, at pangalawa, kailangan nating magpasya kung paano makikita ng mga device ang isa't isa. Mayroong maraming mga driver para sa tinatawag na USB Gadgets (pinangalanan pagkatapos ng Linux kernel subsystem), na nagbibigay-daan sa iyo upang tularan ang iba't ibang uri ng mga USB device: network adapter, audio card, keyboard at mouse, flash drive, camera, console sa pamamagitan ng isang serial daungan. Dahil gagana ang aming device sa network, ang pagtulad sa isang Ethernet adapter ay pinakamainam para sa amin.

Mayroong tatlong mga pamantayan sa Ethernet-over-USB:

  • Remote NDIS (RNDIS). Isang lumang pamantayan mula sa Microsoft, pangunahing ginagamit sa panahon ng Windows XP.
  • Ethernet Control Model (ECM). Isang simpleng pamantayan na sumasaklaw sa mga Ethernet frame sa loob ng mga USB packet. Mahusay para sa mga wired modem na may koneksyon sa USB, kung saan ito ay maginhawa upang ilipat ang mga frame nang walang pagproseso, ngunit dahil sa pagiging simple at mga limitasyon ng USB bus, ito ay hindi masyadong mabilis.
  • Ethernet Emulation Model (EEM). Isang mas matalinong protocol na isinasaalang-alang ang mga limitasyon ng USB at mahusay na pinagsasama-sama ang maramihang mga frame sa isa, kaya tumataas ang throughput.
  • Network Control Model (NCM). Ang pinakabagong protocol. May mga benepisyo ng EEM at higit na ino-optimize ang karanasan sa bus.

Para gumana ang alinman sa mga protocol na ito sa aming board, gaya ng nakasanayan, magkakaroon kami ng ilang mga paghihirap. Dahil sa ang katunayan na ang Allwinner ay interesado lamang sa mga bahagi ng Android ng kernel, ang Android Gadget lamang ang gumagana nang normal - ang code na nagpapatupad ng komunikasyon sa adb, pag-export ng device sa pamamagitan ng MTP protocol at pagtulad sa isang flash drive sa mga Android device. Ang Android Gadget mismo ay sumusuporta din sa RNDIS protocol, ngunit ito ay sira sa Allwinner kernel. Kung susubukan mong i-compile ang kernel sa anumang iba pang USB Gadget, hindi lilitaw ang device sa system, anuman ang gawin mo.
Upang malutas ang problema, sa isang mapayapang paraan, kailangan mong hanapin ang lugar kung saan ang USB controller ay nasimulan sa code ng Android gadget android.c na binago ng mga developer, ngunit mayroon ding isang solusyon upang makagawa ng hindi bababa sa Ethernet emulation over gawain sa 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;

Pinipilit ng patch na ito ang USB client mode, na nagbibigay-daan sa iyong gumamit ng mga regular na USB Gadget mula sa Linux.
Ngayon ay dapat mong muling itayo ang kernel gamit ang patch na ito at ang kinakailangang gadget. Pinili ko ang EEM dahil... Ayon sa mga resulta ng pagsubok, ito ay naging mas produktibo kaysa sa NCM.
Nagbibigay ang pangkat ng Armbian napaka-simple at maginhawang sistema ng pagpupulong para sa lahat ng suportadong board sa pamamahagi. I-download lang ito, ilagay ang aming patch userpatches/kernel/sun8i-default/otg.patch, edit ng konti compile.sh at piliin ang kinakailangang gadget:

Pabilisin ang OpenVPN sa halagang $9.99* o isama ang Orange Pi One sa iyong router

Ang kernel ay isasama sa isang deb package, na hindi magiging mahirap i-install sa board sa pamamagitan ng dpkg.
Ang natitira na lang ay ikonekta ang board sa pamamagitan ng USB at i-configure ang aming bagong network adapter para makatanggap ng address sa pamamagitan ng DHCP. Upang gawin ito kailangan mong magdagdag ng isang bagay tulad ng sumusunod sa /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'

Mas mainam na itakda nang manu-mano ang MAC address, dahil... ito ay magiging random sa bawat oras na ang aparato ay reboot, na kung saan ay hindi maginhawa at mahirap.
Ikinonekta namin ang MicroUSB cable sa OTG connector, ikonekta ang kapangyarihan mula sa router (maaari itong ibigay sa mga pin 2 at 3 ng suklay, at hindi lamang sa power connector).

Ang natitira na lang ay i-configure ang router. Sapat na i-install ang package gamit ang EEM driver at idagdag ang aming bagong USB network device sa tulay ng lokal na firewall zone:

opkg install kmod-usb-net-cdc-eem

Pabilisin ang OpenVPN sa halagang $9.99* o isama ang Orange Pi One sa iyong router
Upang iruta ang lahat ng trapiko sa VPN tunnel, kailangan mong magdagdag ng panuntunan ng SNAT sa IP address ng board sa gilid ng router, o ipamahagi ang address ng board bilang gateway address sa pamamagitan ng dnsmasq. Ang huli ay ginagawa sa pamamagitan ng pagdaragdag ng sumusunod na linya sa /etc/dnsmasq.conf:

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

saan 192.168.1.100 β€” IP address ng iyong board. Huwag kalimutang ipasok ang address ng router sa mga setting ng network sa mismong board!

Ginamit ang melamine sponge para ihiwalay ang mga contact sa board mula sa mga contact ng router. Ito ay naging ganito:
Pabilisin ang OpenVPN sa halagang $9.99* o isama ang Orange Pi One sa iyong router

Konklusyon

Ang network sa pamamagitan ng USB ay mabilis na gumagana: 100-120 Mb/s, mas kaunti ang inaasahan ko. Ang OpenVPN ay dumadaan sa humigit-kumulang 70 Mb/s ng naka-encrypt na trapiko, na hindi rin masyadong marami, ngunit sapat para sa aking mga pangangailangan. Ang takip ng router ay hindi nagsasara nang mahigpit, na nag-iiwan ng isang maliit na puwang. Maaaring alisin ng mga Aesthetes ang mga konektor ng Ethernet at USB Host mula sa board, na magbibigay-daan sa takip na ganap na magsara at may natitira pang espasyo.
Mas mainam na huwag makisali sa gayong pornograpiya at bumili Turris Omnia.

Pinagmulan: www.habr.com

Magdagdag ng komento