ZhangTory - 2020年2月
type: channel
link: https://test.zhangyaoyu.com/2020/02/
description: Geek & Hacker & Maker
items: 情人节，给TA做一朵会发光的“蓝色妖姬”
items: DDNS的替代品：WayHome 回家之路

情人节，给TA做一朵会发光的“蓝色妖姬”
type: item
date: 2020-02-13T12:56:00+00:00
description: 这是一个简单的电路与纸花的结合。其实挺漂亮的。

DDNS的替代品：WayHome 回家之路
type: item
date: 2020-02-05T11:45:00+00:00
description: 在家的树莓派上搭建了HomeAssistant，有时需要在外网访问，查阅了一些外网访问的方案，如ngrok、frp、DDNS等。他们各有优势，但是ngrok、frp这种内网穿透工具，需要有自己的服务器，而且所有的流量都需要从服务器绕一次，没有必要。DDNS不错，只需要有自己的域名即可，但是DNS同步可能最慢会有10分钟的窗口期不能访问，当然遇到的可能性比较小。本来对于我自己来说用DDNS是个比较好的选择，但是我在查资料的时候发现很多搭建NAS的人也有类似的需求，而他们却没有必要买一个域名，所以我觉得自己可以撸一个轮子来解决这个问题。于是WayHome就诞生了。之前部署在国外的服务上，访问比较慢，所以在腾讯云买了一个服务器，同时还把zhangtory.com的域名转回了国内，今天刚刚备案完成。WayHome的地址：https://wayhome.zhangtory.com项目源代码托管在 GitHub大家有什么需求或发现什么bug可以在GitHub上提issue给我。对浏览器支持的协议，它比DDNS更方便。 外网访问家中的服务器总是不方便。当我在家搭建了NAS和HomeAssistant后，我觉得我需要自己撸这个轮子了。实现原理通过浏览器302重定向，跳转到设定的URL上。客户端每隔一段时间向服务器发送更新报文，报文包含了跳转所需的协议、端口、路径参数以及keyId、secretKey信息。服务器根据收到的报文获取跳转所需的参数，同时获取客户端的公网IPv4地址。当浏览器访问服务器的跳转接口时，根据keyId将请求重定向至客户端设定的地址上。与DDNS不同在于没有TTL，可实时同步地址，也不需要自己申请域名，对用户成本更低。 与花生壳、frp、Ngrok相比，跳转后的所有流量不需要服务器参与，用户与自己的服务器直连，延迟更低，更好的用尽上下行带宽。所以，如果你在家搭建了NAS，那么WayHome是一个非常好的选择。如何使用用前准备公网ip。 如果没有，打电话让电信分配一个即可。家中光猫or路由器做端口转发。 一般来说电信屏蔽了80和443等端口，所以我们需要通过其他端口做转发，映射到内网的80或443端口。登录WayHome网站，注册用户并在控制台创建一个Key，获得keyId及对应的secretKey。客户端配置下载客户端。 目前实现了Java的客户端(点击下载)和Python脚本(点击)，在client中有已经编译好的jar包。 如果您觉得Java客户端不方便，也可以根据API文档自行开发客户端，或给我们提Issue。配置home.properties home.server_url: 服务器地址，默认为https://wayhome.zhangtory.com/api/address ，如果自己搭建有私服，可以修改为自己的地址。`home.keyId`: 网站控制台申请获取的keyId。 `home.secretKey`: 网站控制台申请获取的secretKey，与keyId对应。 `home.protocol`: 跳转的协议。如跳转到家中的路由器，一般为http，如果支持https可以设置为https。另外如果要跳转到ftp服务器，也可以设置为ftp。其他协议同理。 `home.port`: 跳转的端口，即在家中光猫or路由器上设置的转发端口。http默认为80端口，如果使用http跳转到80端口，则可以省略。其他协议同理。 `home.path`: 跳转请求的路径参数。如"/login?user=admin&password=123"。没有可以省略，如有需要以"/"开头。运行客户端 Java客户端使用java -jar命令运行。运行时可以根据控制台的输出日志判断请求是否正常。使用网页控制台可以查看对应keyId设置的跳转地址及其他信息。 访问https://wayhome.zhangtory.com/api/go/{keyId} 即可跳转到设置的地址上。 可以将跳转地址作为书签保存。开发中...如果你有什么想法，可以提Issue给我们，或者发邮件到i@zhangtory.com 。 后续我会根据我自己的使用进行优化。