通过"群辉NAS系统利用FRP开源工具实现内网穿透之实践记录(二)"简单实现了将内网群辉应用穿透映射,外网能够通过http网页的方式访问了。那现在呢,我不禁在想,群辉PC桌面端软件(比如同步软件Cloud Station Drive)和Android移动端APP能不能也通过FRP进行穿透连接呢,群辉自带的QuickConnect服务访问速度实在是难于忍受...
一、PC桌面端软件Cloud Station Drive通过FRP连接到内网群辉NAS应用服务:
1、直接用已映射出来的地址drive.kkcdn.cn:90设置成Cloud Station Drive的服务器地址能否成功呢,答案是否定(http网页方式还是能正常访问~)...
现在可以得出的初步结论是Cloud Station Drive软件和群辉NAS服务器之间的数据通信肯定不是通过http协议进行的,那根据OSI参考模型,有没有可能是直接使用的四层协议TCP/UDP进行传输的呢?翻一翻群辉官方文档,找到了这样一份资料,群辉NAS各个应用对应的端口信息表(传送门:DSM服务网络端口),果然,Cloud Station服务器端使用的端口是TCP:6690。这下就简单了~
2、在群辉服务器上,即FRP Client端,参考文章"实践记录(二)",找到frpc.ini文件,vi frpc.ini按照格式添加本地TCP:6690的端口映射:
3、kkcdn.cn服务器上放行66端口,然后通过frp dashboard可查看到TCP类型的端口映射已经建立起来了:
4、验证:PC桌面端软件Cloud Station Drive软件的服务器栏输入"kkcdn.cn:66",连接成功!
OK,搞定了Cloud Station Drive,那其他群辉桌面端程序比如Synology Surveillance Station Client(视频监控客户端)的配置类似,做好TCP类型的端口映射即可,就不一一列举了。
二、群辉Android移动端APP通过FRP连接到内网群辉NAS应用服务:
1、手机上安装好DS audio、DS video、DS file、Drive、DS cam、Moments等等,打开软件界面,看到了"HTTPS"的可选性,真是莫大的惊喜,说明群辉Android移动端大部分APP都使用的是HTTP/HTTPS通信的,那就简单了,把之前"实践记录(二)"已经配置好的子域名+端口号填到服务器栏就可以了,以下截图是DS video、DS file上登录的截图,都登录成功。
2、打开DS cloud、Synology LiveCam(这个软件比较好玩,可以把手机当做摄像机使用,拍摄的视频会实时存放到群辉NAS系统中,不用担心手机空间不够了~),这两个软件的界面比较"丑",也没有"HTTPS"可选性,参照群辉桌面应用的套路,这两款APP应该也是直接采用TCP/UDP传输数据。So,试着在地址栏输入对应应用的TCP端口的映射端口(6690->66),即"kkcdn.cn:66",DS cloud登录成功。
写到这里,我有个比较大胆的猜测:这些少量的界面比较"丑"的、直接使用TCP/UDP协议传输的应用,应该是群辉研发人员在早期开发的应用,遵循着最古老的桌面软件/APP的数据传输方式。像TCP/UDP这些四层协议,虽然TCP有三次握手之类的机制保证数据传输的可靠性,但是更高级的功能,比如流控、加解密传输等就爱莫能助了。凭空臆断一下,随着更多项目的推进,群辉官方研发人员的思想也逐渐成熟啦,终于还是朝着高级协议、轻应用的正确方向迈进,我心甚慰,哈哈~
**3、最后一个坑:Photo Station和DS photo要怎么通过FRP穿透连接?**根据官方提供的应用端口信息,Photo Station服务调用的是HTTP:80/HTTPS:443端口。而显然web默认端口也是HTTP:80/HTTPS:443,就离谱,一个端口怎么能够被多个应用同时使用?!然后让人郁闷的是,群辉DSM系统还不支持修改Photo Station服务端口,通过HTTP+子域名(即photo.kkcdn.cn:90)这样的方式显然是走不通了...
没得办法了,试下用TCP端口映射的方式,把本地TCP:80映射出去:
然后到DS photo服务器栏输入"kkcdn.cn:96",连接成功!思来想去,也只能猜测是群辉NAS系统上实时监控80端口的程序,会根据收到的来自不同终端数据进行标识符判定,然后转发到相应的应用程序...
好了,最后,贴下通过HTTP网页、Android客户端访问群辉Photo Station的截图:
最后,总结一下:对于新版的应用,比如支持HTTPS的,是比较友好的,只需要做HTTP类型的子域名映射就可以完美实现内网穿透了;如果像Photo Station、Cloud Station Drive这类不让改服务端口的限制比较大的应用,那需要通过TCP类型的端口映射才能够实现。
Over!