群晖可以访问公网当然很方便,但很多时候并不需要这样做,只是临时的访问资料,所以一直在琢磨怎么可以实现有选择性的对特定 IP 开放访问.
最初使用的方案是梅林固件+entware,安装了 knockd 敲门插件,指定若干个端口开门,开门程序是用 IOS 自己写的,这个方案还不错,只是互动性很差.
后来了解到阿里云有物联网协议,可以一直在线,1 元 100 万分钟应该可以跑一年多了,于是全部重写了路由器端代码用 Python+aliyun iot SDK,实现响应.而客户端则是 IOS+aliyun iot SDK,这样一个操作逻辑.
后来添加了一些小功能,比如路由器问题,启动时间什么的,全当是增加点色彩.
核心的思路是:
- 每个 IP 可以临时访问一段时间,就不用自己关闭了.
- 如果笔记本要连群晖,手机暂时连入同一个网络后打开门就好了.
- 如果两台设备同时连的话,在服务器里设置了两个门,在梅林里的实现是两个端口指向同一个 IP 和本地的.
- 路由器本身不参与任何的外网访问过程,也本身不作为服务器,理论上也可以路由器自己做 web 服务器,但是衡量了下,那样就又是暴露公网的危险了,所以阿里云物联网完好的作为中间人参与了.
- DDNS 还是作为 IP 寻找的路径,实际上如果洗白了群晖的话,不用 DDNS,用 QC 的 ID 也可以同样找到 IP 的,这里如果想去掉也可以去掉.
所以本质就是,路由器在看守,给必要访问的 IP 放行一些时间,这样应该不管哪方面都不算是开放 Web 服务器对外访问了...
手机端界面:
V2EX 不能插入图片,我贴在知乎吧:
