嵌入式 Linux 系统 VPN 应用

By Toradex胡珊逢

联网需求在各种嵌入式应用中正开始变得越来越普遍,随之而来就是数据传输的安全挑战。VPN是应对该挑战的有效措施。除此之外,VPN 还能够穿透防火墙或者 NAT 实现异地组网,从而提供远程访问设备的功能。文章接下来在运行 Linux 系统的 Apalis iMX8QM 上演示如何使用 OpenVPN 和 WireGuard 两种 VPN 方案。


OpenVPN 一种使用较为广泛的 VPN,其基于 OpenSSL 提供多种加密方案,采用 TCP 或者 UDP 作为传输层协议,具有非常高的灵活性。WireGuard 是一种更加高效、快速、简单的 VPN 方案,最初直接基于 Linux 内核实现,支持最新的加密算法如Curve25519、ChaCha20、Poly1305、BLAKE2 等,传输层采用 UDP 协议。自 Linux 5.6 开始,WireGuard 已经集成到内核中,目前拥有非常活跃的开发群体,支持 Windows、macOS、BSD、iOS、Android。Toradex 针对其模块发布的 BSP 采用 Yocto 构建,OpenVPN 和 WireGuard 在 Yocto 中可以很方便得添加进来。


首先在 local.conf 配置文件添加一下内容,apache 网站服务器用于后面的远程连接演示。

IMAGE_INSTALL_append = " apache2 openvpn wireguard-module wireguard-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。


Networking support → Networking options


Networking support → Networking options → Network packet filtering framework (Netfilter) → IP: Netfilter Configuration

Networking support → Networking options → Network packet filtering framework (Netfilter) → Core Netfilter Configuration


完成配置后编译 BSP


在开始配置之前,我们先介绍下测试所使用的网络拓扑。如下图所示,首先需要一台具有公网 IP 的服务器作为 VPN 服务器。 Apalis iMX8QM 通过以太网连接电信运营商提供的光猫。目前光猫通常只能获取的经过电信运营商 NAT 转换后的内网 IPv4 地址。用于测试的手机则通过基站接入公网。


VPN 服务器设置

OpenVPN 和 WireGuard 官网均提供了详细的服务器配置说明。这里我们使用另外一个工具 PiVPN 来设置服务器。PiVPN 最初是为树莓派提供简单的服务器管理工具,但同样可以用于任何基于 Debian 发行版本,如 Ubuntu。运行下面命令即可安装。

curl -L


运行pivpn 分别为 Apalis iMX8 和手机添加 OpenVPN 和 WireGuard 账户。


修改服务器网络配置



手机端设置

在手机上安装 OpenVPN 和 WireGuard 客户端,然后导入上面 PiVPN 生成的 ovpn 或者 conf 文件,亦或通过扫二维码。PiVPN 均提供十分易于使用的功能。


Apalis iMX8QM 设置

使用 system-networkd 作为网络管理器


将网络设置动态获取 IP 方式。


修改 Apache 网页服务器默认显示内容。其他客户端可以用 HTTP 访问该网页。


OpenVPN

开启 OpenVPN 连接


成功运行后会看到如下信息:


使用 ifconfig 命令可以看到如下 tun0 接口。分配的IP 为 10.8.0.5。在其他连接到该 VPN 的客户端上可以使用该 IP 来访问 Apalis iMX8QM。



在手机上连接OpenVPN ,分配到的 IP 为 10.8.0.3。通过手机上的浏览器访问 Apalis iMX8QM 上的网页 http://10.8.0.5。


WireGuard

将 PiVPN 生成的配置文件 apalis-imx8.conf 复制到 /etc/wireguard/wg0.conf,然后运行


使用 ifconfig 可以看到 wg0 接口,此时分配到的 IP 为 10.6.0.5。


在手机上启动 WireGuard 应用,访问 Apalis iMX8QM 上的网页 http://10.6.0.5。



总结

VPN 可以将不同网络的设备进行组网实现互联,方便远程管理。但同时也需要注意服务器的安全防护,通过该服务器可以获取到连接设备信息,包括登录验证信息。

你可能感兴趣的:(嵌入式 Linux 系统 VPN 应用)