基于Linux内核实现高效、快速、简单的VPN方案
原标题:基于Linux内核实现高效、快速、简单的VPN方案
ByToradex胡珊逢
联网需求在各种嵌入式应用中正开始变得越来越普遍,随之而来就是数据传输的安全挑战。VPN是应对该挑战的有效措施。除此之外,VPN还能够穿透防火墙或者NAT实现异地组网,从而提供远程访问设备的功能。文章接下来在运行Linux系统的ApalisiMX8QM上演示如何使用OpenVPN和WireGuard两种VPN方案。
OpenVPN一种使用较为广泛的VPN,其基于OpenSSL提供多种加密方案,采用TCP或者UDP作为传输层协议,具有非常高的灵活性。WireGuard是一种更加高效、快速、简单的VPN方案,最初直接基于Linux内核实现,支持最新的加密算法如Curve25519、ChaCha20、Poly1305、BLAKE2等,传输层采用UDP协议。自Linux5.6开始,WireGuard已经集成到内核中,目前拥有非常活跃的开发群体,支持Windows、macOS、BSD、iOS、Android。Toradex针对其模块发布的BSP采用Yocto构建,OpenVPN和WireGuard在Yocto中可以很方便得添加进来。
首先在local.conf配置文件添加一下内容,apache网站服务器用于后面的远程连接演示。
IMAGE_INSTALL_append="apache2openvpnwireguard-modulewireguard-tools"
修改layers/meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard-module_1.0.20200401.bb,注释掉PKG_${PN}="kernel-module-${MODULE_NAME}"
WireGuard基于Linux内核实现,为了保证其代码的精简,其复用了内核中很多的网络功能,因此需要修改默认的内核配置。如果使用OpenVPN,则可以跳过该步骤,直接编译BSP。
在开始配置之前,我们先介绍下测试所使用的网络拓扑。如下图所示,首先需要一台具有公网IP的服务器作为VPN服务器。ApalisiMX8QM通过以太网连接电信运营商提供的光猫。目前光猫通常只能获取的经过电信运营商NAT转换后的内网IPv4地址。用于测试的手机则通过基站接入公网。
VPN服务器设置
OpenVPN和WireGuard官网均提供了详细的服务器配置说明。这里我们使用另外一个工具PiVPN来设置服务器。PiVPN最初是为树莓派提供简单的服务器管理工具,但同样可以用于任何基于Debian发行版本,如Ubuntu。运行下面命令即可安装。
手机端设置
在手机上安装OpenVPN和WireGuard客户端,然后导入上面PiVPN生成的ovpn或者conf文件,亦或通过扫二维码。PiVPN均提供十分易于使用的功能。
ApalisiMX8QM设置
使用system-networkd作为网络管理器
成功运行后会看到如下信息:
使用ifconfig命令可以看到如下tun0接口。分配的IP为10.8.0.5。在其他连接到该VPN的客户端上可以使用该IP来访问ApalisiMX8QM。
在手机上连接OpenVPN,分配到的IP为10.8.0.3。通过手机上的浏览器访问ApalisiMX8QM上的网页http://10.8.0.5。
lWireGuard
将PiVPN生成的配置文件apalis-imx8.conf复制到/etc/wireguard/wg0.conf,然后运行
在手机上启动WireGuard应用,访问ApalisiMX8QM上的网页http://10.6.0.5。
总结
VPN可以将不同网络的设备进行组网实现互联,方便远程管理。但同时也需要注意服务器的安全防护,通过该服务器可以获取到连接设备信息,包括登录验证信息。
责任编辑:David
【免责声明】
1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。
2、本文的引用仅供读者交流学习使用,不涉及商业目的。
3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。
4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。
拍明芯城拥有对此声明的最终解释权。