虚拟局域网方案有很多从最用户友好的 Logmein Hamachi(童年回忆)到ZeroTier等复杂的组网方案,但是都各有优缺点。ZeroTier不可控,虽然也有自建方案但是就更复杂了,SoftEther不支持p2p(那我为什么不直接反代呢),至于某国产软件,感觉就是翻版hamachi。只能期待ipv6早日普及了。
相比之下,tinc轻量,可控且基于GNU开放源代码,当然,tinc的配置方式十分复杂。
tinc配置格式
每一个tinc网络都有一个单独的文件夹,通常是网络名。其中应当有以下内容:
实例
在开始组网前,请确保至少有一台具备公网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 即可
然后创建配置文件
# tinc配置目录cd /etc/tincmkdir the_netcd /etc/tinc/the_net/mkdir hosts在当前目录下,创建一个 tinc.conf 文件,内容为:
Name = core然后,在hosts文件夹内添加一个名为core(与上面指定的主机名相同)的文件:
Address = 1.1.1.1Subnet = 192.168.117.0/32仍然在当前目录,由于是Linux,要创建两个脚本tinc-up tinc-down来配置虚拟网卡设备:
# tinc-up#!/bin/shifconfig $INTERFACE 192.168.117.0 netmask 255.255.255.0# tinc-down#!/bin/shifconfig $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下tinc配置目录就是安装目录,例如 D:/Program Files(x86)/tinc/就相当于/etc/tinc目录。
首先创建一个名为the_net的文件夹,目录结构与之前相同:
tinc.conf
Name = winpcConnectTo coreInterface = tinc-Taphosts/winpc
Subnet = 192.168.117.33/32注意Windows下脚本文件要加上.bat扩展名,并且其中使用netsh命令
tinc-up.bat
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目录。之后添加新的机器,仍需和公网机器交换描述文件。
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:
Set-NetConnectionProfile -InterfaceAlias tinc-Tap -NetworkCategory Private其中InterfaceAlias参数仍然是适配器名,注意修改。也可以使用 Get-NetConnectionProfile cmdlet查看具体内容。
