对于很多具有公网IP,且经常通过DDNS远程访问家中设备的同学来说,在家里网络设备多了的情况下,需要记住过多的端口号进行访问,路由器、电脑远程桌面、群晖后台、以及运行在路由、电脑、NAS上的种种服务,每一个都需要一个端口号。
如果可以在外网环境下,通过IP直接访问内网设备,就会省心得多。
WireGuard等代理服务可以实现这个需求,但是此类代理服务通常都有一个客户端,如果你的手机长期运行一个例如Surge的客户端,在使用此类客户端,则需要每次重连代理APP,导致使用体验产生割裂。
而Surge,在新版本中支持了WireGuard协议,可以实现不同代理的无缝流转,接下来给大家介绍配置过程。
此文章前提要求:
- 具有公网IP
- 路由器为OpenWrt (实际不需要,你可以家中任意设备部署服务端,只是此文演示是以OpenWrt举例)
- 已经部署DDNS服务,固定IP则可忽略c
在OpenWrt创建WireGuard服务端
获取密钥串
获取预共享密钥
mkdir wg
# 创建目录存放公钥私钥
cd wg
# 进入文件夹
umask 077
# 配置创建密钥的权限
wg genpsk > sharekey
# 创建预共享密钥
cat sharekey
# 获取密钥复制保存
服务端公钥私钥
wg genkey | tee server_privatekey | wg pubkey > server_publickey
# 创建服务端公钥和私钥
cat server_privatekey
# 获取服务端私钥复制保存
cat server_publickey
# 获取服务端公钥复制保存
客户端公钥私钥
此处以iOS为例,每个客户端需要创建一组密钥,例如你需要两台手机 一台电脑进行远程访问,则需要创建三组密钥,否则不同设备使用同一组密钥,同一时间访问会产生IP冲突。
wg genkey | tee ios_privatekey | wg pubkey > ios_publickey
# 创建 iOS 客户端公钥和私钥
cat ios_privatekey
# 获取 iOS 客户端私钥复制保存
cat ios_publickey
# 获取 iOS 客户端公钥复制保存
储存好你获取的密钥
此时,我们已经获取了预共享密钥、1对服务端密钥(公私钥)、1对或多对客户端密钥,请将他们保存好。
设置OpenWrt的WireGuard服务端
- 登陆 OpenWRT - 网络 - 接口 - 添加新接口
- 填写接口名 - 选择接口协议 WireGuard - 提交
基本设置
填写上文获取的服务端私钥
自行填写一个端口号 - 并且在路由器映射该端口的 UDP 协议
IP 地址填写一个 VPN 专用的网段 IP - 本文以192.168.100.X
为 WireGuard 的专用网段为例,则本 WG 服务器 IP 为192.168.100.1/24
IP地址这里请特别注意,填写的是与主路由不同的子网段,例如你的内网主网段是192.168.1.X/24,此处则填写192.168.2.1/24。不要填写192.168.1.1/24,否则你的主路由IP与WireGuard IP相同导致冲突,你的路由器就失联了,只能重新刷机。
客户端 Peers 区域
选择预共享密钥
- 添加
公钥 - 填写上文获取的macOS 客户端公钥
预共享密钥 - 填写上文获取的预共享密钥
允许的 IP - 即表示为此 macOS 或iOS 等连入客户端分配固定 IP , 本文示例为 192.168.2.2/32
, 注意各客户端 IP 不能冲突,设置的是你这个设备连入局域网的IP,例如你的Mac连入为192.168.2.2/32,iOS 则要设置为192.168.2.3/32避免冲突.
持续 Keep-Alive - 填写 25
以上就是添加一个连入客户端的操作,如果需要多个设备连入,则要设置多个Peer。
防火墙设置
防火墙区域选择 vpn
设置端口转发
网络-防火墙-端口转发
新建端口,将位于外部区域WAN的指定端口(示例为6001),转发到内网设置的服务器监听端口。
至此OpenWrt设置完成。
客户端设置
上一步我们已经设置完服务端了,服务端正在工作,等待客户端连入,这一步我们设置客户端。
客户端参数配置
此处以iOS Surge客户端举例:
在iOS客户端 代理服务器处,添加代理,类型选择WireGuard。
如图示填入对应参数后,保存
客户端规则设置
在iOS客户端 代理规则处,添加代理规则。
规则类型选择IP-CIDR。
内容为192.168.1.0/24,意思是192.168.1.X段的请求内容,交给这条规则进行处理。
策略选择刚刚创建的WireGuard。
保存后测试即可联通啦