Tailscale是一种软件定义的网状VPN解决方案,可让创建安全网络变得简单。Tailscale 数据平面建立在安全且轻量级的WireGuard 协议之上,与其他解决方案不同,它可以实现一些强大的功能,例如自动密钥轮换、NAT遍历和带有双因素身份验证的单点登录等。与之类似的解决方案还有Zerotier,两者有各自的优缺点。
2022年7月15日,netgate官方发布了适用于pfSense的Tailscale的插件,现在可以在 pfSense防火墙上体验这一强大功能。
下面以两个不同地点的pfSense防火墙建立站点到站点连接为例,介绍Tailscale的配置过程。
所使用的软件为pfSense plus 22.05中文定制版,防火墙A的子网为192.168.11.0/24,防火墙B的子网为192.168.21.0/24。为便于读者分辨,防火墙A采用深色主题,防火墙B采用浅色主题。
防火墙A配置
导航到插件管理>可用插件,找到Tailscale并安装。安装完成后,转到VPN>Tailscale,转到认证选项卡,访问登录服务器上的地址,使用谷歌或微软等帐号注册Tailscale。注册完成后,转到tailscale的控制面板,在设置栏,找到密钥选项,生成一个新的密钥。
点击生成密钥:
将生成的密钥复制到预认证密钥栏:
单击保存。
转到设置选项卡,选中启用Tailscale,监听端口使用默认值,选中授权子网路由,在通告路由选项,输入防火墙使用的子网。这里为192.168.11.0/24。
完成后单击保存。
转到防火墙>规则策略,在Tailscale选项卡上,添加一条允许访问任意目标的规则如下图所示:
为保证防火墙后面的客户端能正常访问对端防火墙和它后面的子网,还必须调整出站设置,把自动出站调整为混合出站,并手动添加一条Tailscale出站规则。如下图所示:
再回到Tailscale控制面板,可以看到这台防火墙已经在设备列表当中。单击右侧的更多图标,禁用密钥过期。
单击编辑路由设置,启用子网路由:
至此,防火墙A设置完成。
防火墙B配置
配置过程与防火墙A相同,注意要生成新的预授权密钥,输入不同的防火墙子网。
防火墙规则:
调整出站规则:
同时禁用密钥过期,并配置好子网路由。
至此,两边的防火墙配置完成。
测试
两边防火墙互相ping对端子网地址,测试连接通性。
在防火墙A上,ping防火墙B的LAN地址:
在防火墙B上,ping防火墙A的LAN地址:
测试连接没有问题。
使用iperf跑了一下测速(300M上、下行对等带宽):
好像没有惊喜,哈哈。
其他
在多WAN环境中使用,如果在防火墙上设置负载平衡,会出现防火墙后面的客户端无法访问远程节点的问题。解决办法如下:
建立一个远程节点子网(或地址)的别名,在防火墙LAN接口选项卡上,在多线负载平衡规则前面添加一条规则,指定目标为远程节点别名,默认网关设为故障转移网关组或某个单网关即可。
注意:如果防火墙后面的客户端不能与远程客户端连接,可以启用UPnP和NAT-PMP设置,并选中允许NAT-PMP端口映射选项。详细原因参见这里。