使用 tinc 组建虚拟局域网

虚拟局域网方案有很多从最用户友好的 Logmein Hamachi(童年回忆)到ZeroTier等复杂的组网方案,但是都各有优缺点。ZeroTier不可控,虽然也有自建方案但是就更复杂了,SoftEther不支持p2p(那我为什么不直接反代呢),至于某国产软件,感觉就是翻版hamachi只能期待ipv6早日普及了。

相比之下,tinc轻量,可控且基于GNU开放源代码,当然,tinc的配置方式十分复杂。

tinc配置格式

每一个tinc网络都有一个单独的文件夹,通常是网络名。其中应当有以下内容:

  • tinc.conf 节点配置文件 官方文档
  • hosts 主机描述文件 这是一个文件夹 包含所有节点的描述文件 官方文档
  • 脚本文件 常用的有 tinc-up tinc-down 官方文档

实例

在开始组网前,请确保至少有一台具备公网IP且可访问的主机。
本例中:

  • 公网机器ip 为 1.1.1.1
  • 公网机器局域网ip 为 192.168.117.1
  • 内网Windows PC 局域网ip为 192.168.117.33 没有公网ip
  • 网络名称为 the_net 公网机器主机名为 core 内网Windows PC主机名为winpc
  • Windows PC虚拟适配器名为 tinc-Tap

    公网机器配置

    这是一台Ubuntu云服务器 直接 apt install tinc 即可

然后创建配置文件

1
2
3
4
5
# tinc配置目录
cd /etc/tinc
mkdir the_net
cd /etc/tinc/the_net/
mkdir hosts

在当前目录下,创建一个 tinc.conf 文件,内容为:

1
Name = core

然后,在hosts文件夹内添加一个名为core(与上面指定的主机名相同)的文件:

1
2
Address = 1.1.1.1
Subnet = 192.168.117.0/32

仍然在当前目录,由于是Linux,要创建两个脚本tinc-up tinc-down来配置虚拟网卡设备:

1
2
3
# tinc-up
#!/bin/sh
ifconfig $INTERFACE 192.168.117.0 netmask 255.255.255.0
1
2
3
# tinc-down
#!/bin/sh
ifconfig $INTERFACE down

注意:记得给这两个文件执行权限:chmod +x tinc-up tinc-down

接着生成密钥:tincd -n the_net -K
确认所有提示,会得到一个私钥文件和一个公钥文件,公钥会自动附加到hosts描述文件的末尾,以便下一步进行描述文件交换。

内网 Windows PC 配置

首先安装 Windows 版的 tinc。安装完成后目录下会有一个tap-win64文件夹。
右键addtap.bat,以管理员身份运行,安装虚拟网卡驱动。

然后可以在控制面版看到虚拟网卡的名字,例如 我这里原本的名字是以太网 3,可以修改,本文以tinc-Tap为例
Windows Control Panel - rename adapter
Windows下tinc配置目录就是安装目录,例如 D:/Program Files(x86)/tinc/就相当于/etc/tinc目录。
首先创建一个名为the_net的文件夹,目录结构与之前相同:

tinc.conf

1
2
3
Name = winpc
ConnectTo core
Interface = tinc-Tap

hosts/winpc

1
Subnet = 192.168.117.33/32

注意Windows下脚本文件要加上.bat扩展名,并且其中使用netsh命令
tinc-up.bat

1
netsh interface ip set address tinc-Tap static 192.168.117.33 255.255.255.0

另外Windows下设置tinc-down意义不大,当tincd服务关闭时,虚拟网卡便会进入”网络电缆被拔出”状态,因此如无其他需求,无需设置。

接下来,交换主机描述文件。将公网机器的hosts下的core文件复制到本机的hosts目录下,将本机的winpc文件复制到公网机器hosts目录。之后添加新的机器,仍需和公网机器交换描述文件。

1
2
scp server:/etc/tinc/the_net/hosts/core ./the_net/hosts/
scp ./the_net/hosts/winpc server:/etc/tinc/the_net/hosts/

交换完成后,双方重启服务即可。

(重要) 针对 Windows 防火墙,将VPN网络设置为专用网络。

Windows防火墙有三种针对方案 域(DomainAuthenticated) 专用(Private) 公有(Public)。我们自己添加的虚拟网卡默认是Public即公用网络,尽管所有模式都允许传出连接,但是公用方案会默认阻止传入连接(如果不手动允许的话)。很遗憾Windows的图形设置界面中没有针对额外网卡设备设置网络方案的界面,我们需要使用Windows Powershell
注意以管理员权限运行Powershell:

1
Set-NetConnectionProfile -InterfaceAlias tinc-Tap -NetworkCategory Private

其中InterfaceAlias参数仍然是适配器名,注意修改。也可以使用 Get-NetConnectionProfile cmdlet查看具体内容。
Windwos Firewall Private Network


参考文章

Permalink: http://blog.artiga.top/2022/tinc-virtual-lan/

本文采用CC BY-NC-SA 4.0许可

Comments