Tailscale是一种软件定义的网状VPN解决方案,可让创建安全网络变得简单。Tailscale 数据平面建立在安全且轻量级的WireGuard 协议之上,与其他解决方案不同,它可以实现一些强大的功能,例如自动密钥轮换、NAT遍历和带有双因素身份验证的单点登录等。与之类似的解决方案还有Zerotier,两者有各自的优缺点。

2022年7月15日,netgate官方发布了适用于pfSense的Tailscale的插件,现在可以在 pfSense防火墙上体验这一强大功能。

如果想获取更多的防火墙信息,请关注“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的控制面板,在设置栏,找到密钥选项,生成一个新的密钥。

pfSense配置Tailscal站点到站点连接_Tailscale

点击生成密钥:

pfSense配置Tailscal站点到站点连接_Tailscale_02

将生成的密钥复制到预认证密钥栏:pfSense配置Tailscal站点到站点连接_Tailscale_03

单击保存。

转到设置选项卡,选中启用Tailscale,监听端口使用默认值,选中授权子网路由,在通告路由选项,输入防火墙使用的子网。这里为192.168.11.0/24。

pfSense配置Tailscal站点到站点连接_Tailscale_04

完成后单击保存。

转到防火墙>规则策略,在Tailscale选项卡上,添加一条允许访问任意目标的规则如下图所示:

pfSense配置Tailscal站点到站点连接_Tailscale_05

为保证防火墙后面的客户端能正常访问对端防火墙和它后面的子网,还必须调整出站设置,把自动出站调整为混合出站,并手动添加一条Tailscale出站规则。如下图所示:

pfSense配置Tailscal站点到站点连接_Tailscale_06

回到Tailscale控制面板,可以看到这台防火墙已经在设备列表当中。单击右侧的更多图标,禁用密钥过期。pfSense配置Tailscal站点到站点连接_Tailscale_07

单击编辑路由设置,启用子网路由:

pfSense配置Tailscal站点到站点连接_Tailscale_08

至此,防火墙A设置完成。

防火墙B配置

配置过程与防火墙A相同,注意要生成新的预授权密钥,输入不同的防火墙子网。

pfSense配置Tailscal站点到站点连接_Tailscale_09pfSense配置Tailscal站点到站点连接_Tailscale_10

防火墙规则:

pfSense配置Tailscal站点到站点连接_Tailscale_11

调整出站设置:

pfSense配置Tailscal站点到站点连接_Tailscale_12

禁用密钥过期,配置好子网路由。

pfSense配置Tailscal站点到站点连接_Tailscale_13

至此,两边的防火墙配置完成。

测试

两边防火墙互相ping对端子网地址,测试连接通性。

在防火墙A上,ping防火墙B的LAN地址:

pfSense配置Tailscal站点到站点连接_Tailscale_14

在防火墙B上,ping防火墙A的LAN地址:

pfSense配置Tailscal站点到站点连接_Tailscale_15

测试连接没有问题。

使用iperf跑了一下测速(300M上、下行对等带宽):

pfSense配置Tailscal站点到站点连接_Tailscale_16

跟Zerotier相比,好像没有什么惊喜-

其他

在多WAN环境中使用,如果在防火墙上设置负载平衡,会出现防火墙后面的客户端无法访问远程节点的问题。解决办法如下:

建立一个远程节点子网(或地址)的别名,在防火墙LAN接口选项卡上,在多线负载平衡规则前面添加一条规则,指定目标为远程节点别名,默认网关设为故障转移网关组或某个单网关即可。

新建一个远程子网的别名:

pfSense配置Tailscal站点到站点连接_Tailscale_17

添加一条访问远程子网走指定默认网关的规则:

pfSense配置Tailscal站点到站点连接_Tailscale_18