对浏览器支持的协议,它比DDNS更方便。
外网访问家中的服务器总是不方便。当我在家搭建了NAS和HomeAssistant后,我觉得我需要自己撸这个轮子了。
通过浏览器302重定向,跳转到设定的URL上。
- 客户端每隔一段时间向服务器发送更新报文,报文包含了跳转所需的协议、端口、路径参数以及钥匙信息。
- 服务器根据收到的报文获取跳转所需的参数,同时获取客户端的公网IPv4地址。
- 当浏览器访问服务器的跳转接口时,根据客户端上报的信息将请求重定向至客户端设定的地址上。
与DDNS不同在于没有TTL,可实时同步地址,也不需要自己申请域名,对用户成本更低。
与花生壳、frp、Ngrok相比,跳转后的所有流量不需要服务器参与,用户与自己的服务器直连,延迟更低,更好的用尽上下行带宽。所以,如果你在家搭建了NAS,那么WayHome是一个非常好的选择。
WayHome可以让你更低成本、快捷的在外网访问有非固定公网IP的主机。
类似与DDNS,但是不需要自己购买域名。
不同于向日葵、ngork、frp,所有流量不会走WayHome服务器,可以最大限度使用主机的上行带宽。
-
注册一个WayHome账号(注册地址)或登录。
您的WayHome账号名将作为访问地址的一部分,建议使用方便记忆的用户名。 -
根据钥匙信息配置客户端。
用户名、钥匙名和秘钥是必填的。
协议一般是http,也支持https和ftp等;端口是你自己服务器对外开放的端口,注意80/443/8080已被电信屏蔽;路径可不填。
-
运行客户端。
java可以直接执行start.sh脚本。 -
最后在控制台就能看到目标地址,也就是你家的公网IP和你配置的协议及路径。
点击GoHome按钮可以直接跳转到目标地址。
书签地址是固定的,由你的用户名和钥匙名组成,可以发送给别人或创建书签。
使用vue + iView作为网页的前端显示。 主要为用户提供使用说明、后台管理等功能。
实现用户注册、登录,用户钥匙创建等功能的接口,供前端调用。
实现地址获取、地址信息上报功能。 考虑到用户量足够大时,除了对redis进行扩展,还需要对way-home-core进行横向扩展。
-
地址更新上报接口
客户端定时上报跳转信息,需要username、keyName、protocol、port、path、timestamp参数,并签名sign。
POST
请求,地址:https://wayhome.zhangtory.com/api/address 参数以json形式放入body, 使用UTF-8编码,并设置header : 'Content-Type': 'application/json;charset=utf-8'。
username
: 你的用户名。keyName
: 你的钥匙名。
protocol
: 访问协议,如http、https、ftp。
path
: 路径参数,可选,如?user=admin&password=123456。
timestamp
: 毫秒级时间戳。
sign
: 参数名按照ascii升序排序,并以key=value&key=value&secretKey=secret形式拼接成字符串,然后对字符串取MD5摘要,MD5不区分大小写。 -
地址信息获取接口
获取钥匙对应的地址信息,以json形式返回。GET
请求,https://wayhome.zhangtory.com/api/address/{username}/{keyName}username
: 你的用户名。keyName
: 你的钥匙名。
如果你有什么想法,可以提Issue给我们,或者发邮件到i@zhangtory.com 。
后续我会根据我自己的使用进行优化。