Fantetic Blog

OpenWrt 使用 WireGuard 配合 Lucky 回家冲浪

OpenWrt通过使用WireGuard配合Lucky可以随时随地访问家庭局域网,畅想低延迟互联。

博客迁移导致图没了,先将就着看下,等之后有时间再重写一篇。

第一步:前提条件

  1. 路由器系统为OpenWrt,且已安装WireGuard。一般OpenWrt里都会有默认安装,没有的话可能需要重新安装下OpenWrt系统,似乎是WireGuard的一些依赖编译时才能装上。我推荐使用:多固件云编译版,具体安装教程请参考网上其他教程。

  2. 有公网IPV6(正常上网情况下,在OpenWrt查看Lan接口的IPV6是否为240开头,是则有公网IPV6)

  3. 域名一个(教程演示为阿里云托管域名),没有域名的,买一个吧

第二步:配置 WireGuard

1. 生成 WireGuard 密钥对

  1. SSH 登录到路由器,创建wg配置目录,生成**服务端**公钥和私钥以及预分享密钥
   mkdir wg
   cd wg
   umask 077
   # 生成服务端的公钥和私钥,分别叫spublickey、sprivatekey ,名称可自定义,记住就行
   wg genkey | tee sprivatekey | wg pubkey > spublickey
   # 创建预分享密钥
   wg genpsk > sharekey
   # 查看所有密钥,记得找个地方保存一下
   cat spublickey
   cat sprivatekey
   cat sharekey
  1. 生成**客户端**公钥和私钥:
   # 创建一个用户01,存放该用户的公钥和私钥,后续有几个用户就按照这个方式添加即可
   mkdir user01
   cd user01
   # 生成客户端的公钥和私钥,分别叫cpublickey、cprivatekey ,名称可自定义,记住就行
   wg genkey | tee cprivatekey | wg pubkey  > cpublickey
   # 查看所有密钥,记得找个地方保存一下
   cat cpublickey
   cat cprivatekey

2. 创建 WireGuard 接口

  1. 在 OpenWrt 的管理界面中,进入 网络(Network) > 接口(Interfaces)

  2. 点击 添加新接口(Add new interface) ,创建一个新的接口。

  3. 输入接口名称(如 wg),选择接口类型为 WireGuardVPN

  4. 在 私钥 中输入之前生成的服务器私钥(sprivatekey)

  5. 配置监听端口(如 7000),IP地址填写一个和本机路由器地址不同的地址段,也就是VPN 专用的网段 IP,例如:192.168.3.1/24,保存。

  6. 切换到防火墙设置,将其绑定到lan区域

3. 创建Peers

  1. 在 Peers 中,选择更多选项,预共享密钥 添加。

这样会出来一个Peer的配置,按照要求分别填写:

  • 公钥 - 客户端公钥,注意:是客户端公钥,也就是cpublickey
  • 预共享密钥 - 填写上文获取的预共享密钥,也就是sharekey
  • 允许的 IP - 即表示为此客户端分配固定 IP , 例如 192.168.3.10 , 注意各客户端 IP 不能冲突
  • 勾选路由允许的IP
  • 持续 Keep-Alive - 我这里填写20,你可以填写建议值25

设置完成,记得**保存,保存,保存**!!!

第三步:配置动态域名

1. OpenWrt安装Lucky

虽然有其他DNS解析和端口转发软件选择,但我还是建议大家安装Lucky,后面会用到它的一些其他功能。

系统-软件包中安装Lucky,具体安装方法可网上搜索。

2. Lucky配置动态域名

  1. 在 Lucky 中点击动态域名,添加任务,任务名称随意填写,例如DDNS。

  2. 跳转到阿里云页面,选择使用RAM用户AccessKey,具体操作如图。

  3. 此处复制AccessKeyID、AcessKeySecret分别粘贴到Lucky中的相应位置。

  4. 点击用户登录名称进入后,设置权限管理,加入DNS解析权限。

  5. 回到Lucky,按图填写设置。

设置完成保存,等待DNS解析结果。

第四步:配置客户端

1. 安装 WireGuard 客户端

  • 在各客户端设备上安装 WireGuard 应用。注意:iphone的WireGurad客户端需要外区id才能下载!

2. 创建客户端配置

  1. 创建后缀为.conf的配置文件,例如user01.conf,复制以下信息,并修改对应信息:
   [Interface]
   # 对应客户段分配的IP,在openwrt里配置过
   Address = 192.168.x.x/32
   # 这里的私钥是指客户端的私钥,也就是user01的cprivatekey
   PrivateKey = cprivatekey
   # 本地的 DNS 服务器或者公有 DNS 服务器,一般填路由器DNS
   DNS = 192.168.1.1
   [Peer]
   # 这里的公钥是指服务端的公钥,也就是服务端的spublickey
   PublicKey = spublickey
   # 192.168.1.0/24 表示家庭局域网,192.168.100.0/24表示本机局域网
   # 这样填写仅代理局域网,互联网走本地网络,如果想要所有流量都走家庭局域网,则只填写类似第一个
   # iPhone iPad 设置为 0.0.0.0/0 则为全局模式
   AllowedIPs = 192.168.1.0/24, 192.168.100.0/24
   # 前面生成的预共享密钥
   PresharedKey = xxxx
   # 远程连接地址,DNS解析的域名+之前设置的7000端口,端口根据实际情况填写
   Endpoint = home.xxxxx.com:7000
   # 保活时间,默认是25,我填写的是20,所以这里填写20,一般默认即可
   PersistentKeepalive = 20
  1. 将填写好的配置文件导入到对应客户端中,保存配置。

第五步:测试连接

在各客户端设备上启用连接,尝试访问家庭网络中的设备(如 NAS、OpenWrt等)。

  1. Windows端效果

连接成功显示:

正常访问内网:

  1. iphone端效果

连接成功显示:

正常访问内网:

通过 WireGuard VPN 连接后,效果相当于在家中上网,除非特殊设定,否则所有流量都由家中发起,包括强国!🤪🤪🤪


总结

通过本教程,我们成功配置了 OpenWrt 路由器通过 WireGuard 和 IPv6 实现了随时随地安全地访问家庭网络。这种方式不仅提升了连接的灵活性,还增强了数据传输的安全性。如果你有任何问题或需要进一步的帮助,欢迎评论区讨论!

此篇教程重点是使用IPV6,当外部网络不提供IPV6时,只有通过STUN服务器穿透生成IPV4地址来进行连接,下一篇文章我将编写关于通过Lucky进行STUN穿透来获取公网IPV4的教程,这样可以在外真正做到随时连回家庭局域网。

OpenWrt WireGuard