接上篇文章,继续折腾家庭网络:如何玩转智能家居 - 网络如何智能openwrt+v2ray。
更新说明
- 2023.02.24:R2S不再作为主路由,采用旁路由接入
本篇文章解决问题是:如何通过配置wireguard实现从世界任何地方优雅的访问家庭网络。我们在家庭网络使用场景汇总一定会遇到以下情况,人在外:
- 想要访问家庭网络中的NAS服务,获取一些资料。
- 想要下载一部资源,添加下载任务,一回家就可使用
- 全屋智能家居,某一个设备出现故障,想要直接接入家庭网络查看原因修复
- 等等…
这些场景的基本需求是:安全性一定要有保障,能够在外网连接到家庭网络(不是简单的内网穿透,而是组成大局域网)。
答案不言而喻,组建vpn。那么问题来了,用什么vpn,如何连接到家庭网络:
- 没有公网IP,现在IPv4已经耗尽,想要从运营商那获得公网IP还是很困难的,而且IPv6目前还不是很普及。
- 家庭内部网络安全性脆弱,需要防火墙来保护,一般的不应该将家庭网络中的服务暴露在公网中,这样会有极大的安全隐患。
本篇文章的目的是:通过vpn的形式使得在外网如同访问家庭内部局域网一样,让外部设备与家庭网络中的设备形成一个局域网。
那为什么选择wireguard:
- 开源:https://github.com/WireGuard。
- 简单:代码简单,仅4000余行,原理简单,部署简单。
- 安全:支持最新加密技术,Curve25519、ChaCha20等。
- 性能:WireGuard 虚拟网由于是100%内核处理,省去了用户进程和内核交互的开销,因此性能优越,具体表现为吞吐量高。
网络架构:
博主目前设计的网络架构如上图,不过本篇文章只讲 光猫<->AC<->R2S
这样的链路:
光猫:192.168.1.1
AC(主路由):192.168.2.1
R2S(旁路由):192.168.2.100
这里的R2S我们作为旁路由来使用,什么是旁路由请自行搜索资料。简而言之,家庭内大多数网络均走AC主路由,部分走旁路由(翻墙),旁路由的(折腾)挂掉不会导致整个家里网络中断。
由于博主家庭网络没有公网IP,动态IP也没有,因此这里找了一台云服务器作为中转(非UDP打洞,中转方式会消耗云服务器流量,请悉知)。当然也可以用基于wireguard现成的方案,如tailscale,免费应该够用(有设备限制)。
提前准备
这里假设你已经准备好已经准备好openwrt路由器。我们还需要准备:
一个公网IP:或是家里自带公网IP+DDNS,或是购买一台公网服务器VPS
一个域名:可选,如果你的公网IP是动态的,那就需要域名且必须通过DDNS
FRP
因为博主家里没有公网IP,那么只能通过这种内网穿透的方式实现,将wireguard的udp端口通过代理的方式暴露到外网,如果有公网IP跳至下一步。
1、在vps上安装frps服务端,请到 frp/releases 下载对应架构的最新版本即可,解压到服务器。
服务端配置:
[common]
bind_port = 7000
token = 768f72bc664ad2ad7c9edccf65523fd7
其中 token
是用来鉴权客户端的,请重新生成。bind_port
指定 frps 监听的端口,云服务器需要放开该端口的访问。
2、在openwrt安装frpc客户端,请到 System->Software
搜索 frpc
安装。
完成后进行配置:假设这里我们选择端口 51820/udp
作为wireguard的通信端口,IP 10.0.0.1
作为wireguard的网关IP。
我这边的 /etc/config/frpc
配置如下,你可对应着在网页上进行修改:
config init
option stdout '1'
option stderr '1'
option respawn '1'
option user 'root'
option group 'root'
config conf 'common'
option server_port '7000'
option tls_enable 'false'
option server_addr '<server_ip>'
option token '768f72bc664ad2ad7c9edccf65523fd7'
config conf 'ssh'
option name 'wireguard'
option type 'udp'
option use_encryption 'false'
option use_compression 'false'
option local_ip '10.0.0.1'
option local_port '51820'
option remote_port '51820'
记得将 server_ip
替换成frps的地址,如果不出意外的,openwrt中的frpc已经跑起来了。
WireGuard
WireGuard是点对点的网络,每个节点既可以做服务器,又可以做客户端。我们这里将部署在openwrt中的wireguard节点称为服务端,在手机或电脑端部署的wireguard节点称为客户端。更多安装方式:https://www.wireguard.com/install/。
整体步骤如下:
- LAN口设置(旁路由)
- 安装wireguard
LAN口设置
1、编辑LAN口,设置上游网关信息:
2、配置DNS:
3、关闭SYN-flood保护,开启动态IP伪装
安装wireguard
1、在openwrt中安装wireguard建议通过System->Software
进行安装:
安装完成,重启路由器。同时你也会看到 Status->WireGuard
:
配置服务端
需要了解细节的朋友可以参考官方 Quick Start,我们这里通过openwrt进行wireguard服务端配置。
1、点击 Network->Interface
中的 Add new interface
创建接口:
2、接口名称建议 wg0
,协议选择 WireGuard VPN
进行创建:
3、一般设置:
Private Key
是WireGuard节点的私钥,可通过Generate Key Pair
生成,也可手动生成:# 通过ssh登录到openwrt,执行 $ wg genkey | tee privatekey | wg pubkey > publickey $ cat privatekey publickey
Listen Port
监听的端口,这里设置为51820
与 frpc 配置对应即可。IP Addresses
是WireGuard接口的私有IP网段,这里设置为10.0.0.1/24
与 frpc 配置对应,不要与其它内网IP段冲突。
4、防火墙设置,有 vpn
选 vpn
,无则选 lan
:
最后 Save
,保存即可,后续再步骤添加 Peers
。
客户端配置
首先,通过这里的安装方式进行客户端的安装:https://www.wireguard.com/install/,我这里以iOS举例。
1、点击 创建隧道->手动创建
:
2、填写基本信息,主要填写下面三项,其它默认:
- 名称,这里随便填
- 公私钥,这里点击
生成密钥对
随机生成即可。 - 局域网IP地址,即客户端节点IP,这个地址要设置为符合
10.0.0.1/24
。
3、通过 添加节点
添加服务器信息:
- 公钥,填写服务端的公钥。
- 对端,服务端地址+端口,由于家里没有公网,这里走的frp,所以填的是公网vps代理地址。
- 路由的IP地址(段),这里填写需要走wireguard网络的IP段,如:
192.168.100.0/24,192.168.2.0/0,10.0.0.0/0
。这样当开启wireguard vpn之后访问这些IP就会走vpn网络。
到了这一步,客户端已经完成配置了。但是服务端还没有,因为wireguard本质上是一个P2P通信的软件,我们还要将客户端公钥信息配置到服务端才行。
配置Peer
在openwrt配置wireguard peer信息。
填写刚才配置的客户端信息,Save
保存即可:
现在在手机上开启 vpn,尝试访问一下路由器地址 192.168.100.1
是否可行。
FAQ
1、客户端如何访问openwrt的下一级路由的服务,如这里如何访问 192.168.2.x
服务:
因为路由器作为openwrt的下一级路由,openwrt是不知道如何到达 192.168.2.x
这个网段的。因此需要添加一条静态路由:
2、如何所有流量都走wireguard,并且可以通过之前设置的v2ray进行科学上网:
请参考:https://www.wireguard.com/netns/#routing-all-your-traffic。
3、不用开启端口吗,很多教程上面需要开启路由器端口?
开启端口,一般是指我们路由器有公网IP,通过ddns方式对外暴露端口的时候需要开启。
相关地址
[1] https://github.com/WireGuard
[2] https://www.wireguardconfig.com/
本文链接:https://deepzz.com/post/openwrt-and-wireguard-connect-homenet-anywhere.html,参与评论 »
--EOF--
发表于 2022-11-20 23:45:00,并被添加「家庭网络、openwrt、wireguard、vpn」标签,最后修改于 2023-02-24 16:22:19。
本站使用「署名 4.0 国际」创作共享协议,转载请注明作者及原网址。更多说明 »
提醒:本文最后更新于 635 天前,文中所描述的信息可能已发生改变,请谨慎使用。
专题「智能家居」的其它文章 »
- 如何玩转智能家居 - 网络组网方案实施 (Jun 23, 2022)
- 如何玩转智能家居 - 家庭组网方案选择 (Apr 13, 2022)
- 如何玩转智能家居 - 灯控方案选择 (Mar 31, 2022)
- 如何玩转智能家居 - HomeAssistant接触 (Apr 12, 2021)
- 如何玩转智能家居 - HomeAssistant介绍 (Mar 26, 2021)
Comments