只需 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 限制并以最佳方式将多个帧聚合为一个,从而提高吞吐量。
  • 网络控制模型 (NCM)。 最新协议。 具有EEM的优势,进一步优化公交体验。

为了让这些协议中的任何一个像往常一样在我们的主板上运行,我们将不得不遇到一些困难。 由于全志只对内核的Android部分感兴趣,所以只有Android Gadget能正常工作——实现与adb通信、通过MTP协议导出设备以及在Android设备上模拟闪存驱动器的代码。 Android Gadget本身也支持RNDIS协议,但在Allwinner内核中被破坏。 如果您尝试使用任何其他 USB 小工具编译内核,则无论您做什么,该设备都不会出现在系统上。
为了解决这个问题,以友好的方式,你需要在开发人员修改的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 主机连接器,这样盖子就可以完全关闭,并且仍然留有一些空间。
最好不要从事此类色情内容并购买 图里斯·奥尼亚.

来源: habr.com

添加评论