引言
曾经我作过一篇使用 tinc 组建虚拟局域网的文章,距今已经三年多了。tinc仍然是我所使用过的(开源)组网工具中最优秀的一个。你也许会说 tinc 维护不是很频繁和积极,但是在我看来这恰恰说明这是一个稳定且成熟的、久经考验并且已经处于“完成”状态的项目(当然不可否认它实际上还有很多值得进一步优化的点)。
不过,正如同大部分项目一样,它并没有(尽管实际上可以运行)考虑 windows-arm64 平台的使用场景。本文将介绍如何在 Windows on ARM 上使用 tinc。
构建 tinc
tinc 可以直接使用 msvc 工具链构建,确保安装 Visual Studio 的 C++ 工作负载,并且安装 meson 即可。
meson setup builddir --wipe --backend vsmeson compile -C .\builddir\ -v
构建完成后,tinc.exe
和 tincd.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.inf
、tap0901.cat
、tap0901.sys
三个驱动文件。
然而,如果你直接将它作为压缩包打开的话,会发现它居然在同一个目录下有若干同名文件:
如果通过解压的方式来获取这些文件,那么就需要想办法判断它属于哪种架构了:
-
对于
exe
和sys
文件,可以通过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.bat
和 deltapall.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。