虚拟局域网方案有很多从最用户友好的 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
即可
然后创建配置文件
1 | # tinc配置目录 |
在当前目录下,创建一个 tinc.conf
文件,内容为:
1 | Name = core |
然后,在hosts
文件夹内添加一个名为core
(与上面指定的主机名相同)的文件:
1 | Address = 1.1.1.1 |
仍然在当前目录,由于是Linux,要创建两个脚本tinc-up
tinc-down
来配置虚拟网卡设备:
1 | # tinc-up |
1 | # tinc-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
1 | Name = winpc |
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 | scp server:/etc/tinc/the_net/hosts/core ./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查看具体内容。
参考文章
Permalink: http://blog.artiga.top/2022/tinc-virtual-lan/
本文采用CC BY-NC-SA 4.0许可
Comments