WireGuard + OpenWrt 部署教程

猎隼丶止戈 猎隼丶止戈 | 12747 | 2023-02-09

前言

去年出过一期在 OpenWRT 上部署 OpenConnect VPN 的详细教程,主要用于在外办公方便VPN 回家的使用场景。博主几乎每天使用持续了一年多,在 macOS 和 iOS 上体验都非常的稳定。

而今天的主角是已经火了几年的了 WireGuard ,同样是 VPN 回家服务,在博主试用了一段时间后决定以后主用 WireGuard 了。

WireGuard 与 OpenConnect VPN 的区别

抛开深沉的原理,简单通俗的说明下两者的区别和使用感受:OpenConnect VPN​主要是使用 TCP 协议,而WireGuard​则是 UDP 协议。最明显使用感知就是前者需要类似拨号一样过程,在网络断开,重连等情况下并非无感。而WireGuard​则类似于常驻后台,随用随取的感觉,体验不错。

在配置方面,OpenConnect VPN 需要使用证书来提高使用安全和连接体验,而 WireGuard 则是使用点对点的加密公钥私钥的形式来配对,并且每台客户端需要单独分配 IP 和公私钥。前期配置均稍许麻烦,但两者后续使用和管理都还比较合理和方便。

  • OpenConnect VPN 只需要客户端拥有证书文件即可
  • WireGuard 只需要客户拥有配置文件即可

由于 WireGuard 在 Linux 上安装配置较为麻烦,而很多 OpenWRT 固件也都预装了 WG,并且有图形化界面方便设置。所以博主目前推荐还是在 OpenWRT 来直接使用。

拓扑图

3b18b0d4816e4e9ab311ef489da8d85d.png

机器实际IP虚拟IP
A172.16.30.53192.168.200.111
B192.168.100.1192.168.200.1
C192.168.100.232/
D192.168.100.X/

现在,想通过 WireGuard 在 A 端访问到 B 端物理网下的这台 C,实现 A → 虚拟网 → B → 物理网 → C 。

服务端

安装

在两台路由器上均安装相关的依赖,安装完成之后必须要 重启路由器 ​!!!

# 貌似只需要安装 luci-app-wireguard 就可以了
# 以下取至各个教程的安装方式

# 安装方式1
opkg update
opkg install kmod-wireguard luci-app-wireguard luci-proto-wireguard wireguard wireguard-tools

# 安装方式2
opkg update
opkg install luci-i18n-wireguard-zh-cn

# 安装方式3
opkg update
opkg install luci-app-wireguard

重新登录路由器管理页面,就可以在左侧菜单 状态 – WireGuard​ 中看到 WireGuard 连接的状态,如下图所示:

a9b62ac8edd24605a61ab299c064bf10.png

生成密钥对

装好之后在,先产生两对密钥。一对是给自己用的,一对是给客户端用的。当然你也可以只生产一对,在另一台路由上再产生一对。

但是不管怎么样,公钥是要给对方,填在对方的peer里面,私钥填在自己的接口里面。

刚接触的时候一定要注意这一点。

mkdir -p /home/wireguard
cd /home/wireguard
umask 077

# 路由器
wg genkey | tee server-privatekey | wg pubkey > server-publickey

# 创建客户端0密钥对(多个客户端类似操作)
mkdir client0
cd client0
umask 077
wg genpsk > client0-sharekey
wg genkey | tee client0-privatekey | wg pubkey > client0-publickey

接口配置

所属菜单

网络 - 接口

详细操作

  1. 添加新的接口,接口名称填入 wg0,协议需要选择 WireGuard VPN​。

    96b6452115274169a879e0e74e70c983.png

  2. 常规设置 配置

    填写上文生成的 服务端私钥

    自行填写一个端口号,如:41066

    IP 地址填写一个 VPN 专用的网段 IP 。本文以 192.168.200.X 为 WireGuard 的专用网段为例,则本 WG 服务器 IP 为 192.168.200.1/24

    3814ef6236104ab9972443f84477cfd0.png

  3. 防火墙设置 配置

    新建一个 wg 区域

    dc09699e05d54935af230ca61105ab65.png

  4. 对端 配置

    公钥:填写上文获取的 客户端公钥(client0-publickey)

    预共享密钥:填写上文获取的 预共享密钥(client0-sharekey)

    允许的 IP:即表示为此 client0 客户端分配固定 IP , 本文示例为 192.168.200.111/32​ ,注意各客户端 IP 不能冲突 ​!!!

    持续 Keep-Alive:填写 25

    09f38531fa0f4715be54b065717f1460.png

  5. 保存配置,保存后再检查下是否都配置了

防火墙配置

区域

所属菜单

网络 – 防火墙 – 常规设置 – 区域

详细操作
  1. 编辑 lan 区域,保存并应用设置

    将允许转发到目标区域勾选上 wg 区域

    将允许来自源区域的转发也勾选上 wg 区域

    2165805a356a45b58cea5048a28c87e7.png

  2. 将 wg 区域的转发改为接受,保存并应用设置。

    6c7c3cfbed4b4b80885cb457f4399a0b.png

端口转发

所属菜单

网络 – 防火墙 – 端口转发

详细操作

添加一条端口转发规则。

协议:UDP

外部端口:填写 WireGuard 的监听端口,本文示例为 41066

目标区域:选择 lan

内部IP地址:选择路由器那台设备地址,本文示例为 192.168.100.1

内部端口:同外部端口

ddcaec1cde3741ada2661b2e71deca47.png

通信规则

所属菜单

网络 – 防火墙 – 通信规则

详细操作

新增一项通信规则,在 常规设置 中,名称填写 Allow-WireGuard,协议保持默认 TCP + UDP 即可,源区域选择 wan,目标区域选择 设备(输入)​ ,目标端口调入 WireGuard 监听端口 41066,操作选择接受,保存防火墙设置。

然后回到 网络 – 接口 页面中,重启 wg 接口

efa86a7162574164b8b97174ed73fd90.png

自定义规则

所属菜单

网络 – 防火墙 – 自定义规则

详细操作

添加以下配置,然后到 状态 - 防火墙 页面点击 重启防火墙 按钮。

# 192.168.200.0 改为自己设置的 WireGuard 网段
iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -o br-lan -j MASQUERADE

客户端

配置文件

创建后缀为 .conf 的配置文件,如: client0.conf 。复制以下信息,并且修改对应的公私钥信息:

[Interface]
Address = 192.168.200.111/32
PrivateKey = 2B96JglscX9DeD/j1znaZGBlRcHDZFmQP9nl27XXTGs=
DNS = 114.114.114.114

[Peer]
PublicKey = DC5BX6Vmx9wJMs/JSMJeX3GHZf9hgZRHB5H2PGGnNAc=
PresharedKey = amsISrGFUEZXiIlviN9VmdGlKqhZh83NrSWgObdn3y8=
AllowedIPs = 192.168.100.0/24
Endpoint = ddns.xxxxx.com:41066
PersistentKeepalive = 25

配置文件说明:

[Interface]
Address = 分配到的客户端地址
PrivateKey = 客户端私钥(client0-privatekey)
DNS = 路由器网关IP 或者 公用DNS

[Peer]
PublicKey = 路由器端公钥(WireGuard 服务器公钥,server-publickey)
presharedKey = 共享密钥
AllowedIPs = 分流的网段,及访问 xxx.xxx.xxx.xxx 才走 WireGuard
Endpoint = 公网IP:端口号
PersistentKeepalive = 25

此配置文件是用于客户端的,所以 PrivateKey 则为 客户端0的私钥(client0-privatekey),而 Peer 中的 PublicKey 则为 OpenWRT 的公钥(server-publickey)。Endpoint 填写机房的 IP 或者 DDNS 域名和端口。

AllowedIPs

值得注意的是 AllowedIPs 参数。针对不同场景和需求,此处可以配置不同的路由。

当此处为 0.0.0.0/0 时表示任意网络请求都经过 WireGuard (俗称全局 VPN) , 由于 iPhone 同时只能有 1 个 VPN 软件在线,所以当 WireGuard 启动时,其他类似 Quanx 、小火箭等软件则无法使用,此时 iPhone 可以全局 VPN 使用家中的网络来访问一些外网。

如果是 macOS 或 Windows 客户端,WireGuard 和 Clash 等软件可以共存,此处可以设置为 AllowedIPs = 192.168.1.0/24, 192.168.100.0/24​ ,表示访问内网网段才会走 VPN 。而其他互联网,外网等访问还是走当前网络来利用 Clash 分流。

界面操作

Windows

0d666127bbc94c07813b7e7c1813d691.png

如上图操作保存后,选择隧道点击连接即可。

Android

833d5e0e22554d07b05b162b3bad2c9b.png

7d1e13bf86d044509e843f48c821b685.png

参考

  1. WireGuard x OpenWrt 配置笔记
  2. WireGuard on OpenWrt+IPv6 组网
  3. OpenWrt的WireGuard食用方法
  4. OpenWRT 配置 WireGuard 服务端及客户端配置教程
  5. 使用WireGuard随时随地访问家中内网资源
  6. 虚拟组网工具推荐
  7. wireguard组建一个内网环境

文章标签: CI/CD
推荐指数:

真诚点赞 诚不我欺~

WireGuard + OpenWrt 部署教程

点赞 收藏 评论

关于作者

猎隼丶止戈
猎隼丶止戈

这个人很懒~

等级 LV3

粉丝 14

获赞 28

经验 363