OpenWrt+Surge+WireGuard,实现外网通过内网IP访问局域网网络IP,实现异地组网

技术分享 · 2023-02-14

对于很多具有公网IP,且经常通过DDNS远程访问家中设备的同学来说,在家里网络设备多了的情况下,需要记住过多的端口号进行访问,路由器、电脑远程桌面、群晖后台、以及运行在路由、电脑、NAS上的种种服务,每一个都需要一个端口号。

如果可以在外网环境下,通过IP直接访问内网设备,就会省心得多。

WireGuard等代理服务可以实现这个需求,但是此类代理服务通常都有一个客户端,如果你的手机长期运行一个例如Surge的客户端,在使用此类客户端,则需要每次重连代理APP,导致使用体验产生割裂。

而Surge,在新版本中支持了WireGuard协议,可以实现不同代理的无缝流转,接下来给大家介绍配置过程。

此文章前提要求:

  1. 具有公网IP
  2. 路由器为OpenWrt (实际不需要,你可以家中任意设备部署服务端,只是此文演示是以OpenWrt举例)
  3. 已经部署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服务端

  1. 登陆 OpenWRT - 网络 - 接口 - 添加新接口
  2. 填写接口名 - 选择接口协议 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相同导致冲突,你的路由器就失联了,只能重新刷机。

2023-02-14T13:52:24.png

客户端 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。

2023-02-14T13:53:20.png
2023-02-14T13:53:29.png

防火墙设置

防火墙区域选择 vpn

![P4](C:\Users\Berry\Downloads\P4.jpeg)

设置端口转发

网络-防火墙-端口转发

新建端口,将位于外部区域WAN的指定端口(示例为6001),转发到内网设置的服务器监听端口。

2023-02-14T13:54:03.png

至此OpenWrt设置完成。

客户端设置

上一步我们已经设置完服务端了,服务端正在工作,等待客户端连入,这一步我们设置客户端。

客户端参数配置

此处以iOS Surge客户端举例:

在iOS客户端 代理服务器处,添加代理,类型选择WireGuard。

如图示填入对应参数后,保存

2023-02-14T13:54:20.png
2023-02-14T13:54:35.png

客户端规则设置

在iOS客户端 代理规则处,添加代理规则。

规则类型选择IP-CIDR。

内容为192.168.1.0/24,意思是192.168.1.X段的请求内容,交给这条规则进行处理。

策略选择刚刚创建的WireGuard。

2023-02-14T13:54:46.png

保存后测试即可联通啦

![image-20230211195903942](C:\Users\Berry\AppData\Roaming\Typora\typora-user-images\image-20230211195903942.png)