Wireguard是一个易于配置、快速且安全的开源 VPN,它采用了最新的加密技术,比OpenVPN更先进,可以在多种平台上使用。WireGuard VPN最初被集成在pfSense2.50中,但由于是netgate委托第三方开发的代码,爆出安全漏洞,被Wireguard原作者吐槽,在pfSense2.51发布时删除。在最新的pfSense2.52中,以插件形式提供了基于WireGuard原作者为FressBSD开发的WireGuard插件。该插件目前还在更新完善当中,功能方面已经完备,性能也已经稳定。要了解该插件的详细信息,可以参阅在pfSense上安装WireGuard VPN 插件这篇文章。本文介绍在pfSense2.52(当前为RC版)上配置WireGuard VPN进行站点到站点连接和策略路由的过程。
本示例网络拓扑如下:
配置流程:添加隧道→添加远程端点→分配接口→添加规则→添加网关→添加静态路由→添加策略路由→测试。
防火墙A配置
添加隧道
在防火墙A上,导航到VPN>WireGuard,单击添加隧道,填写如下内容,端口可以采用默认值,也可以自定义,接口公钥、私钥点击右侧的自动生成完成。
添加对端(远程端点)
保存后,在页面下方单击添加对端,端点填写防火墙B的公网IP,端口填写后面步骤中防火墙B上设置的自定义端口或默认值,公钥可以先不填,待启用防火墙B的隧道后再复制过来。允许IP输入0.0.0.0/0,你也可以根据自己的子网和WG设置填写网络地址。
完成后如下图所示:
分配接口
首先,修改默认网关,以便在准备就绪之前不会自动选择WireGuard:
- 导航到系统>路由管理
- 将默认网关IPv4设置为特定网关(例如WANGW)或组
- 如果该VPN也同时承载IPv6流量,则以类似方式设置默认网关IPv6
- 点击保存
- 点击“应用更改”
接下来分配接口,以方便后面使用策略路由。
- 导航到接口>分配
- 在“可用网络端口”列表中,找到类似wg0这样的接口
- 单击添加将接口分配为新的OPT接口(例如OPT1)
- 导航到“接口配置”页面,“接口”>“OPTx”
- 选中启用
- 输入描述,(例如
WG
) - IPv4配置类型,选静态IPv4
- IPv4地址,输入10.10.10.1/24
- 点击保存
- 点击“应用更改”
添加防火墙规则
导航到防火墙>规则策略,在WireGuard接口上添加any to any的规则,如下图所示:
在对应WAN接口上,添加允许WireGuard默认端口或自定义端口通行的防火墙规则,协议选UDP,如下图所示:
在新添加的WG接口上,添加一条any to any的规则 ,如下图所示:
防火墙B配置
添加隧道
在防火墙B上,导航到VPN>WireGuard,单击添加隧道,填写如下内容,接口公钥、私钥点右侧的自动生成完成。这里的公钥必须与防火墙A的远程端点公钥一致。
添加对端(远程端点)
保存后,在页面下方单击添加对端,与防火墙A设置类似,如下图所示,公钥从防火墙A本地隧道上复制。允许IP输入0.0.0.0/0,你也可以根据自己的子网和WG设置填写网络地址。
填写完成后如下图所示:
分配接口
与防火墙A设置类似,分配WG接口并填写IPv4地址:10.10.10.2/24,添加对应的三条防火墙规则。
至此,pfSense防火墙上WireGuard VPN站点到站点的配置就完成了。下图是两个防火墙连接后的详细信息。
完成上面的步骤后,两端的WireGuard VPN隧道已经打通,在防火墙A上PING防火墙B的WG接口地址(10.10.10.2),是可以连通的,反之也可以。但这时候还不能访问对端的LAN子网,还需要添加WG网关,并填加基于WG接口的静态路由。
静态路由
添加对端网关
在防火墙A上,为WG接口添加远程网关。
导航到路由管理>网关状态,添加网关,IP地址为对端WG接口地址,这里为10.10.10.2。
添加静态路由
在防火墙A上,导航到路由管理>静态路由,单击添加,新增一条静态路由,目标网络输入防火墙B的LAN子网,网关选上一步新建立的网关,如下图所示:
填写完成后如下所示:
防火墙B也进行以上的设置,注意网关地址填写防火墙A的WG接口地址:10.10.10.1,静态路由目标网络为防火墙A的LAN子网192.168.101.0/24。完成以上步骤后,现在已经可以对远端的子网进行访问了,从防火墙Ping对端的LAN子网地址是可以连通的。
策略路由
如果要从远程公网出站访问互联网,可以修改LAN接口的默认策略路由。在防火墙B的lan接口上,修改默认的防火墙规则,将网关修改为WG网关,确保所有的流量通过WG隧道。如下图所示:
测试
一、测试隧道的连通性:在防火墙A上ping防火墙B的LAN接口和WG接口IP,测试连接是否成功。
二、测试策略路由是否生效:在防火墙B后面的电脑终端上,检查访问的公网IP是否发生改变。显示为防火墙A的公网IP,就说明策略路由已生效。
三、测速:用iperf3跑了一下测速,测试带宽为上、下行300M,测试结果如下图:
如果一端有公网IP,一端没有公网IP呢?
用其他的内网穿透工具。