ngrok 是一个反向代理,通过在公共端点和本地运行的 Web 服务器之间建立一个安全的通道,实现内网主机的服务可以暴露给外网。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放,所以ngrok可以很方便地协助服务端程序测试。
参考博客:10分钟教你搭建自己的ngrok服务器
2、Natapp
natapp是 基于ngrok的国内收费内网穿透工具,类似花生壳,有免费版本,比花生壳好。免费版本:提供http,https,tcp全隧道穿透,随机域名/TCP端口,不定时强制更换域名/端口,自定义本地端口
参考文章:NATAPP1分钟快速新手图文教程
3、小米球
小米球是基于ngrok二次开发的内网穿透工具,支持多协议、多隧道、多端口同时映射(http、https、tcp等等...),同时支持多种系统win、linux、linux_arm、mac等。具体的使用直接参考官网。
4、Sunny-Ngrok
Sunny-Ngrok同样是ngrok二次开发的内网穿透工具,支持http,https协议,同时支持更丰富的系统和语言:linux、win、mac、openwrt、 python、php等。
教程:Sunny-Ngrok使用教程
5、echosite
echosite同样ngrok二次开发的内网穿透工具,支持多种协议,以前是全部免费的,现在推出了收费版和免费版,可根据自己的需要去选择。
参考教程:EchoSite---让内网穿透变得简单
6、Ssh、autossh
ssh 配合autossh工具使用,因为autossh会容错,自动重新启动SSH会话和隧道。autossh是一个程序,用于启动ssh的副本并进行监控,在死亡或停止传输流量时根据需要重新启动它。 这个想法来自rstunnel(Reliable SSH Tunnel),但是在C中实现。作者的观点是,它不像匆匆忙忙的工作那么容易。使用端口转发环路或远程回显服务进行连接监视。在遇到连接拒绝等快速故障时,关闭连接尝试的速度。在OpenBSD,Linux,Solaris,Mac OS X,Cygwin和AIX上编译和测试应该在其他BSD上工作。免费软件。
使用教程:SSH内网穿透
7、Lanproxy
lanproxy是一个将局域网个人电脑、服务器代理到公网的内网穿透工具,目前仅支持tcp流量转发,可支持任何tcp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面...)。目前市面上提供类似服务的有花生壳、TeamView、GoToMyCloud等等,但要使用第三方的公网服务器就必须为第三方付费,并且这些服务都有各种各样的限制,此外,由于数据包会流经第三方,因此对数据安全也是一大隐患。
参考教程:业余草推荐一款局域网(内网)穿透工具lanproxy
8、Spike
Spike是一个可以用来将你的内网服务暴露在公网的快速的反向代理,基于ReactPHP,采用IO多路复用模型。采用Php实现。
参考教程:使用 PHP 实现的的内网穿透工具 “Spike”
9、Frp
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。利用处于内网或防火墙后的机器,对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。
教程:一款很好用的内网穿透工具--FRP、使用frp实现内网穿透
10、Fcn
FCN[free connect]是一款傻瓜式的一键接入私有网络的工具, fcn利用公共服务器以及数据加密技术实现:在免公网IP环境下,在任意联网机器上透明接入服务端所在局域网网段。支持多种系统,有免费版和付费版。
教程:内网穿透工具FCN介绍
上面便是我所知道的内网穿透工具,其中ngrok相关的我基本都用过还有frp,都差不多。大部分都可以免费去使用,但是我不建议大家把这些免费的穿透工具去放到比较重要的云服务器中去使用,容易被攻击。我的小伙伴,开始你的穿透之旅吧。
Proxy-Go 详细介绍
Proxy是golang实现的高性能http,https,websocket,tcp,udp,socks5代理服务器,支持正向代理、反向代理、透明代理、内网穿透、TCP/UDP端口映射、SSH中转、TLS加密传输、协议转换、DNS防污染代理。
Features
链式代理,程序本身可以作为一级代理,如果设置了上级代理那么可以作为二级代理,乃至N级代理。
通讯加密,如果程序不是一级代理,而且上级代理也是本程序,那么可以加密和上级代理之间的通讯,采用底层tls高强度加密,安全无特征。
智能HTTP,SOCKS5代理,会自动判断访问的网站是否屏蔽,如果被屏蔽那么就会使用上级代理(前提是配置了上级代理)访问网站如果访问的网站没有被屏蔽,为了加速访问,代理会直接访问网站,不使用上级代理。
域名黑白名单,更加自由的控制网站的访问方式。
跨平台性,无论你是widows,linux,还是mac,甚至是树莓派,都可以很好的运行proxy。
多协议支持,支持HTTP(S),TCP,UDP,Websocket,SOCKS5代理。
TCP/UDP端口转发。
支持内网穿透,协议支持TCP和UDP。
SSH中转,HTTP(S),SOCKS5代理支持SSH中转,上级Linux服务器不需要任何服务端,本地一个proxy即可开心上网。
KCP协议支持,HTTP(S),SOCKS5代理支持KCP协议传输数据,降低延迟,提升浏览体验.
集成外部API,HTTP(S),SOCKS5代理认证功能可以与外部HTTP API集成,可以方便的通过外部系统控制代理用户。
反向代理,支持直接把域名解析到proxy监听的ip,然后proxy就会帮你代理访问需要访问的HTTP(S)网站。
透明HTTP(S)代理,配合iptables,在网关直接把出去的80,443方向的流量转发到proxy,就能实现无感知的智能路由器代理。
协议转换,可以把已经存在的HTTP(S)或SOCKS5代理转换为一个端口同时支持HTTP(S)和SOCKS5代理,转换后的SOCKS5代理不支持UDP功能,同时支持强大的级联认证功能。
自定义底层加密传输,http(s)\sps\socks代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,除此之外还支持在tls和kcp之后进行自定义加密,也就是说自定义加密和tls|kcp是可以联合使用的,内部采用AES256加密,使用的时候只需要自己定义一个密码即可。
底层压缩高效传输,http(s)\sps\socks代理在tcp之上可以通过自定义加密和tls标准加密以及kcp协议加密tcp数据,在加密之后还可以对数据进行压缩,也就是说压缩功能和自定义加密和tls|kcp是可以联合使用的。
安全的DNS代理,可以通过本地的proxy提供的DNS代理服务器与上级代理加密通讯实现安全防污染的DNS查询。
Why need these?
当由于安全因素或者限制,我们不能顺畅的访问我们在其它地方的服务,我们可以通过多个相连的proxy节点建立起一个安全的隧道,顺畅的访问我们的服务.
微信接口本地开发,方便调试.
远程访问内网机器.
和小伙伴一起玩局域网游戏.
以前只能在局域网玩的,现在可以在任何地方玩.
替代圣剑内网通,显IP内网通,花生壳之类的工具.
先找到你自己机器的内网地址,打开cmd,输入ipconfig,查看一下IPv4地址就是你的内网IP,再登录路由器找到虚拟服务器,填写你的内网ip地址,内网端口和外网端口根据你的实际需求写,协议类型一般写all就行!标签(空格分隔): 开发工具 前端
[toc]
前端开发,有时候需要给外网的测试人员浏览,此时若没有专门的测试服务器,那么使用内网穿透就是最简便通用的方式了。一个常见的选择就是 ngrok 。 也有 frp
ngrok官网
本地客户端跑起,搭建内网端口隧道给外网服务器,用户访问外网服务器对应地址,自动映射到本地对应地址。
这个方案很简单,也很慢,超慢,无法忍受的慢。
官网教程参看 https://github.com/inconshreveable/ngrok/blob/master/docs/SELFHOSTING.md
从零搭建参看, https://morongs.github.io/2016/12/28/dajian-ngrok/
已经写好的搭建脚本,参看 https://www.jianshu.com/p/b81bb6a3c0b9
如果脚本安装失败,可能是有些依赖没有,例如 apt-get
如果脚本失败,可能是依赖没装好,一般就是 go 没装,试下下面
安装 go
如果没有 apt-get yum,使用下面
按教程的做法是这样的
开启服务后,服务端报错 Failed to read message: remote error: bad certificate , 客户端端报错 x509: cannot validate certificate for xx.xx.xx.xx because it doesn't contain any IP SANs
搜索客户端报错,按 此文解决 ,在最后一句生成证书的命令前加上以下命令,就解决了
ngrok 客户端会自动生成一个随机子域名或者用户自定义一个,总之无论如何都会有一个域名,这就会导致 ip 域名无效, 例如 http://92832de0.1.1.1.1 ->localhost:80 , 解决办法就是改源码,去掉随机生成的 subdomain
删掉 %x. rand.Int31() , 以及该文件第一行引入的 math/rand ,重新编译出服务端与客户端即可。这样不加 -subdomain 选项就不会有子域名
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)