pfSense使用WireGuard建立点对点连接,实现策略路由

本文摘要在 Ubuntu 20.04 LTS 上安装 WireGuard VPN 并与 pfSense 建立站点到站点连接及策略路由WireGuard 是一种新型开源 VPN 协议,相比传统 VPN 更简单、传输速度更快。本文将介绍如何在 Ubuntu 20.04 LTS 服务器上安装 WireGuard VPN 服务器,并与 pfSense 建立点对点连接,实现基于策略的 VPN 分流路由。本示例中服务...

在 Ubuntu 20.04 LTS 上安装 WireGuard VPN 并与 pfSense 建立站点到站点连接及策略路由

WireGuard 是一种新型开源 VPN 协议,相比传统 VPN 更简单、传输速度更快。本文将介绍如何在 Ubuntu 20.04 LTS 服务器上安装 WireGuard VPN 服务器,并与 pfSense 建立点对点连接,实现基于策略的 VPN 分流路由。

本示例中服务器运行 Ubuntu 20.04 LTS,VPN 隧道子网为 10.10.0.0/24,服务器 WG 接口地址 10.10.0.1,pfSense 防火墙 WG 接口地址 10.10.0.2


服务器配置

1. 安装 WireGuard

更新系统并安装 WireGuard:

apt upgrade
apt install wireguard

2. 生成密钥

进入配置目录并生成公钥/私钥对:

cd /etc/wireguard/
umask 077; wg genkey | tee privatekey | wg pubkey > publickey

查看私钥(请记下备用):

cat privatekey

查看公钥:

cat publickey

3. 编辑 wg0.conf

安装 vim 并编辑 WireGuard 配置文件:

apt install vim
vim /etc/wireguard/wg0.conf

示例配置内容(eth0 为服务器公网网卡名称,请按实际修改):

[Interface]
Address = 10.10.0.1/24
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 51820
PrivateKey = <服务器私钥>

[Peer]
PublicKey  = <pfSense 端公钥>
AllowedIPs = 10.10.0.2/32
注意:<服务器私钥> 填入前面生成的私钥,<pfSense 端公钥> 稍后从 pfSense 获取后填入。

4. 防火墙与转发设置

使用 UFW 开放 UDP 51820 端口:

ufw allow 51820/udp
ufw status

启用 IP 转发并添加必要的 iptables 规则(如未使用 UFW 也可直接配置):

iptables -t nat -I POSTROUTING 1 -s 10.10.0.0/24 -o eth0 -j MASQUERADE
iptables -I INPUT 1 -i wg0 -j ACCEPT
iptables -I FORWARD 1 -i eth0 -o wg0 -j ACCEPT
iptables -I FORWARD 1 -i wg0 -o eth0 -j ACCEPT
iptables -I INPUT 1 -i eth0 -p udp --dport 51820 -j ACCEPT
sysctl -w net.ipv4.ip_forward=1

5. 启动 WireGuard 服务

systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0
systemctl status wg-quick@wg0

验证接口状态:

wg
ip a show wg0

pfSense 配置

本文使用 pfSense Plus 22.01 进行演示。

1. 添加隧道

进入 VPN → WireGuard → 隧道,点击添加隧道。
隧道公钥必须与服务器 wg0.conf 中 Peer 的公钥一致。

pfSense 添加 WireGuard 隧道

2. 配置接口

为新建的隧道接口分配 IP 地址(本例为 10.10.0.2/32)。

配置 WireGuard 接口地址

配置完成后接口列表如下:

WireGuard 接口列表

3. 添加远程端点

进入 VPN → WireGuard → 端点,添加服务器端点:

  • 端点地址:服务器的公网 IP
  • 公钥:服务器上生成的公钥
  • 允许 IP:0.0.0.0/0(或按需限制)

添加 WireGuard 远程端点

配置完成:

端点列表

4. 启用 WireGuard

进入 VPN → WireGuard → 设置,勾选“启用 WireGuard”并保存。

启用 WireGuard 服务

5. 添加远程网关

进入 系统 → 路由管理 → 网关,点击添加:

  • 接口:前面创建的 WG 接口
  • 网关 IP:10.10.0.1(服务器 WG 地址)

添加远程网关

6. 配置防火墙规则与策略路由

放行 WG 接口流量

防火墙 → 规则 的 WG 接口上添加允许任意通信的规则(或根据实际需求细化)。

WG 接口允许规则

放行 WAN 接口 UDP 51820

在 WAN 接口规则中添加允许 UDP 51820 的规则。

WAN 接口放行 UDP 51820

导入国内 IP 段别名

进入 防火墙 → 别名,创建 IP 别名,导入国内 IP 地址段(可从 GitHub 下载)。

导入 IP 别名

导入后的别名列表:

国内 IP 别名

配置 LAN 策略路由

修改 LAN 默认规则:目标选择国内 IP 别名,网关选 WAN 网关,并置于规则列表最上方。
在其后添加一条新规则:目标为 any,网关选择前面创建的远程网关(VPS 网关),用于访问非国内地址。

LAN 策略路由规则


测试验证

完成设置后,先检查隧道状态是否连通,再验证分流效果。

访问国外 IP 查询站,确认出口 IP 为 VPS 公网地址:

国外 IP 检测结果

访问国内 IP 查询站,确认出口 IP 为本地 WAN 地址:

国内 IP 检测结果

进一步验证国内外网站访问正常:

国内外网站访问测试

检查防火墙规则命中流量,确认分流生效:

策略路由规则流量统计


参考文章

觉得内容不错?我要

评论 暂无评论
暂无评论,快来抢沙发吧~