局域网穿透控制。通过此软件,可以桥接到局域网内的任何网络设备,让远程访问此设备就像在局域网内访问此设备的效果一样。
直接远程访问到路由器的主页面,就像局域网访问此设备一样。(TODO 目前没有cache,若路由器的web-server的图片或文件大会有点慢,需耐心等待)
可直接在浏览器 telnet到局域内网的任何设备,包括路由器。这里可应急用,发现路由器有问题可急时 Telnet。
可直接在浏览器 远程桌面到某台开启nvc Server的电脑上。也可当应急用,这样很方便。
通过localproxy可将局域网的任何 ip:port 转换成 127.0.0.1:port ,从而访问本地端口与访问内网的端口一样。
内网需要路由器或某台主机上(最好是路由器)运行 web-tunnel 。支持openwrt等系统。
需要有一台公网服务器,以用来穿透。(也许我提供一台服务器给大家先用着)
web-tunnel以libwebsocket为基础,纯C实现。实现了一个C语言版的协程,事件驱动基于poll(因为libwebsocket内部使用了这个)。单线程,内存占用低,效率高。下一步看,可能把自己实现协程部分换成libev,以有更好的移植性. 感谢libwebsocket的开发者们。
服务器端基于nodejs实现。代码写得粗糙,第一次使用nodejs。
localproxy 目前只支持 nodejs
远程桌面使用了noVNC的部分js代码。感谢作者。
远程访问,可开启 DDNS实现。但是DDNS需要有公网ip,ip还常常变化,ddns不会特别急时的得到变化的ip。
远程访问,可使用 ssh-tunnel。 ssh-tunnel需要在服务器开启非常多的端口,同时需要服务器开启不同类型的用户。 而 web-tunnel只需要服务器开启 80端口,所有的数据只通过80端口转发到各种子设备。用户权限管理可基于web,更灵活更安全.
远程访问,可开启 vpn. 与vpn比较, 本软件与vpn的着重点不一样.vpn是希望建立一个虚似的局域网,大家可以此局域网内互连. 而本软件某个用户访问到自己局域网内的某台设备,而不希望多个用户之间要进行互连.同时配置也更简单.
我用了noVNC的js代码来实现远程桌面,实际上通信部分与noVNC里的websocket不一样,靠自己体会了:) .
通过此软件,很多事情可直接在浏览器当中完成,这个也是一个目标.
我常常需要远程控制家里的电脑,但是用的是移动的网络,它没提供公网 ip, 同时还封了vpn,导致用vpn也不行.
然后我先把ngrok移植到一个arm的路由器(迅雷路由器)上.它基于Go实现, 提供了内网穿透功能.要在路由器里编译Go的软件不简单,特别是后来改用了一台mips平台的路由器,不想折腾ngrok, 又移植一篇了,便想自己用C实现一个替代版本,所以产生了此项目.
此项目现在名字叫web-tunnel,其实我只想控制家里的路由器的web界面,通过web界面让它远程开启电脑.开启电脑之后,电脑上有teamviewer,这样就可以远程控制了.后来有时候想看路由器上的配置,必须telnet到路由器上,所以希望这样事情更简单点,能不能直接在浏览器上搞定?
搞定了telnet才发现,实际上局域网内的任何以tcp为基础的设备,都可以通过此软件来远程控制.所以搞定了vnc远程桌面,同时实现了localproxy,让远程的局域网内的任何端口都转换成本地的端口.