【教程|软路由|VPN|内网穿透】基于 VPN 的异地组网:WireGuard 简易教程 其他工具 APP 技术教程

811 12

前言

温馨提示:VPN 的本意为 Virtual Private Network(虚拟专用网络),请不要将其与中国大陆网民经常使用的网络代理(Proxy)混淆。

WireGuard 是一种现代的开源 VPN 协议,旨在提供更高的安全性和更好的性能。它具有以下几个主要特点:

  1. 简单性:WireGuard 的代码库相对较小,易于审计和维护。这使得它比许多其他 VPN 协议(如 OpenVPN 和 IPSec)更容易理解和使用。
  2. 高效性:WireGuard 使用现代加密算法,提供快速的加密和解密速度,能够在低延迟的情况下实现高效的数据传输。
  3. 跨平台支持:WireGuard 可在多种操作系统上运行,包括 Linux、Windows、macOS、iOS 和 Android。
  4. 易于配置:WireGuard 的配置相对简单,用户只需设置公钥和私钥即可建立安全连接。
  5. 安全性:WireGuard 采用了最新的加密技术,提供强大的安全性。

需要的资源

  • 软路由/已刷写软路由固件的硬路由,本教程以 OpenWrt 为例。
  • 公网 IPv4/IPv6 地址。
  • 域名。

注意:

  • 用于搭建 WireGuard 服务端的路由器应为负责拨号的主路由器.
  • 本教程不涉及软路由系统安装相关教程,若有需要请参阅这条视频:https://www.bilibili.com/video/BV13p4y1u78R,或自行搜索其它资料。

提示:

WireGuard 简易教程

目录

 

1.1 WireGuard 服务端配置

1.1.1 安装软件包

在“Luci -> 系统 -> 软件包”中点击“更新列表”,然后安装 Luci-proto-wireguard 软件包。安装完毕后,检查是否存在 luci-app-wireguardluci-i18n-wireguard-zh-cn 这两个包,若不存在,如法炮制安装即可。

在“Luci -> 系统 -> 启动项”中找到 network 并点击重启。

1.1.1_2.png

1.1.1-2_2.png

 

1.1.2 添加并配置接口(1)

在“Luci -> 网络 -> 接口”中点击“添加新接口…”。名称自取,此处假设名称为“wgserver”;协议选择“WireGuard VPN”,点击“提交”。

1.1.2_2.png

跳转到新页面后,在基本设置中,监听端口建议选择一个端口号大于 10000 的端口,此处假设监听端口为 14514;IP 地址必须填写私有 IP 且不能与当前路由器所在局域网网段有重合,此处假设 IP 地址为 10.23.45.1/24,子网前缀长度按需填写,常见写法为 /24/16/8

1.1.2-2.png

在 Peers(对端) 中,点击“添加”。“允许的 IP”在 WireGuard VPN 网段中挑选单个 IP 填写进去,此处假设为 10.23.45.2/32,子网前缀长度必须为 /32,然后勾选“路由允许的 IP”。

1.1.2-3.png

 

1.1.3 添加并配置接口(2)

对于私钥和公钥,在浏览器中新增分页并访问此网站:https://www.wireguardconfig.com/,然后依次输入以下数据:

  • Listen Port:填写先前选择的监听端口,此处为 14514。
  • Number of Clients:客户端(即 Peers、对端)的数量,请根据自身需求填写。
  • CIDR:填写先前设置的 WireGuard VPN 网段,此处为 10.23.45.0/24
  • Client Allowed IPs:客户端的“允许的 IP”。主要有两种写法:
    • 0.0.0.0/0, ::/0(全局模式):客户端的所有流量均会被路由到服务端。
    • 10.23.45.0/24, 192.168.1.0/24(策略模式):客户端指定网段内的流量会被路由到服务端,此处分别为 WireGuard VPN 网段和路由器局域网网段,若仅希望实现内网穿透则建议选择这种写法。
  • Endpoint:填写软路由的域名和监听端口,此处为 wgserver.ddns.org:14514
  • DNS:填写软路由在 WireGuard VPN 网段中的 IP 地址,此处为 10.23.45.1,不用加子网掩码。若软路由不具备处理 DNS 请求的能力,可填写公共 DNS 服务器地址。
  • Use Pre-Shared Keys:使用预共享密钥(PSK)。若对安全性有高要求则可以勾选此项。

1.1.3.png

输入完毕后,点击“Generate Config”,下载 .zip 文件和服务端/客户端配置文件的二维码。此时不要关闭此分页,将软路由接口设置分页独立出来,并将“Server”配置中的“PrivateKey”和“PublicKey”分别填写到接口设置分页中的“私钥”和“公钥”框中,随后点击“保存&应用”。

1.1.3-2_2.png

1.1.3-3_2.png

提示:若不信任此网站,请使用 SSH 连接软路由,然后使用命令手动生成配置。相关命令请自行在 WireGuard 官网(https://www.wireguard.com/quickstart/)或其它地方中搜索。

 

1.1.4 设置防火墙区域

在“Luci -> 网络 -> 防火墙”中,点击“添加”。

在基本设置中,名称自取;入站数据、出站数据和转发均设置为“接受”并勾选 MSS 钳制;“覆盖网络”选择先前创建的接口,此处为“wgserver”。

在端口触发中,“允许转发到目标区域”和“允许从源区域转发”均选择 lan 区域,随后点击“保存&应用”。

1.1.4_2.png

1.1.4-2_2.png

 

1.1.5 设置防火墙规则

在“Luci -> 网络 -> 防火墙 -> 通信规则”中,滑到页面底部,在“新建转发规则”中输入规则名称并点击“添加并编辑…”。限制地址根据拥有的公网 IP 地址选择“仅 IPv4”或“仅 IPv6”,协议选择 UDP,源区域选择 wan 区域,目标区域选择“设备(输入)”区域,目标端口填写监听端口 14514,动作选择“接受”,随后点击“保存&应用”。

1.1.5_2.png

1.1.5-2_2.png

1.1.5-3_2.png

 

1.1.6 收尾

在“Luci -> 网络 -> 接口”中,找到先前创建的接口并点击“连接”。若显示 IP 地址,且在“Luci -> 状态 -> WireGuard 状态”中显示此接口的详细信息,则意味着 WireGuard 服务端配置成功。

1.1.6_2.png

1.1.6-2_2.png

 

1.2 WireGuard 客户端配置

1.2.1 安装软件

iOS 用户需在 App Store 中切换到美区后下载 WireGuard 客户端,具体方法请自行搜索。Android 和 PC 用户请前往官网(https://www.wireguard.com/install/)下载安装包。

1.2.1_2.png

 

1.2.2 导入配置

  • 手机(二选一)
    • 扫描先前保存的二维码;
    • 也可将 .conf 文件传输到手机中后,从 .conf 文件导入。

1.2.2_pe_2.png

  • 电脑(二选一)
    • 将先前保存的 .zip 文件解压缩,然后在客户端中点击“新增隧道”,选择解压出的 .conf 文件;

1.2.2_pc_2.png

    • 点击“新增隧道”旁的箭头并点击“新增空隧道”,通过记事本打开 .conf 文件,将其中的配置内容复制到弹出的对话框中并输入隧道名称,随后点击“保存”。

1.2.2_pc-2_2.png

1.2.2_pc-3.png

 

1.2.3 优化配置

  • 手机
    • 本地(Interface)
      • 监听端口:填写一个未被占用的非特权端口,若留空则每次连接隧道时将随机选取一个非特权端口作为监听端口。
      • DNS 服务器:推荐填写软路由在 WireGuard VPN 网段中的 IP 地址,此处为 10.23.45.1,不用加子网掩码。若软路由不具备处理 DNS 请求的能力,可填写公共 DNS 服务器地址。若不填写则使用系统预设 DNS 服务器。
      • MTU:留空即可。
    • 远程(Peer)
      • 连接保活间隔:若客户端位于 NAT 之后,推荐填写 25。
      • 路由的 IP 地址(段):具体写法请参见章节 1.1.3 中的“Client Allowed IPs”部分。
  • 电脑
    • 前置步骤:选择先前导入的隧道,点击“编辑”,在“编辑隧道”页面中根据自身需求填入参数。
    • [Interface]
      • ListenPort = 12345:监听端口,若将此行删除则每次连接隧道时将随机选取一个非特权端口作为监听端口。
      • DNS = 10.23.45.1:DNS 服务器,若将此行删除则使用系统预设 DNS 服务器;。
      • MTU = 1500:建议不填或将此行删除。
    • [Peer]
      • AllowedIPs = 10.23.45.0/24, 192.168.1.0/24:允许的 IP。具体写法请参见章节 1.1.3 中的“Client Allowed IPs”部分。
      • PersistentKeepalive = 25:连接保活间隔。

 

1.2.4 收尾

连接隧道。若出现“上次握手时间”或“Latest handshake”,则意味着连接成功。

1.2.3_2.png

1.2.3-2.png1.2.3-3_2.png

 

1.2.5 补充

若仅拥有配置文件但未保存二维码,请访问此网站:https://www.wireguardconfig.com/qrcode,将配置文件中的内容复制到网页中并点击“Generate QR Code”,即可获取到二维码。

1.2.4.png

 

2.1 效果展示:使用 WireGuard VPN 的远程串流的性能表现

提示:本章节不涉及串流软件的教程。

  • 串流端:PC,同时也是软路由(WireGuard 服务端)的下游设备。
  • 观看端(逐一演示)
    • 连接不同宽带的 Pad。
    • 连接移动网络的手机。
  • 观前提醒
    • 串流端、观看端和软路由均位于同省(市),本作者无力演示三种设备位于跨省(市)时的串流表现;
    • 本作者所处地区的 5G 网络质量不高,手机的串流表现参考价值相较于 Pad 可能有限。

观看端连接 WireGuard 隧道,然后在 Moonlight 中输入串流端的内网地址+端口号,进入 PC 桌面(PC 已提前配置好 Sunshine)。以下是各个观看端的串流设置及表现:

  • Pad
    • 设置
      • 分辨率:2400*1800(4:3)。
      • 帧率:120 FPS。
      • 码率:50 Mbps。
      • H.265:开启。
      • HDR:关闭。
    • 表现
      • 帧率:90~105 FPS。
      • 丢包率:0%。
      • 延迟:40 ms(方差:10 ms)。

2.1_pad.jpg

  • 手机
    • 设置
      • 分辨率:1920*1080(1080p)。
      • 帧率:60 FPS / 30 FPS。
      • 码率:20 Mbps / 10 Mbps。
      • H.265:开启。
      • HDR:关闭。
    • 表现
      • 帧率:55~60 FPS / 稳定 30 FPS。
      • 丢包率:4%~10% / 0%,不时丢一次包。
      • 延迟:40 ms(方差:12 ms)。

2.1_pe_2.png2.1_pe-2_2.png

注意:理论上,最大串流码率取决于串流端的最大上传速度和观看端的最大下载速度,但由于 WireGuard 基于 UDP,实际可选择的最大串流码率可能会受到限制。具体请参见接下来的 FAQ。

 

3.1 FAQ

  • 看不懂!
    • 本教程作为一篇操作指南,跟着操作即可帮助解决问题,至于能否看懂原理,这实在不是本作者能决定的。
  • 我没有软路由,作者能否送我一个?
    • 🤔…… 请自行在二手交易平台中搜索 1037U(低价方案,2C2T),或在电商平台中搜索 J4125(中高价方案,4C4T),实在不行在旧笔记本电脑中刷写软路由固件…… 总有一个适合你。若需要更详细的软路由入门推荐,请参阅这条视频:https://www.bilibili.com/video/BV1qa4y1g7xJ
  • WireGuard 基于 UDP,在中国大陆使用 WireGuard 是否会被干扰(如限速和丢包等)?
    • 视情况而定。不考虑 UDP 天生与中国大陆“水土不服”这一因素,若服务端和客户端不在同一省(市),则有概率会被干扰。运营商以打击 PCDN 为理由(存疑),对跨省(市)流量的限制较为明显(当然,这种限制不仅对 WireGuard 有效)。
  • 为什么有时会出现发送一个或多个握手包后仍然无法握手成功的现象?
    • WireGuard 基于 UDP,而 UDP 对网络质量较为敏感,且国内运营商对于来自家用宽带的 UDP 数据包有间歇性主动丢包的嫌疑。当然,若连续发送过多个以上握手包后依旧无法握手成功,请检查服务端和客户端的配置是否正确、DDNS 是否正常工作等。

 

参考资源

 

彩蛋

(来自你站聊天室在 2024.11.29 的聊天记录)

2024-11-29 18_05_31-.png

 

更新日志

2024.12.01 20:15

  • 目录细化。

2024.12.03 19:05

  • 在“需要的资源”章节中补充一点对路由器的限制条件。

2024.12.05 00:00

  • 修正一部分地方的格式和用语。

2024.12.15 08:45

  • 在“需要的资源”章节中添加参考资源链接并小幅度修正格式和用语。

2025.01.27 02:50

  • 在“需要的资源”章节中补充一点相对重要的提示。
曲终人散,黄粱一梦,该醒了!
最新回复 ( 12 )
发新帖