836 字
4 分钟
在 Windows on ARM 上使用 tinc

引言#

曾经我作过一篇使用 tinc 组建虚拟局域网的文章,距今已经三年多了。tinc仍然是我所使用过的(开源)组网工具中最优秀的一个。你也许会说 tinc 维护不是很频繁和积极,但是在我看来这恰恰说明这是一个稳定且成熟的、久经考验并且已经处于“完成”状态的项目(当然不可否认它实际上还有很多值得进一步优化的点)。

不过,正如同大部分项目一样,它并没有(尽管实际上可以运行)考虑 windows-arm64 平台的使用场景。本文将介绍如何在 Windows on ARM 上使用 tinc。

构建 tinc#

tinc 可以直接使用 msvc 工具链构建,确保安装 Visual Studio 的 C++ 工作负载,并且安装 meson 即可。

meson setup builddir --wipe --backend vs
meson compile -C .\builddir\ -v

构建完成后,tinc.exetincd.exe 位于 builddir\src\ 目录下。

OpenVPN TAP 网卡#

tinc 需要借助一个 OpenVPN 的虚拟设备来作为 TAP 网卡。同样可以考虑自行构建 OpenVPN,不过它就比较看不起 Windows 平台了,它要求 MSYS2 环境才能构建,然而,我并不用也不想用 MSYS2。好在它们也提供了预构建二进制

不过,9.24.8 版本只提供了 msm 模块,我目前没有找到解包这个东西的好办法,因此选择了 9.24.7 版本的 exe 安装程序,即https://build.openvpn.net/downloads/releases/tap-windows-9.24.7-I601-Win10.exe,这个东西是有 arm64 版本的。

我们需要其中的 tapinstall.exe 用于管理虚拟网卡,以及 OemVista.inftap0901.cattap0901.sys 三个驱动文件。

然而,如果你直接将它作为压缩包打开的话,会发现它居然在同一个目录下有若干同名文件:

tap-windows-9.24.7-I601-Win10.exe 打开为压缩包

如果通过解压的方式来获取这些文件,那么就需要想办法判断它属于哪种架构了:

  • 对于 exesys 文件,可以通过 dumpbin.exe /headers 来查看它的 PE 头信息,检查 FILE HEADER VALUES 中的 machine 字段是否是 AA64。(dumpbin.exe 是 Visual Studio MSVC 所带的工具)

  • 对于 cat 文件,可以直接用 certutil -dump 来查看内容,然后检查其中是否有 A.R.M.6.4 的字样。

  • 对于 inf 文件,可以直接作为文本打开,然后查看其中的 Manufacturer.%Provider% 值。

“安装”#

文件#

完成上面的步骤后,我们就得到了一系列文件,将它们按照类似 tinc 官方打包的 x64 版本的目录结构组织起来即可:

C:\Program Files\tinc
│ tinc.exe
│ tincd.exe
└───tap-winarm64
OemVista.inf
tap0901.cat
tap0901.sys
tapinstall.exe

官方发布的版本还有 addtap.batdeltapall.bat 两个文件,用于帮助安装和卸载虚拟网卡,不过它们内部只是简单的一行命令。 需要注意的是我们这里的 inf 文件名已经是 OemVista.inf,而不是 OemWin2K.inf,因此需要修改一下命令:

安装tap

.\tapinstall.exe install OemVista.inf tap0901

可以使用设备管理器删除,或者直接用此命令删除所有虚拟网卡

.\tapinstall.exe remove tap0901

注册表#

要让 tinc -n 能够正常工作,需要一个注册表项,否则它会默认使用 c:/etc 作为 base path。

reg add "HKLM\SOFTWARE\tinc" /ve /d "C:\Program Files\tinc" /f

结束#

这样,我们就获得了和 x64 版本完全一致的使用体验,可以像 x64 版本一样配置和使用 tinc。

在 Windows on ARM 上使用 tinc
https://blog.a33.su/posts/tinc-virtual-lan-woa/
作者
artiga033
发布于
2025-10-05
许可协议
CC BY-NC-SA 4.0