OPNsense设置WireGuard教程

WireGuard 是一种简单快速的VPN协议,采用现代加密技术,比 IPsec、OpenVPN更快、更简单。它还有一个更小的代码库,这使得审计和维护更容易。虽然最初是为 Linux 内核设计的,但现在已经可以跨平台使用。

本教程介绍在OPNsense上安装WireGuard 服务器,配置一个或多个客户端来进行远程连接。使用的软件为OPNsense 21.7.3,客户端为运行Windows的计算机和Android移动设备。客户端的流量将通过 Ubuntu 20.04 服务器进行路由。

WireGuard P2P VPN 拓扑(OPNsense WireGuard 服务器和 Android/Windows 客户端)

图 1. WireGuard P2P VPN网络拓扑

配置WireGuard VPN 服务器

OPNsense WireGuard 配置按照以下五个主要步骤展开:

  • 服务器和客户端下载并安装 WireGuard
  • 服务器和客户端生成加密密钥对(公钥和私钥)
  • 服务器和客户端上配置 WireGuard 隧道接口
  • OPNsense WireGuard VPN 服务器上配置防火墙规则
  • 服务器和客户端上启用 WireGuard 隧道接口

1.OPNsense安装WireGuard

  • 导航到System-> Firmware-> Plugins
  • 在搜索字段中输入os-wireguard

OPNsense 上的 WireGuard 插件安装

图 2. OPNsense 上的 WireGuard 插件安装

  • os-wireguard插件的右侧,单击 图标进行安装。
  • 安装完成后,刷新页面,通过VPN->WireGuard菜单访问WireGuard

图 3. OPNsense安装插件os-wireguard

2.OPNsense WireGuard配置

  • 导航到VPN-> WireGuard-> 。General
  • 单击复选框启用 WireGuard。

在 OPNsense 上启用 WireGuard 服务器

图 4. 在 OPNsense 上启用 WireGuard 服务器

  • 导航到Local选项卡,然后单击右侧的 图标,添加新的本地配置。

在 OPNsense 上添加本地 WireGuard 配置

图 5. 在 OPNsense 上添加本地 WireGuard 配置

  • 选中启用本地配置。
  • 设置WireGuard VPN 服务器的名称,例如MyWireGuard.
  • 将监听端口设置为51820 或更高编号的唯一端口。
  • 设置隧道地址,例如10.0.0.1/24

隧道地址是你使用的网络的唯一 IP地址和子网。子网应该足够大以便容纳将使用隧道的所有客户端。它应该是私有 (RFC1918) 地址,例如 10.0.0.1/24。

  • 其他选项保留为默认值。

在 OPNsense 上设置本地 WireGuard VPN 服务器配置

图 6. 在 OPNsense 上设置本地 WireGuard VPN 服务器配置

  • 单击底部的保存按钮。会自动为WireGuard VPN服务器生成公钥和私钥对。

WireGuard 的主要优势之一是它基于尖端的加密技术。它通过使用一对加密密钥对连接进行加密,提供安全的VPN隧道。为了确保双向安全通信,每个对等点都必须拥有自己的私钥和公钥。每个服务器和客户端必须生成自己的密钥对,然后交换公钥才能使用 WireGuard。

在 OPNsense 上编辑本地 WireGuard VPN 服务器配置

图 7. 在 OPNsense 上编辑本地 WireGuard VPN 服务器配置

  • 单击pencil图标可编辑/查看MyWireGuardVPN 本地配置。
  • 这里的Public Key稍后用于配置在WireGuard VPN 客户端上。

查看 WireGuard VPN 服务器的“公钥”

图 8. 查看Public KeyWireGuard VPN 服务器

  • 关闭Edit Local Configuration窗口。

现在,WireGuard服务器可以接受来自端口51820的连接,并允许客户端自动生成与私钥对应的公钥。

3.Windows客户端配置

WireGuard for Windows 支持 Windows 7、8、8.1、10、2012、2016 和 2019,并提供了 64 位和 32 位版本。:

3.1安装 Windows WireGuard客户端

从WireGuard 网站下载并安装 Windows 安装程序。

下载 WireGuard Windows 安装程序

图 9. 下载 WireGuard Windows 安装程序

安装后,会在任务栏的通知区域中看到 WireGuard 图标。

图 10. 任务栏上的 WireGuard 图标

3.2配置 WireGuard Windows客户端

启动 WireGuard 应用程序,然后单击“隧道”选项卡中显示的Add Tunnel按钮旁边的向下箭头。

图 11. 在 Windows 客户端上配置 WireGuard

点击Add empty tunnel:

图 12. 添加空隧道

会自动创建一个公钥/私钥对,并显示在屏幕上。

在 Windows 客户端上创建新的 WireGuard 隧道

图 13. 在 Windows 客户端上创建新的 WireGuard 隧道

为隧道输入一个仅包含字母数字字符(无空格或标点符号)的名称,例如MyWireGuard,然后编辑配置如下:


[Interface]

PrivateKey = CLIENT_PRIVATE_KEY

Address = 10.0.0.11/24

DNS = 10.0.0.1

  

[Peer]

PublicKey = SERVER_PUBLIC_KEY

Endpoint = SERVER_IP_ADDRESS:51820

AllowedIPs = 0.0.0.0/0

接口部分的字段说明如下:

  • PrivateKey:Windows 客户端的私钥。
  • PublicKey:Windows 客户端的公钥。然后必须将公钥复制到OPNsense上相关客户端对等点的的端点配置中。
  • Address:此客户端的VPN IP地址。它在所有客户端中必须是唯一的。是在 OPNsense的端点配置中指定为允许 IP 的 IP。
  • DNS:客户端用于隧道的DNS服务器的IP 地址。在本例中,使用在OPNsense WireGuard服务器上运行的 DNS 服务器。

peer部分的字段说明如下:

  • PublicKey:OPNsense WireGuard服务器的公钥(本例中如图8所示,为:fyKJ4c6sXTVRTJla6zQ9wi4okRPRd/GsMbTMszjhAgA=)。
  • Endpoint: OPNsense 服务器的WAN接口IP地址,后跟冒号和 WireGuard 端口 ( 51820)。
  • AllowedIPs: 0.0.0.0/0 : 指定应通过 VPN 路由的 IP 地址。0.0.0.0/0允许所有通信,并通过 VPN 路由所有内容。

3.3阻止非隧道流量选项

在编辑隧道窗口中,有一个Block untunneled traffic选项。当 AllowedIPs 设置为0.0.0.0/0时,可以启用此选项。启用该选项,WireGuard 客户端会添加 Windows 防火墙规则来阻止所有不进出隧道接口的流量。这样它可以防止在VPN之外意外发送IP数据包。

Windows 客户端上的 WireGuard 隧道配置

图 14.Windows 客户端上的 WireGuard Tunnel 配置

完成后,单击Save按钮。

4.将Windows客户端配置添加到服务器

将Windows客户端的公钥和 IP 地址添加到服务器,按以下步骤操作:

  • 导航到VPN-> WireGuard-> Endpoints

在 OPNsense 上添加 WireGuard 端点配置

图 15. 在 OPNsense 上添加 WireGuard 端点配置

  • 单击 以添加新端点
  • 输入Name信息,例如MyWindows
  • 输入上面的 Windows WireGuard 客户端配置期间生成的公钥,本示例为:HtuNHzBxW ZcKMjOc5wbXZTFL4qKNbmzo/6XoR/cyEE=.
  • Allowed IPs设置为与Windows WireGuard 客户端配置相同的IP地址,本示例为 10.0.0.11/32
  • 单击Save

在 OPNsense 上设置 WireGuard Endpoint(Windows) 配置

图 16.在 OPNsense上配置WireGuard Endpoint(Windows)

5.配置WireGuard Android客户端

您可以按照以下步骤轻松配置移动设备上的 WireGuard 应用程序以连接 VPN

5.1 Android设备

从设备上获取并安装官方应用程序,国内的应用商店可能不提供该程序,可以单独下载适用于Android设备的apk程序进行安装。

从 Playstore 安装 WireGuard Android 应用程序

图 17. 从 Playstore上安装 WireGuard Android 应用程序

5.2 Android配置WireGuard 客户端

安装 WireGuard 应用程序后,我们需要为 VPN 隧道添加一个新的配置文件。单击蓝色的+ 图标按钮。

为 Android 客户端添加 WireGuard 隧道

图 18.为 Android 客户端添加 WireGuard 隧道

会打开一个新页面来配置隧道。打开底部的Creating From Scratch

从头开始创建隧道配置

图 19. 从头开始创建隧道配置

  • 输入Name信息,如MyWireGuard
  • 单击右端的刷新图标,生成公钥/私钥对。
  • 设置地址,如 10.0.0.12。
  • 设置DNS,如 10.0.0.1。
  • 点击底部的Add Peer

Android 设备上的 WireGuard 客户端配置

图 20. Android 设备上的 WireGuard 客户端配置

在 Android 设备上向 WireGuard 客户端添加对等配置

图 21.  Android 设备上的 WireGuard 客户端添加对端配置

接口部分的字段说明如下:

  • PrivateKey:android客户端的私钥。
  • PublicKey : android客户端的公钥。然后必须将公钥复制到OPNsense上相关客户端对等点的的端点配置中。
  • Address:此客户端的VPN IP地址。它在所有客户端中必须是唯一的。是在 OPNsense的端点配置中指定为允许IP的IP。
  • DNS:客户端用于隧道的DNS服务器的IP 地址。在本例中,使用在OPNsense WireGuard服务器上运行的DNS服务器。

peer部分的字段说明如下:

  • PublicKey:OPNsense WireGuard 服务器的公钥。
  • Endpoint::OPNsense 服务器的WAN接口地址,后跟冒号和WireGuard 端口 (51820)。
  • AllowedIPs:  指定通过VPN 路由的 IP 地址。0.0.0.0/0 允许所有地址,并通过 VPN 路由所有内容。
  • 点击屏幕右上角的保存图标。

6.将Android客户端配置添加到服务器

将Android客户端的公钥和 IP 地址添加到服务器,按照以下步骤操作:

  • 导航到VPN-> WireGuard-> 。Endpoints
  • 单击 添加新端点
  • 输入Name信息,例如MyAndroid
  • 输入上一步 Android WireGuard 客户端配置期间生成的公钥,本例为:rQdjEcn7UMbIverQ4D0FKfz fkGLxClArwDsXCNf DE=.
  • Allowed IPs填入上面Android WireGuard 客户端配置中的地址字段,在本例中为10.0.0.12/32
  • 单击Save

在 OPNsense 上设置 WireGuard Endpoint(Android) 配置

图 22. 在 OPNsense上配置 WireGuard Endpoint(Android)

现在,在 OPNsense VPN-> WireGuard->Endpoints选项卡下,可以查看所有已配置的 WireGuard VPN 端点,MyWindowsMyAndroid

OPNsense 上的 WireGuard 端点列表

图 23. OPNsense 上的 WireGuard 端点列表

7.在OPNsense上添加远程端点

在OPNsense 防火墙上定义端点后,还要按照以下步骤将每个端点添加到 WireGuard VPN 服务器本地配置。

  • 导航到VPN-> WireGuard->Local选项卡。
  • 点击MyWireGuard右侧的铅笔图标编辑vpn 配置。
  • Peers下拉菜单中选择新创建的两个端点。MyWindowsMyAndroid
  • 单击Save

将 Peers(端点)添加到 WireGuard VPN Server 本地配置

图 24. 将 Peers(端点)添加到 WireGuard VPN Server 本地配置

  • 单击Apply

8.在OPNsense上启用WireGuard

  1. 导航到VPN-> WireGuard->General选项卡。
  2. 单击Enable WireGuard复选框。
  3. 单击Apply

在 OPNsense 上启用 WireGuard 服务器

图 25. 在 OPNsense 上启用 WireGuard 服务器

9.创建 WireGuard 接口

如果只需要通过 WireGuard 访问LAN,而不是本地网络之外的 IP,例如公共互联网,可以跳过此步骤。

在 OPNsense上创建 WireGuard 接口,它可以:

  • 为隧道子网创建一个别名,然后可以在防火墙规则中使用该别名。否则,就必须创建自己的别名或手动指定子网。
  • 可以自动添加 IPv4 出站 NAT 规则,允许隧道访问本地网络之外的 IPv4 IP(如果需要),而无需手动添加规则。
  • 它可以分离每个 WireGuard 实例的防火墙规则(每个wgX设备)。否则,它们都必须在OPNsense创建的默认 WireGuard 组上进行配置。

要创建 WireGuard 接口,可以按照以下步骤操作:

  • 导航到Interfaces->Assignments
  • 在旁边的下拉菜单中选择 WireGuard 设备(如wg0
  • 添加描述,例如 MyWireGuard
  • 点击 添加
  • 点击 Save

在 OPNsense 上创建 WireGuard 接口

图 26. 在 OPNsense 上创建 WireGuard 接口

  • 在 Interfaces 菜单下选择新接口,单击进行配置。
  • 单击启用接口。
  • 选中Lock选项。
  • 将其他选项保留为默认值。

在 OPNsense 上配置 WireGuard 接口

图 27. 在 OPNsense 上配置 WireGuard 接口

无需在WireGuard 接口上配置 IP 地址。重新启动Local WireGuard 服务后,您的 WireGuard 服务器配置中指定的隧道地址会自动分配给接口。

  • 单击Apply changes激活新的接口设置。
  • 导航到VPN-> WireGuard->General选项卡。
  • 通过取消选中Enable WireGuard复选框禁用 WireGuard 。
  • 通过选中Enable WireGuard复选框启用 WireGuard

10.创建防火墙规则

在OPNsense 节点上定义以下两个防火墙规则。

  1. WAN 接口上的防火墙规则,允许客户端连接到 OPNsense WireGuard 服务器。
  2. 允许客户端访问他们应该有权访问的任何IP地址的防火墙规则。此规则是可选的,可能并不需要允许客户端访问内部网络。

10.1 允许VPN客户端访问WireGuard服务器

要允许从公共网络访问WireGuard/OpenVPN VPN 服务器,需要在WAN接口上放行WireGuard所使用的端口,在本例中为51820。如下图所示(示例为多Wan,允许从Wan1连接):

10.2 允许VPN客户端访问内部网络

如果希望WireGuard VPN 客户端能够连接到网络上的任何设备,则必须创建另外的防火墙规则来允许此类访问。在防火墙规则中,导航到创建的WireGuard 接口,例如 MyWireGuard。单击+图标添加一条新规则来允许对任意目标的访问。如下图所示:

定义防火墙规则以允许所有 VPN 客户端访问任何地方-1

图 28. 定义防火墙规则来允许所有 VPN 客户端访问任意网络-1

定义防火墙规则以允许所有 VPN 客户端访问任何地方-2

图 29. 定义防火墙规则来允许所有 VPN 客户端访问任意网络-2

  • 单击save,并Apply Changes来激活设置。

11.在OPNsense上验证WireGuard

WireGuard VPN 服务器配置和客户端配置完成。要测试配置,您可以按照以下步骤操作。

  1. 激活WireGuard Windows客户端:PC连接到VPN服务器,打开WireGuard 应用程序,找到MyWireGuard,通过单击Activate按钮打开隧道。对端连接后,隧道Status将更改为Active

在 Windows 客户端上激活 WireGuard 隧道

图 30.在 Windows 客户端上激活 WireGuard 隧道

  1. 激活 WireGuard Android 客户端:Android 设备连接 VPN 服务器,启动 WireGuard 应用程序,单击MyWireGuard右侧的切换按钮打开隧道。

在 Android 客户端上激活 WireGuard 隧道

图 31. 在 Android 客户端上激活 WireGuard 隧道

  1. 在OPNsense上查看VPN连接:导航到VPN-> WireGuard->List Configuration选项卡。可以看到有关已连接 VPN 客户端的信息。显示以下详细信息:
  • 对等点(公钥)
  • 已连接客户端的 IP 地址
  • 自上次连接以来的时间
  • 传输的数据量

OPNsense 上已连接的 WireGaurd VPN 客户端列表配置

图 32. OPNsense 上已连接的 WireGaurd VPN 客户端列表配置

  1. 握手:单击Handshakes选项卡。握手次数不应等于 0,而且还应该不断增加。

在 OPNsense 上查看 WireGuard VPN 连接的握手

图 33. 在 OPNsense 上查看 WireGuard VPN 连接握手

  1. Ping 测试:可以从客户端成功ping WireGuard 服务器,反之亦然:
  2. 内部网络访问测试:由于我们允许 VPN 客户端不受任何限制地访问防火墙后面的内部网络,因此他们应该能够访问局域网中的任意地址,反之亦然。
原文地址