只需 9.99 美元* 即可加速 OpenVPN 或將 Orange Pi One 整合到您的路由器中

只需 9.99 美元* 即可加速 OpenVPN 或將 Orange Pi One 整合到您的路由器中

我們中的一些人出於某種原因不會在沒有VPN 的情況下使用互聯網:有人需要專用IP,購買具有兩個IP 的VPS 比從提供商那裡購買地址更容易、更便宜,有人想要訪問所有網站,不僅是俄羅斯聯邦境內允許的,其他國家也需要 IPv6,但提供者不提供...
大多數情況下,VPN 連線是在某個時刻使用的裝置本身上建立的,如果您只有一台電腦和一部手機並且很少同時使用它們,那麼這是有意義的。 如果您的家庭網路中有很多設備,或者例如有些設備無法設定VPN,那麼直接在家庭路由器上建立隧道會更方便,而不必考慮單獨設定每個設備。

如果您曾經在路由器上安裝過 OpenVPN,您可能會對它的運作速度感到不快。 即使是便宜的路由器的 SoC 也可以毫無問題地傳輸大約千兆位元的流量,因為路由和 NAT 功能轉移到專門為此任務設計的單獨晶片上,並且此類路由器的主處理器非常弱,因為它們實際上沒有任何負載。 這種妥協可以讓您實現路由器的高速並顯著降低成品設備的價格 - 具有強大處理器的路由器成本要高出幾倍,並且定位不僅是用於分配互聯網的盒子,還可以作為 NAS、Torrent下載器和家庭多媒體系統。

我的路由器 TP-Link TL-WDR4300 不能稱為新的 - 該型號出現於 2012 年中,具有 560 MHz MIPS32 74Kc 架構處理器,其功率僅夠 20-23 Mb/s 的加密流量通過OpenVPN,按照標準,現代家庭網路的速度相當低。
我們如何提高加密隧道的速度? 我的路由器功能齊全,支援 3x3 MIMO,整體運作良好,我不想更改它。
既然現在習慣製作10兆的互聯網頁面,用node.js編寫桌面應用程式並將其打包成100兆的文件,增加計算能力而不是優化,我們會做一些可怕的事情——我們將VPN連接轉移到一台高效的單板「電腦」Orange Pi One,我們將其安裝在路由器機箱中,而不佔用現有網路和USB 端口,只需9.99 美元*!
* + 送貨、+ 稅金、+ 啤酒、+ MicroSD。

OpenVPN的

路由器的處理器不能被稱為完全弱 - 它能夠使用 AES-128-CBC-SHA1 演算法以 50 Mb/s 的速度對資料進行加密和散列,這明顯快於 OpenVPN 的工作方式和現代 CHACHA20 串流具有POLY1305 散列的密碼甚至達到每秒130 兆位元! 為什麼VPN隧道的速度這麼低? 這都是關於用戶空間和核心空間之間的上下文切換:OpenVPN 在用戶上下文中加密流量並與外界通信,而路由本身發生在核心上下文中。 作業系統必須不斷地來回切換每個接收或傳送的資料包,且此操作速度很慢。 這個問題是所有透過TUN/TAP驅動程式運行的VPN應用程式所固有的,不能說低速問題是由於OpenVPN優化不佳造成的(儘管,當然,也有需要返工的地方)。 在我的筆記型電腦上,沒有一個使用者空間 VPN 用戶端能夠提供千兆位元的停用加密功能,更不用說處理器效能較弱的系統了。

橙皮一號

迅龍的單板橙皮一是目前性價比最好的。 只需 9.99 美元*,您就可以獲得運行在 7 MHz(穩定)的堅固四核 ARM Cortex-A1008 處理器,其性能明顯優於同價位的 Raspberry Pi Zero 和 Next Thing CHIP。 這就是優勢所在。 迅龍公司對闆卡的軟體完全是零關注,One上市時連闆卡配置文件都沒有提供,更不用說現成的鏡像了。 全志作為SoC製造商,對於支持其產品也不是特別敏感。 他們只對 Android 4.4.4 作業系統的最低效能感興趣,這意味著我們被迫使用帶有 Android 修補程式的 3.4 核心。 幸運的是,有一些愛好者組裝發行版、編輯核心、編寫程式碼來支援主線核心中的板,即他們實際上是為製造商做這些工作,使這種垃圾工作可以接受。 出於我的目的,我選擇了 Armbian 發行版;它更新頻繁且方便(新核心直接透過套件管理器安裝,而不是像 Allwinner 那樣透過將檔案複製到特殊分割區來安裝),並且它支援大多數外圍設備,與其他設備不同。

路由器

為了不給路由器的弱處理器載入加密並加速我們的VPN連接,我們可以透過某種方式將其連接到路由器,從而將這項任務轉移到更強大的Orange Pi處理器的肩上。 我想到了透過乙太網路或 USB 連接 - 這兩種設備都支援這兩種標準,但我不想佔用現有連接埠。 幸運的是,還有一條出路。

路由器中使用的GL850G USB集線器晶片支援4個USB端口,其中兩個是不有線的。 我猜想,目前還不清楚製造商為什麼不將它們拆焊,以防止用戶同時連接 4 個高電流消耗的設備(例如硬碟)。 路由器的標準電源並不是為這樣的負載而設計的。 無論如何,這對我們有利。
只需 9.99 美元* 即可加速 OpenVPN 或將 Orange Pi One 整合到您的路由器中
為了獲得另一個 USB 端口,您只需將兩條電線焊接到引腳 8(D-) 和 9(D+) 或 11(D-) 和 12(D+) 上。

只需 9.99 美元* 即可加速 OpenVPN 或將 Orange Pi One 整合到您的路由器中

然而,僅僅插入兩個 USB 設備並希望一切都能像以太網一樣自行運行是不夠的。 首先,我們需要使其中一個在 USB 用戶端模式下運作,而不是 USB 主機模式,其次,我們需要決定裝置如何相互偵測。 有許多所謂的 USB Gadgets(以 Linux 核心子系統命名)的驅動程序,它們允許您模擬各種類型的 USB 設備:網路適配器、聲卡、鍵盤和滑鼠、閃存驅動器、相機、通過串行端口的控制台港口。 由於我們的設備將與網路一起工作,因此模擬乙太網路適配器最適合我們。

USB 乙太網路標準共有三種:

  • 遠程 NDIS (RNDIS)。 Microsoft 的過時標準,主要在 Windows XP 期間使用。
  • 乙太網路控制模型 (ECM)。 將乙太網路封包封裝在 USB 封包中的簡單標準。 非常適合具有 USB 連接的有線調製解調器,可以方便地傳輸幀而不進行處理,但由於其簡單性和 USB 總線的限制,速度不是很快。
  • 乙太網路模擬模型 (EEM)。 一種更聰明的協議,考慮了 USB 限制並以最佳方式將多個幀聚合為一個,從而提高吞吐量。
  • Network Control Model (NCM)。 最新協議。 具備EEM的優勢,進一步優化公車體驗。

為了讓這些協議中的任何一個像往常一樣在我們的主機板上運行,我們將不得不遇到一些困難。 由於全志只對核心的Android部分感興趣,所以只有Android Gadget能正常運作——實作與adb通訊、透過MTP協定匯出裝置以及在Android裝置上模擬隨身碟的程式碼。 Android Gadget本身也支援RNDIS協議,但在Allwinner核心中被破壞。 如果您嘗試使用任何其他 USB Gadget 編譯內核,則無論您做什麼,該裝置都不會出現在系統上。
為了解決這個問題,以友好的方式,你需要在開發人員修改的Android小工具android.c的程式碼中找到USB控制器初始化的地方,但也有一個解決方法,至少可以讓乙太網路模擬通過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;

此補丁強制 USB 用戶端模式,讓您可以使用 Linux 中的常規 USB 小工具。
現在您應該使用此補丁和必要的小工具重建核心。 我選擇EEM是因為... 根據測試結果,它比 NCM 的生產效率更高。
Armbian 團隊提供 非常簡單方便的組裝系統 對於發行版中所有支援的板。 只需下載它,將我們的補丁放入即可 userpatches/kernel/sun8i-default/otg.patch,稍微編輯一下 compile.sh 並選擇所需的小工具:

只需 9.99 美元* 即可加速 OpenVPN 或將 Orange Pi One 整合到您的路由器中

核心將被編譯成 deb 包,透過以下方式安裝到板上並不困難 dpkg.
剩下的就是透過 USB 連接開發板並配置我們的新網路適配器以透過 DHCP 接收位址。 為此,您需要添加以下內容 /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'

最好手動設定 MAC 位址,因為... 每次設備重啟都會隨機,不方便又麻煩。
我們將 MicroUSB 電纜連接到 OTG 連接器,連接路由器的電源(它可以提供給梳子的引腳 2 和 3,而不僅僅是電源連接器)。

剩下的就是設定路由器了。 只需安裝帶有 EEM 驅動程式的軟體包並將我們新的 USB 網路裝置新增至本機防火牆區域的網橋即可:

opkg install kmod-usb-net-cdc-eem

只需 9.99 美元* 即可加速 OpenVPN 或將 Orange Pi One 整合到您的路由器中
要將所有流量路由到 VPN 隧道,您需要在路由器端向板的 IP 位址新增 SNAT 規則,或透過 dnsmasq 將板的位址作為網關位址進行分發。 後者是透過添加以下行來完成的 /etc/dnsmasq.conf:

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

哪裡 192.168.1.100 — 您的主機板的 IP 位址。 不要忘記在主機板本身的網路設定中輸入路由器位址!

三聚氰胺海綿用於將電路板觸點與路由器觸點隔離。 結果是這樣的:
只需 9.99 美元* 即可加速 OpenVPN 或將 Orange Pi One 整合到您的路由器中

結論

透過 USB 的網路運行速度出奇地快:100-120 Mb/s,比我預期的要低。 OpenVPN 透過大約 70 Mb/s 的加密流量,這也不是很多,但足以滿足我的需求。 路由器蓋關閉不嚴,留有小間隙。 美學家可以從板上拆下乙太網路和 USB 主機連接器,這樣蓋子就可以完全關閉,並且仍然留有一些空間。
最好不要從事此類色情內容併購買 圖里斯·奧尼亞.

來源: www.habr.com

添加評論