前言
去年出过一期在 OpenWRT 上部署 OpenConnect VPN 的详细教程,主要用于在外办公方便VPN 回家
的使用场景.博主几乎每天使用持续了一年多,在 macOS 和 iOS 上体验都非常的稳定.
而今天的主角是已经火了几年的了WireGuard
, 同样是 VPN 回家服务,在博主试用了一段时间后决定以后主用 WG 了.(其实是强迫症患者发现 CISCO AnyConnect 还没支持 ARM 架构).
WireGuard 与 OpenConnect VPN 的区别
抛开深沉的原理,简单通俗的说明下两者的区别和使用感受:OpenConnect VPN
主要是使用 TCP 协议,而WireGuard
则是 UDP 协议.最明显使用感知就是前者需要类似拨号一样过程,在网络断开,重连等情况下并非无感.而WireGuard
则类似于常驻后台,随用随取的感觉,体验不错.
在配置方面, OpenConnect VPN 需要使用证书来提高使用安全和连接体验,而 WireGuard 则是使用点对点的加密公钥私钥的形式来配对,并且每台客户端需要单独分配 IP 和公私钥.前期配置均稍许麻烦,但两者后续使用和管理都还比较合理和方便.
- OpenConnect VPN 只需要客户端拥有证书文件即可
- WireGuard 只需要客户拥有配置文件即可
服务端
创建公钥私钥
预共享密钥
通过SSH
登陆到 OpenWRT 后台.
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
# 获取服务端公钥复制保存
客户端公钥私钥 ( macOS )
重复此操作创建每个客户端的公钥和私钥,请注意修改以下命令中的文件名,本文以 macOS 为例:
wg genkey | tee macos_privatekey | wg pubkey > macos_publickey
# 创建 macOS 客户端公钥和私钥
cat macos_privatekey
# 获取 macOS 客户端私钥复制保存
cat macos_publickey
# 获取 macOS 客户端公钥复制保存
配置 OpenWRT
服务端相关配置
登陆 OpenWRT - 网络 - 接口 - 添加新接口
填写接口名 - 选择接口协议 - 提交
基本设置 - 填写上文获取的服务端私钥
自行填写一个端口号 - 并且在路由器映射该端口的 UDP 协议
IP 地址填写一个 VPN 专用的网段 IP - 本文以192.168.100.X
为 WireGuard 的专用网段为例,则本 WG 服务器 IP 为192.168.100.1/24
防火墙设置 - 选择 vpn
客户端 Peers 区域为每个客户端添加配置
选择预共享密钥
- 添加
公钥 - 填写上文获取的macOS 客户端公钥
预共享密钥 - 填写上文获取的预共享密钥
允许的 IP - 即表示为此 macOS 客户端分配固定 IP , 本文示例为 192.168.100.2/32
, 注意各客户端 IP 不能冲突.
持续 Keep-Alive - 填写 25
防火墙
网络 - 防火墙 - 自定义防火墙 - 添加以下防火墙 - 重启防火墙
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o br-lan -j MASQUERADE
# 注意此条防火墙网段 192.168.100.0/24 需和上文服务端 IP 网段保持一致.
重启 WireGuard
返回网络 - 接口 - 关闭 - 连接
或者直接重启整个 OpenWRT 最为稳妥.
客户端
创建客户端配置文件
创建后缀为.conf
的配置文件,例如macos_wireguard.conf
,复制以下信息,并且修改对应的公私钥信息:
[Interface]
Address = 192.168.100.2/32
# 对应 macOS 客户段分配的 IP
PrivateKey = qJHywBpl27Ao/TRse85DQ/f+kwfNGRmPDYCq0OC6uUY=
DNS = 192.168.1.3
# 本地的 DNS 服务器或者公有 DNS 服务器,例如: 114.114.114.114
[Peer]
PublicKey = u7vjXN90uJt7pRjG8tR7hb25ssYOi7PRzJ5h9Diy02I=
AllowedIPs = 192.168.1.0/24, 192.168.100.0/24
# macOS 如上设置可与 ClashX Pro 共存仅代理局域网,互联网走本地网络.
# iPhone iPad 设置为 0.0.0.0/0 全局则模式.
PresharedKey = Pu5xBEBmz9ghhUMNp5o72s+w7nuLwxJJUgNk3EljFVo=
# 预共享密钥
Endpoint = ddns.xxxxx.com:12345
PersistentKeepalive = 25
此时的配置文件是用于客户端的,所以PrivateKey
则为 macOS 客户端的私钥,而Peer
中的PublicKey
则为 OpenWRT 的公钥.请注意反向思考,Endpoint
填写家中的 IP 或者 DDNS 域名和端口.
AllowedIPs
值得注意的是AllowedIPs
参数.针对不同场景和需求,此处可以配置不用的路由.
当此处为0.0.0.0/0
时表示任意网络请求都经过 VPN 俗称全局 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
分流.
macOS
在 macOS App Store 下载 WireGuard
,从文件导入隧道.
选择允许添加 VPN 配置
连接成功
在 OpenWRT 状态页面能够看到连接成功的状态信息
iOS
重复上述操作创建 iPhone 的配置文件,并上传至 iCloud 云盘.
在 iOS 设备 App Store 下载 WireGuard
添加隧道 - 导入配置或压缩包
从 iCloud 云盘中选择 iphone_wireguard.conf 配置文件
选择允许添加 VPN 配置
连接成功
结语
本文详细的讲解了在 OpenWRT 上如何配置 WireGuard 以及客户端的安装和配置.欢迎留言交流更多的使用方法.如果本站帮助到了您也欢迎通过以下赞赏按钮来支持我.
其他相关文章:
CentOS 7 安装 WireGuard 详细教程
81 条评论
LZ你好,我是个小白。我现在有家里是N1刷的OP做旁路由,主路由是K3刷的改版meilin。我买了个weipien是astrill,他最好的方式就是他原版梅林固件安装软件,而我没有华硕路由器。网上看到您的教程,感觉是不是我理解的可以通过这种方式就可以实现全屋上网啊。Astrill有他的配置文件。
为什么我移动网络下连接失败=,=
有公网IP么? 换个端口试试,有时运营商也会封UDP端口.
我把防火墙zone里面的wan,input,forward都改成了accept之后就好了。。但这样是不是有安全性问题呀
换了端口也一样。。我想问下openwrt运行的wireguard有啥日志吗?或者防火墙需要配置什么吗?
有公网ip,我换个端口试试
现在是我在部署了wireguard的openwrt内网里使用手机连接openwrt的wifi信号,启用wireguard,下载一个大东西,去看wireguard status里Data Transmitted:走的就是这部分数据,大小也对得上。但是到外网就不行。
另外mac(在这个局域网里)下客户端启用WG conf直接提示fail to change tunnel state
请问能否将openwrt 作为wireguard 的客户端,连接我vps 上面的wireguard server。 作为旁路由帮助家里面电脑使用。同时 wireguard本身好像是没有筛选的,连上就是全部流量,是不是通过这个也可以设置白名单域名,只让 ytb,google 这种常用的外网走wire guard,其他的网站就不走?如果可以这样,感觉比每个设备装客户端,还要不停的开关方便多了
为什么我全局不能用openwrt里面的网络,能指导一下吗?手机连接以后,家里是可以科学上网的,手机却不能使用家里的科学上网功能。
无法访问外网
你这不是多此一举,家里有op,家里设备本来就不需要装客户端
我和你区别就是 openwrt 和 wireguard 是独立分开的,多半是防火墙的问题吧.
就是我现在找 wireguard,和 openwrt 的相关信息,都是教怎么用openwrt 怎么配置 server,让其他的client 来连接。 我现在是已经有个wireguard 服务器了,想问问能不能让op作为客户端直接连上,其他的子设备连接op。 但是我搜了一下,没发现怎么让op作为client 连接我 wireguard的服务器。
我没试过,那你就得找 wg 有没有 op 版的客户端了,如果没有就找 Linux 客户端,SSH到OP安装配置成客户端试试看
好的~ 另外我在想,wireguard也没有pac,如果这个选择可以让op来实现就好了。 不断的增加白名单。这样我家里电视机顶盒电脑啥的,也不需要装客户端,只需要把网关改我op就可以实现,腾讯视频啥的也能看,奈飞也能看。⌇●﹏●⌇
想问问大佬你觉得这个可能吗?
直接服务器装个 v2ray 吧.别走弯路
好的!
其实主要是wireguard给我父亲用了一段时间,反馈比其他的好太多,基本没有连接不上,连接缓慢的情况。唯一的不爽就是全局代理,有时候忘记关会比较麻烦。
iPhone一直连接不上服务器,客户端查看日志一直在发送握手信息,但是一直失败
一样。。。求解,完全照搬楼主设置,而且我家里的网络结构都是照搬的楼主另一篇大作一样的dhcp,openclash,dns分开的结构。。。
感谢!研究了两天终于在op装上了,腾讯云主机中继,但是无法用0.0.0.0腾讯云流量去访网站。。。。继续折腾中