OpenVPN 进入 Linux 6.16 内核喽

发布于:2025-06-28 ⋅ 阅读:(16) ⋅ 点赞:(0)

Linux 6.16 的合并窗口,比较感兴趣的下面的两个点:
在这里插入图片描述

  • DCCP 由于没人用被移除了,不用再维护它,与 TCP 共享的代码重构也减负了;
  • OpenVPN 成熟到合入了内核,进一步提升了传输性能;

DCCP 来自 2005 年的 Linux gets DCCP,走过了 20 年依然被束之高阁,OpenVPN 作为内核的新来者却早就铺天盖地。跟几个链接:

Introducing OpenVPN Data Channel Offload
https://gitlab.com/openvpn/ovpn-dco/
OpenVPN Data Channel Offload: Unleashing Superior VPN Performance

在进入内核之前,它一直以 DCO 模块的形式存在,支持 5.4 以上的内核以及特定发行版,如上第二个链接。更主要是第三个链接,关于 OpenVPN 的产品版本都在其官网 Access Server,它告诉你 what 和 howto,至于其它的都是代码,不搞这个开发仅使用和包装的话也没必要看了。

我对 OpenVPN 过于熟悉,曾经为它工作了 5 年多,下面是我 review 代码后的一个简图,勾勒 ovpn DCO 结构:
在这里插入图片描述

而我在 2014 年也基于 Netfilter 写过一个类似的玩具:OpenVPN-in-LinuxKernel

其实,WireGuard 进入内核(Linux 5.6)的历史,可作为 OpenVPN 的对照。OpenVPN 与 WireGuard 的内核支持将直接竞争:

  • WireGuard:协议,配置,控制均简洁。
  • OpenVPN:配置灵活,支持 TCP,成熟生态。

OpenVPN 进内核不只优化了拷贝和切换(但标准程序员却总盯着这些),更多是它以这种方式融入了丰富的 Linux 内核网络生态,比如 Netfilter,iptables/nft,eBPF/XDP,甚至还有进一步 offloading 的可能,直达现代加密硬件和加速卡。

对比 DCCP,OpenVPN 的启示是,协议存活关键不是技术,而是生态。妹忒内儿更青睐被广泛使用的代码,而非 “完美” 的代码。所以,DCCP 因无人问津被移除,而 OpenVPN 因需求被维护而被纳入,体现的是一种实用原则。

有趣的是,2005 年,DCCP 被合入 Linux 2.6.14 内核,稍早的 2001 年,OpenVPN 出世,OpenVPN and the SSL VPN Revolution 写于 2004 年,与 DCCP 差不多同期被认识到了意义。

至于控制通道,核心还是 SSL/TLS 那一套,库太多了,而 OpenVPN 自带的 plugin,script 也值得一提。

2010 年开始我基于 OpenVPN 做了 5 年多,期间做遍了各种数据面,并发以及加解密优化,寻遍了 Linux 内核协议栈的每个角落,到了 2020 年前后,我用这些手艺又吃了两年老本,对 WireGuard 做了几个手术。

遗憾的是,很多人盯上 WireGuard 要用 DPDK 重构它时,我已不想卷了,现在他们觊觎的,又多了一个,经理们,玩得愉快!

浙江温州皮鞋湿,下雨进水不会胖。


网站公告

今日签到

点亮在社区的每一天
去签到