Percepat OpenVPN seharga $9.99* atau integrasikan Orange Pi One ke router Anda

Percepat OpenVPN seharga $9.99* atau integrasikan Orange Pi One ke router Anda

Beberapa dari kita tidak menggunakan Internet tanpa VPN karena satu dan lain alasan: seseorang memerlukan IP khusus, dan lebih mudah dan murah untuk membeli VPS dengan dua IP daripada membeli alamat dari penyedia, seseorang ingin mengakses semua situs web , dan tidak hanya yang diizinkan di wilayah Federasi Rusia, yang lain memerlukan IPv6, tetapi penyedia tidak menyediakannya...
Seringkali, koneksi VPN dibuat pada perangkat itu sendiri yang sedang digunakan pada saat tertentu, yang masuk akal jika Anda hanya memiliki satu komputer dan satu telepon dan jarang menggunakannya secara bersamaan. Jika ada banyak perangkat di jaringan rumah Anda, atau, misalnya, ada beberapa perangkat yang VPN tidak dapat dikonfigurasi, akan lebih mudah jika membuat terowongan langsung di router rumah agar tidak memikirkan untuk menyiapkan setiap perangkat secara terpisah. .

Jika Anda pernah menginstal OpenVPN di router Anda, Anda mungkin terkejut dengan betapa cepatnya kerjanya. SoC dari router yang murah sekalipun melewati lalu lintas sekitar gigabit tanpa masalah, karena transfer fungsi perutean dan NAT ke chip terpisah yang dirancang khusus untuk tugas ini, dan prosesor utama dari router tersebut cukup lemah, karena Praktis tidak ada beban pada mereka. Kompromi ini memungkinkan Anda mencapai kecepatan tinggi router dan secara signifikan mengurangi harga perangkat jadi - router dengan prosesor yang kuat harganya beberapa kali lebih mahal, dan diposisikan tidak hanya sebagai kotak untuk mendistribusikan Internet, tetapi juga sebagai NAS, torrent pengunduh dan sistem multimedia rumah.

Router saya, TP-Link TL-WDR4300, tidak bisa disebut baru - modelnya muncul pada pertengahan 2012, dan memiliki prosesor berarsitektur MIPS560 32Kc 74 MHz, yang kekuatannya hanya cukup untuk lalu lintas terenkripsi 20-23 Mb/s melalui OpenVPN, yang menurut standar, kecepatan Internet rumah modern cukup rendah.
Bagaimana kita dapat meningkatkan kecepatan terowongan terenkripsi? Router saya cukup berfungsi, mendukung 3x3 MIMO, dan secara umum berfungsi dengan baik, saya tidak ingin mengubahnya.
Karena sekarang sudah menjadi kebiasaan untuk membuat halaman Internet 10 megabyte, menulis aplikasi desktop di node.js dan mengemasnya ke dalam file 100 megabyte, meningkatkan daya komputasi alih-alih mengoptimalkan, kami akan melakukan sesuatu yang buruk - kami akan mentransfer koneksi VPN ke β€œkomputer” papan tunggal yang produktif Orange Pi One, yang akan kami pasang di casing router tanpa menggunakan jaringan dan port USB yang ada, hanya dengan $9.99*!
* + pengiriman, + pajak, + untuk bir, + MicroSD.

OpenVPN

Prosesor router tidak dapat disebut sepenuhnya lemah - prosesor ini mampu mengenkripsi dan melakukan hashing data menggunakan algoritme AES-128-CBC-SHA1 dengan kecepatan 50 Mb/s, yang jauh lebih cepat daripada cara kerja OpenVPN, dan aliran CHACHA20 modern sandi dengan hash POLY1305 bahkan mencapai 130 megabit per detik! Mengapa kecepatan terowongan VPN sangat rendah? Ini semua tentang peralihan konteks antara ruang pengguna dan ruang kernel: OpenVPN mengenkripsi lalu lintas dan berkomunikasi dengan dunia luar dalam konteks pengguna, dan perutean itu sendiri terjadi dalam konteks kernel. Sistem operasi harus terus-menerus berpindah-pindah untuk setiap paket yang diterima atau dikirim, dan operasi ini lambat. Masalah ini melekat pada semua aplikasi VPN yang berjalan melalui driver TUN/TAP, dan tidak dapat dikatakan bahwa masalah kecepatan rendah disebabkan oleh optimasi OpenVPN yang buruk (walaupun tentu saja ada beberapa tempat yang perlu dikerjakan ulang). Tidak ada satu pun klien VPN ruang pengguna yang menyediakan gigabit dengan enkripsi yang dinonaktifkan di laptop saya, apalagi sistem dengan prosesor yang lemah.

Jeruk Pi Satu

Papan tunggal Orange Pi One dari Xunlong adalah penawaran terbaik dalam hal kinerja/rasio harga saat ini. Dengan $9.99* Anda mendapatkan prosesor quad-core ARM Cortex-A7 solid yang berjalan (stabil) pada 1008 MHz, dan jelas mengungguli tetangganya dalam hal harga, Raspberry Pi Zero dan Next Thing CHIP. Di sinilah keuntungannya berakhir. Perusahaan Xunlong sama sekali tidak memperhatikan perangkat lunak papannya, dan pada saat One diluncurkan untuk dijual, perusahaan tersebut bahkan tidak menyediakan file konfigurasi papan, apalagi gambar yang sudah jadi. Allwinner, produsen SoC, juga tidak terlalu sensitif terhadap dukungan produknya. Mereka hanya tertarik pada performa minim di OS Android 4.4.4 yang artinya kita terpaksa menggunakan kernel 3.4 dengan patch Android. Untungnya, ada peminat yang merakit distribusi, mengedit kernel, menulis kode ke papan pendukung di kernel jalur utama, mis. mereka benar-benar melakukan pekerjaan untuk pabrikan, sehingga omong kosong ini dapat diterima. Untuk tujuan saya, saya memilih distribusi Armbian; distribusi ini sering dan mudah diperbarui (kernel baru diinstal langsung melalui manajer paket, dan bukan dengan menyalin file ke partisi khusus, seperti yang biasanya terjadi pada Allwinner), dan mendukung sebagian besar periferal, tidak seperti yang lain.

Router

Agar tidak memuat prosesor router yang lemah dengan enkripsi dan mempercepat koneksi VPN kami, kami dapat mengalihkan tugas ini ke pundak prosesor Orange Pi yang lebih kuat dengan menghubungkannya ke router dengan cara tertentu. Menghubungkan melalui Ethernet atau USB terlintas dalam pikiran saya - kedua standar ini didukung oleh kedua perangkat, tetapi saya tidak ingin menggunakan port yang ada. Untungnya, ada jalan keluarnya.

Chip hub USB GL850G, yang digunakan di router, mendukung 4 port USB, dua di antaranya tidak berkabel. Tidak jelas mengapa pabrikan tidak melepas soldernya, saya kira, untuk mencegah pengguna menghubungkan 4 perangkat dengan konsumsi arus tinggi (misalnya, hard drive) sekaligus. Catu daya standar router tidak dirancang untuk beban seperti itu. Bagaimanapun, ini adalah keuntungan kita.
Percepat OpenVPN seharga $9.99* atau integrasikan Orange Pi One ke router Anda
Untuk mendapatkan port USB lain, Anda hanya perlu menyolder dua kabel ke pin 8(D-) dan 9(D+) atau 11(D-) dan 12(D+).

Percepat OpenVPN seharga $9.99* atau integrasikan Orange Pi One ke router Anda

Namun, tidak cukup hanya menyambungkan dua perangkat USB dan berharap semuanya akan berfungsi dengan sendirinya, seperti halnya dengan Ethernet. Pertama, kita perlu membuat salah satunya berfungsi dalam mode Klien USB, dan bukan Host USB, dan kedua, kita perlu memutuskan bagaimana perangkat akan mendeteksi satu sama lain. Ada banyak driver untuk apa yang disebut Gadget USB (dinamai berdasarkan subsistem kernel Linux), yang memungkinkan Anda meniru berbagai jenis perangkat USB: adaptor jaringan, kartu audio, keyboard dan mouse, flash drive, kamera, konsol melalui serial pelabuhan. Karena perangkat kami akan bekerja dengan jaringan, meniru adaptor Ethernet adalah yang terbaik bagi kami.

Ada tiga standar Ethernet-over-USB:

  • NDIS Jarak Jauh (RNDIS). Standar usang dari Microsoft, digunakan terutama pada Windows XP.
  • Model Kontrol Ethernet (ECM). Standar sederhana yang merangkum frame Ethernet dalam paket USB. Cocok untuk modem berkabel dengan koneksi USB, yang memudahkan untuk mentransfer frame tanpa pemrosesan, namun karena kesederhanaan dan keterbatasan bus USB, ini tidak terlalu cepat.
  • Model Emulasi Ethernet (EEM). Protokol yang lebih cerdas yang mempertimbangkan keterbatasan USB dan secara optimal menggabungkan beberapa frame menjadi satu, sehingga meningkatkan throughput.
  • Model Kontrol Jaringan (NCM). Protokol terbaru. Memiliki manfaat EEM dan lebih mengoptimalkan pengalaman bus.

Agar protokol-protokol ini berfungsi di board kami, seperti biasa, kami harus menghadapi beberapa kesulitan. Karena Allwinner hanya tertarik pada bagian kernel Android, hanya Gadget Android yang berfungsi normal - kode yang mengimplementasikan komunikasi dengan adb, mengekspor perangkat melalui protokol MTP dan meniru flash drive pada perangkat Android. Gadget Android sendiri juga mendukung protokol RNDIS, namun rusak pada kernel Allwinner. Jika Anda mencoba mengkompilasi kernel dengan Gadget USB lainnya, perangkat tersebut tidak akan muncul di sistem, apa pun yang Anda lakukan.
Untuk mengatasi masalah tersebut, dengan cara yang bersahabat, Anda perlu menemukan tempat di mana pengontrol USB diinisialisasi dalam kode gadget Android android.c yang dimodifikasi oleh pengembang, tetapi ada juga solusi untuk membuat setidaknya emulasi Ethernet berakhir USB berfungsi:

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

Patch ini memaksa mode klien USB, memungkinkan Anda menggunakan Gadget USB biasa dari Linux.
Sekarang Anda harus membangun kembali kernel dengan patch ini dan gadget yang diperlukan. Saya memilih EEM karena... Berdasarkan hasil pengujian ternyata lebih produktif dibandingkan NCM.
Tim Armbian menyediakan sistem perakitan yang sangat sederhana dan nyaman untuk semua papan yang didukung dalam distribusi. Cukup unduh, masukkan patch kami userpatches/kernel/sun8i-default/otg.patch, edit sedikit compile.sh dan pilih gadget yang diperlukan:

Percepat OpenVPN seharga $9.99* atau integrasikan Orange Pi One ke router Anda

Kernel akan dikompilasi ke dalam paket deb, yang tidak akan sulit untuk diinstal pada board melalui dpkg.
Yang tersisa hanyalah menghubungkan papan melalui USB dan mengkonfigurasi adaptor jaringan baru kami untuk menerima alamat melalui DHCP. Untuk melakukan ini, Anda perlu menambahkan sesuatu seperti berikut ini /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'

Lebih baik mengatur alamat MAC secara manual, karena... itu akan acak setiap kali perangkat di-boot ulang, yang tidak nyaman dan menyusahkan.
Kami menghubungkan kabel MicroUSB ke konektor OTG, menghubungkan daya dari router (dapat disuplai ke pin 2 dan 3 sisir, dan tidak hanya ke konektor daya).

Yang tersisa hanyalah mengkonfigurasi router. Cukup menginstal paket dengan driver EEM dan menambahkan perangkat jaringan USB baru kami ke jembatan zona firewall lokal:

opkg install kmod-usb-net-cdc-eem

Percepat OpenVPN seharga $9.99* atau integrasikan Orange Pi One ke router Anda
Untuk merutekan semua lalu lintas ke terowongan VPN, Anda perlu menambahkan aturan SNAT ke alamat IP board di sisi router, atau mendistribusikan alamat board sebagai alamat gateway melalui dnsmasq. Yang terakhir dilakukan dengan menambahkan baris berikut ke /etc/dnsmasq.conf:

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

dimana 192.168.1.100 β€” Alamat IP papan Anda. Jangan lupa untuk memasukkan alamat router di pengaturan jaringan di papan itu sendiri!

Spons melamin digunakan untuk mengisolasi kontak papan dari kontak router. Ternyata seperti ini:
Percepat OpenVPN seharga $9.99* atau integrasikan Orange Pi One ke router Anda

Kesimpulan

Jaringan melalui USB bekerja sangat cepat: 100-120 Mb/s, saya perkirakan lebih sedikit. OpenVPN melewati sekitar 70 Mb/s lalu lintas terenkripsi, yang juga tidak terlalu banyak, namun cukup untuk kebutuhan saya. Penutup router tidak menutup rapat sehingga menyisakan celah kecil. Aesthetes dapat melepaskan konektor Ethernet dan USB Host dari papan, sehingga penutupnya dapat tertutup sepenuhnya dan masih ada ruang tersisa.
Lebih baik tidak terlibat dalam pornografi dan membeli Turris Omnia.

Sumber: www.habr.com

Tambah komentar