91

OpenWRT 配置 WireGuard 服务端及客户端配置教程

 2 years ago
source link: https://www.ioiox.com/archives/143.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

而今天的主角是已经火了几年的了WireGuard, 同样是 VPN 回家服务,在博主试用了一段时间后决定以后主用 WG 了.(其实是强迫症患者发现 CISCO AnyConnect 还没支持 ARM 架构).

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

WireGuard 与 OpenConnect VPN 的区别

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

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

  • OpenConnect VPN 只需要客户端拥有证书文件即可
  • WireGuard 只需要客户拥有配置文件即可
本文为 Stille 原创文章.经实践,测试,整理发布.如需转载请联系作者获得授权,并注明转载地址.

注意博主的 OpenWRT 是以旁路由的形式存在于家庭网络中,所以后续防火墙设置可能和把 OpenWRT 当主路由的形式不同.

创建公钥私钥

预共享密钥

通过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 网段保持一致.
再次声明博主的 OpenWRT 是作为旁路由接入,此条防火墙不确定适用于主路由部署 WireGuard 使用.主路由用户可以尝试无需设置防火墙(经朋友测试)

重启 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 客户端,WireGuardClash等软件可以共存,此处可以设置为AllowedIPs = 192.168.1.0/24, 192.168.100.0/24,表示访问内网网段才会走 VPN .而其他互联网,外网等访问还是走当前网络来利用Clash分流.

macOS

在 macOS App Store 下载 WireGuard,从文件导入隧道.

选择允许添加 VPN 配置

在 OpenWRT 状态页面能够看到连接成功的状态信息

重复上述操作创建 iPhone 的配置文件,并上传至 iCloud 云盘.
在 iOS 设备 App Store 下载 WireGuard

添加隧道 - 导入配置或压缩包

从 iCloud 云盘中选择 iphone_wireguard.conf 配置文件

选择允许添加 VPN 配置


本文详细的讲解了在 OpenWRT 上如何配置 WireGuard 以及客户端的安装和配置.欢迎留言交流更多的使用方法.如果本站帮助到了您也欢迎通过以下赞赏按钮来支持我.


本站提供免费和付费的技术支持.你可以通过留言,邮件,TG群的方式来技术交流和免费咨询.同时也可以付费支持的方式获得相关的技术支持,项目部署配置等服务.具体相关详情请点击查看 技术支持页面


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK