OPNsense与Ubuntu VPS使用WireGuard建立点对点连接,实现VPN策略路由

WireGuard 是一种开源、免费、现代且快速的 VPN,具有最先进的加密技术。本文介绍如何在Ubuntu 20.04 LTS Linux 服务器上安装和设置 WireGuard VPN服务器,并与OPNsense建立点对点连接,实现VPN策略路由。

WireGuard VPN 服务器搭建

本教程使用的服务器是运行Ubuntu 20.04 LTS 系统的板瓦工VPS,VPN隧道所使用的子网为:10.0.0.0/24,其中Ubuntu WireGuard服务器的WG接口地址为10.0.0.1,OPNsense的WG接口地址为10.0.0.10。在linux上安装WireGuard分以下几个步骤:

安装WireGuard

首先运行以下命令更新系统:

apt upgrade

再运行以下命令,安装WireGuard

apt install wireguard

配置WireGuard

首先,我们需要为WireGuard 服务器创建一个私钥和公钥对。先必须获取管理员权限,然后使用 cd 命令进入 /etc/wireguard ,再执行密钥创建命令。查看创建的密钥,可以使用cat 命令和 ls 命令:

首先取得管理员权限:

sudo -i

进入wireguard目录:

cd /etc/wireguard/

生成公钥和私钥:

umask 077; wg genkey | tee privatekey | wg pubkey > publickey

查看生成的私钥和公钥,并记录到记事本

ls -l privatekey publickey
cat privatekey
cat publickey

编辑配置文件

使用Vim编辑/etc/wireguard/wg0.conf 文件:

vim /etc/wireguard/wg0.conf

文件内容如下:

[Interface]
Address = 10.0.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 = CDFMDzpL12pQFwm/mqvUvRdA6omIosDsi1tW487nPEY=
MTU = 1420

[Peer]
PublicKey = CnKt9tFS05879pLHdKtbrRuHJwM2VoJ/F1eyhHSWkCI=
AllowedIPs = 10.0.0.10/32

其中Peer的PublicKey(公钥)在OPNsense客户端上复制。

打开防火墙的端口

ufw allow 51820/udp

启动WireGuard 服务

启用WireGuard服务:

systemctl enable wg-quick@wg0

运行WireGuard服务:

systemctl start wg-quick@wg0

查看服务状态:

systemctl status wg-quick@wg0

使用ip命令验证wg0 的接口状态:

wg
ip a show wg0

防火墙设置

设置防火墙的目地是使用 iptables为 WireGuard VPN 客户端启用 IP 转发和 NAT 规则,以便为客户端提供 Internet 访问。

1、确保所有传出的数据包都通过 VPN 进行转换:

iptables -t nat -I POSTROUTING 1 -s 10.0.0.0/24 -o eth0 -j MASQUERADE

2、允许 wg0 接口上的所有流量:

iptables -I INPUT 1 -i wg0 -j ACCEPT

3、通过设置FORWARD 规则允许数据包通过 WireGuard 服务器进行路由:

iptables -I FORWARD 1 -i eth0 -o wg0 -j ACCEPT
iptables -I FORWARD 1 -i wg0 -o eth0 -j ACCEPT

4、打开WireGuard 所使用的UDP端口51820

iptables -I INPUT 1 -i eth0 -p udp --dport 51820 -j ACCEPT

5、打开IP转发(ipv4):

sysctl -w net.ipv4.ip_forward=1

上述命令,可以集中起来一起运行:

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

OPNsense防火墙WireGuard客户端设置

详细的配置过程,可以参考pfSense、OPNsense使用WireGuard VPN建立站点到站点连接和配置策略路由示例,注意修改WG接口IP为10.0.0.10,静态路由可以不用配置。

测试

在OPNsense上完成策略路由的设置以后,在客户端先检查是否能PING通VPS服务器WG接口IP,如果能通,再检查是否能正常上网。先查看上网IP,检查是否为VPS的IP。

测试播放视频的速度,稳定在9.7万。

speedtest的测速,下载基本跑满了300M的带宽。

使用体会:打开国外网站的速度比较快,访问国内的网站则慢很多,部分国内网站会存在无法访问的问题。

参考文章:

  1. Ubuntu 20.04 set up WireGuard VPN server
  2. How To Set Up WireGuard Firewall Rules in Linux
  3. pfSense、OPNsense使用WireGuard VPN建立站点到站点连接和配置策略路由示例

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注