0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Linux内核实现高效、快速、简单的VPN方案

电子设计 来源:与非网 作者:Toradex胡珊逢 2021-02-01 14:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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、BSDiOSAndroid。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}"

pIYBAGAXl3SACEcBAAAm3SCoc8M715.png

WireGuard基于Linux内核实现,为了保证其代码的精简,其复用了内核中很多的网络功能,因此需要修改默认的内核配置。如果使用OpenVPN,则可以跳过该步骤,直接编译BSP。

o4YBAGAXl5GAX1y3AACPlWR5iFY178.png

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

pIYBAGAXl6uAebk4AAC-xCunCLU219.png

VPN服务器设置

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

pIYBAGAXl-CAC0-hAABHICMKSJA165.png

手机端设置

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

Apalis iMX8QM设置

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

o4YBAGAXl_SAcb-RAAByAROZcCw668.png

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

o4YBAGAXmA-AJUEMAABUs_bWW_U355.png

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

o4YBAGAXmDSABQo5AAA2wr9WVyU839.png

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

pIYBAGAXmFiAS5c3AAErIB4BZo4973.png

pIYBAGAXmGWAduXzAABWEowrHlI074.png

lWireGuard

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

pIYBAGAXmHaAVYDWAABJ-4VYZ2Y692.png

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

o4YBAGAXmISASyA9AAFz1RET6q4488.png

pIYBAGAXmJmAfSCpAABUyfxGPu4687.png

总结

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    14

    文章

    10345

    浏览量

    91739
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1433

    浏览量

    83758
  • UDP
    UDP
    +关注

    关注

    0

    文章

    335

    浏览量

    35524
  • OpenSSL
    +关注

    关注

    0

    文章

    21

    浏览量

    9299
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何理解Linux内核中的PCIe驱动

    我们习惯了用 Verilog 去死磕 PCIe 的底层协议状态机。但一旦越过硬件边界来到操作系统层面,Linux 内核是如何接管并驱动这些 PCI/PCIe 设备的呢?由于不同的 CPU 架构实现
    的头像 发表于 04-11 17:22 1240次阅读

    Linux内核驱动开发的技术核心精要

    社区维护流程。 总之,Linux驱动开发要求开发者融会贯通并发、中断、内存、设备模型、调试等维度,不断实践并跟进内核演进,方能写出健壮高效的底层代码。
    发表于 03-10 13:56

    Linux内核bug狩猎指南:从栈跟踪到修复,官方文档教你搞定系统核心故障

    内核Linux 系统的 “心脏”—— 一旦它出 bug,小则功能异常,大则系统崩溃、死机。但内核 bug 往往藏在百万行代码中,想快速定位、修复绝非易事。
    的头像 发表于 02-06 16:59 3283次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>内核</b>bug狩猎指南:从栈跟踪到修复,官方文档教你搞定系统核心故障

    Linux系统内核参数调优实战指南

    Linux 内核参数调优是系统性能优化的核心环节。随着云原生架构的普及和硬件性能的飞速提升,默认的内核参数配置往往无法充分发挥系统潜力。在高并发 Web 服务、大数据处理、容器化部署等场景下,合理的
    的头像 发表于 01-28 14:27 679次阅读

    【「Linux 设备驱动开发(第 2 版)」阅读体验】Linux内核开发基础

    ()、msleep_interruptible()这些API用于简单睡眠 内核延迟或忙等待 可以调用ndelay()、udelay()、mdelay()这些API实现 Linux
    发表于 01-12 22:45

    【「Linux 设备驱动开发(第 2 版)」阅读体验】+读内核处理的核心辅助函数

    一个是“锁”;另一个是“条件变量”。内核中最常见的锁是自旋锁和互斥锁,操作系统内核通常使用硬件提供的原子操作来实现锁的机制。而条件变量并不是Linux
    发表于 01-10 22:08

    深入Linux内核:进程调度的核心逻辑与实现细节

    ,背后都离不开内核调度算法的精准操控。今天,我们就从优先级、调度算法、时间片分配到底层实现,全方位拆解Linux内核进程调度的核心逻辑。 一、进程调度的“身份标识”:优先级与分类 要理
    的头像 发表于 12-24 07:05 4560次阅读
    深入<b class='flag-5'>Linux</b><b class='flag-5'>内核</b>:进程调度的核心逻辑与<b class='flag-5'>实现</b>细节

    Linux内核日志玩明白了吗?printk调试神器全解析

    前言:做Linux驱动开发或内核调试的朋友,一定对printk不陌生,但你真的会用它吗?为什么同样是调试RK3588内核,别人能精准捕捉关键错误,你却被海量日志淹没?今天就带大家吃透printk
    的头像 发表于 12-19 08:32 1050次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>内核</b>日志玩明白了吗?printk调试神器全解析

    Linux-RT特点及简单应用

    Linux-RT是指Linux Real-Time(实时)的简称,它是针对实时性能优化的Linux内核版本。传统的Linux
    发表于 12-05 07:37

    基于 DR1M90 的 Linux-RT 内核开发:从编译配置到 GPIO / 按键应用实现(1)

    本手册由创龙科技研发,针对 DR1M90,详述 Linux-RT 实时内核开发:含实时性测试(LinuxLinux-RT 对比、CPU 空载 / 满负荷 / 隔离状态测试)、
    的头像 发表于 12-02 10:38 1299次阅读
    基于 DR1M90 的 <b class='flag-5'>Linux</b>-RT <b class='flag-5'>内核</b>开发:从编译配置到 GPIO / 按键应用<b class='flag-5'>实现</b>(1)

    Linux内核printk日志级别全解析:从参数解读到实操配置

    一、开篇:一个命令引出的核心问题 在 Linux 终端执行 cat /proc/sys/kernel/printk,你可能会看到这样的输出: 这串数字不是随机的,而是内核日志系统的“核心配置开关
    的头像 发表于 11-20 15:54 1942次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>内核</b>printk日志级别全解析:从参数解读到实操配置

    fpga嵌入e203内核搭建soc如何实现通信功能?

    在fpga嵌入e203内核实现以太网,开发板有PHY芯片LAN8720A,怎么搭建soc,如何使用总线,实现通信功能?
    发表于 11-10 06:54

    传统 VPN 已过时?Splashtop 如何重塑安全远程连接

    随着远程办公和跨地域协作日益普及,企业对安全、高效远程访问解决方案的需求持续攀升。传统VPN技术虽然在历史上承担了重要角色,但其在设计理念、安全机制与性能表现上的局限逐渐凸显,已难以满足现代企业
    的头像 发表于 10-13 17:19 1492次阅读
    传统 <b class='flag-5'>VPN</b> 已过时?Splashtop 如何重塑安全远程连接

    请问公司办公网没有公网IP如何实现VPN组网?

    公司办公网没有公网IP如何实现VPN组网?
    发表于 08-07 07:27

    Linux内核参数调优方案

    在高并发微服务环境中,网络性能往往成为K8s集群的瓶颈。本文将深入探讨如何通过精细化的Linux内核参数调优,让你的K8s节点网络性能提升30%以上。
    的头像 发表于 08-06 17:50 1147次阅读