WireGuard + OpenWrt 部署教程
前言
去年出过一期在 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 来直接使用。
拓扑图
机器 | 实际IP | 虚拟IP |
---|---|---|
A | 172.16.30.53 | 192.168.200.111 |
B | 192.168.100.1 | 192.168.200.1 |
C | 192.168.100.232 | / |
D | 192.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 连接的状态,如下图所示:
生成密钥对
装好之后在,先产生两对密钥。一对是给自己用的,一对是给客户端用的。当然你也可以只生产一对,在另一台路由上再产生一对。
但是不管怎么样,公钥是要给对方,填在对方的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
接口配置
所属菜单
网络 - 接口
详细操作
添加新的接口,接口名称填入 wg0,协议需要选择
WireGuard VPN
。
常规设置 配置
填写上文生成的 服务端私钥
自行填写一个端口号,如:41066
IP 地址填写一个 VPN 专用的网段 IP 。本文以 192.168.200.X 为 WireGuard 的专用网段为例,则本 WG 服务器 IP 为
192.168.200.1/24
防火墙设置 配置
新建一个 wg 区域
对端 配置
公钥:填写上文获取的 客户端公钥(client0-publickey)
预共享密钥:填写上文获取的 预共享密钥(client0-sharekey)
允许的 IP:即表示为此 client0 客户端分配固定 IP , 本文示例为
192.168.200.111/32
,注意各客户端 IP 不能冲突 !!!持续 Keep-Alive:填写 25
- 保存配置,保存后再检查下是否都配置了
防火墙配置
区域
所属菜单
网络 – 防火墙 – 常规设置 – 区域
详细操作
编辑 lan 区域,保存并应用设置
将允许转发到目标区域勾选上 wg 区域
将允许来自源区域的转发也勾选上 wg 区域
将 wg 区域的转发改为接受,保存并应用设置。
端口转发
所属菜单
网络 – 防火墙 – 端口转发
详细操作
添加一条端口转发规则。
协议:UDP
外部端口:填写 WireGuard 的监听端口,本文示例为 41066
目标区域:选择 lan
内部IP地址:选择路由器那台设备地址,本文示例为 192.168.100.1
内部端口:同外部端口
通信规则
所属菜单
网络 – 防火墙 – 通信规则
详细操作
新增一项通信规则,在 常规设置 中,名称填写 Allow-WireGuard,协议保持默认 TCP + UDP 即可,源区域选择 wan,目标区域选择 设备(输入)
,目标端口调入 WireGuard 监听端口 41066,操作选择接受,保存防火墙设置。
然后回到 网络 – 接口 页面中,重启 wg 接口
自定义规则
所属菜单
网络 – 防火墙 – 自定义规则
详细操作
添加以下配置,然后到 状态 - 防火墙 页面点击 重启防火墙 按钮。
# 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
如上图操作保存后,选择隧道点击连接即可。
Android
参考
- WireGuard x OpenWrt 配置笔记
- WireGuard on OpenWrt+IPv6 组网
- OpenWrt的WireGuard食用方法
- OpenWRT 配置 WireGuard 服务端及客户端配置教程
- 使用WireGuard随时随地访问家中内网资源
- 虚拟组网工具推荐
- wireguard组建一个内网环境