微信公众号、支付宝支付等开发要求有公网(外网)服务器。每次调试时,上传代码到服务器很不方便。ngrok很好的解决了这一问题。网上的文章大多是讲怎么在Linux下搭建ngrok服务器。其实依靠云计算的强大计算能力,可以实现快速编译制作windows操作系统下服务器端程序,也可以实现linux操作系统下的服务器端程序。目前测试支持 Windows XP/ Windows 7 (win7)/Windows Server 2008/Windows Server 2012,各类Windows 32位,64位操作系统。同时支持Linux系列服务器,Ubuntu Linux/Red Hat Linux/CentOS,Linux 32位,Linux 64位,Linux arm系列。访问网址http://www.hongzaosoft.cn/downloadngrok.html 即可制作下载 windows、Linux版本、Mac OS下的ngrok服务端和客户端。
生成好的程序是绿色免安装版,直接拷贝就可以用,连脚本都配置好了。
注意:使用ngrok必须使用安全证书,否则其他人使用端口扫描工具,扫到你的ngrok端口,可以直接连接到你的服务器。ngrok使用证书验证来保障通讯安全,某些二次开发的版本去掉了这一功能,在安全上有很大缺陷。而http://www.hongzaosoft.cn/downloadngrok.html 运用云计算的强大力量,快速为您生成用您的域名定制的证书,充分保障您服务器的安全。ngrok使用RSA非对称加密算法加密数据,数字证书签名,请不要使用去掉证书验证的版本。
生成的ngrok程序可选用户管理功能,在安全证书的基础上,连接时需要验证用户名和密码。针对Http隧道可分配子域名给用户,防止用户越权使用子域名;针对Tcp隧道可指定用户可以使用的端口号,防止用户越权使用端口。此功能对分享给多个好友,或者有偿给其他人使用时非常方便,在服务器端做用户权限验证,把您服务器的带宽充分利用起来。
一、搭建前准备条件:
1.如果是做tcp内网穿透,只需要公网ip,或者域名,域名可以不备案,但必须确保被解析到你的服务器公网ip上。
如果是做http穿透,必须要有域名,并且通常你的服务器提供商会要求域名备过案。
通常我们用自己的域名例如hongzaosoft.cn来给ngrok服务端用,如果被占用,也可以准备个二级域名比如ngrok.hongzaosoft.cn来专门给ngrok用,这个域名在后面编译服务器端会用到,配置文件里也必须与这个域名一致,否则连不上;此域名一旦生成,配置文件中不可更改。
2.防火墙准备:请开放以下端口:
4443:ngrok服务端默认用到的端口,此端口可以在配置文件中更换。
80:ngrok服务端http协议用到的端口,此端口可以在配置文件中更换。
还有您指定的remote远程服务器端口,例如将服务器的tcp端口25565转发到本地内网25565端口,则远程服务器必须开放25565端口,本地客户机开放25565端口。
怎么开放防火墙端口,以我的centos为例
#开放 8080 端
iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
service iptables save
客户端也要放开对应的端口,一般客户端安全性要求不高,调试时可以直接关掉防火墙
windows开放防火墙有图形化界面,不赘述。
二、编译服务器端、客户端软件
自己编译需下载安装Git、Go环境、编译ngrok、为域名生成证书。
比较复杂,要了解的东西比较多,这里可以借助红枣软件提供的生成服务器端、客户端软件的功能,避免繁杂的工作。自己弄下来得大半天功夫,一个程序员一天都值几百大洋,不如直接通过红枣软件提供的服务生成来的好。
图形化界面,通俗易懂;编译好软件的同时,生成服务端和客户端启动脚本。
服务器端配置:
如果您没有域名,或者不想用域名,也可以填您的公网ip
如果您打算将ngrok分享给好友用,或者有偿提供给其他人用,推荐勾选用户管理功能,
1.选择“支持用户管理、授权可用子域名”,则您的服务端支持添加用户,并给用户授权可用子域名(单个或多个),之后客户端连接时,必须验证用户名和密码,使用http隧道时,子域名必须在授权的里面;如果没有勾选2选项,则tcp隧道端口可以自由选择;
2.在选择1的基础上,可选择“支持授权用户端口号”,则您的服务端支持给用户授权可用tcp外网端口号(单个或多个),之后客户端连接使用tcp隧道,使用的外网端口号必须在授权的端口号列表内。
3.选择您需要管理的用户规模。
客户端配置:
这里配置一个http转发示例:讲内网tomcat的8080端口使用wx.hongzaosoft.cn这个域名来访问
那么访问http://wx.hongzaosoft.cn就可以访问到http://127.0.0.1:8080的效果。
再配置一个tcp转发示例:
比如转发我的世界游戏用的25565端口到ngrok服务器的25565端口,则可如下配置
点提交后,会跳转到ngrok下载页面。
下载得到的文件如下:
服务端的启动脚本《启动ngrok服务端.bat》内容如下:
ngrokd -tlsKey="server.key" -tlsCrt="server.crt" -domain=hongzaosoft.cn -tunnelAddr=":4443" -httpAddr=":80"
其中-tunnelAddr指定ngrok服务器使用的端口
-httpAddr HTTP连接端口号,空字符串禁用 (default ":80")
客户端与http隧道相关的两个配置文件《ngrok.cfg》、《启动子域名wx.bat》
《ngrok.cfg》关键内容
server_addr: "hongzaosoft.cn:4443"(配置的服务器地址)
trust_host_root_certs: false
与tcp隧道相关的两个配置文件《ngrok_tcp_25565.cfg》《启动端口25565.bat》
如果带用户管理和支持分配用户端口号,下载得到的文件如下:
服务端多了用户管理、子域名授权;端口管理的两个脚本。服务端的启动脚本《启动ngrok服务端.bat》内容如下:
ngrokd -tlsKey="server.key" -tlsCrt="server.crt" -domain=hongzaosoft.cn -tunnelAddr=":4443" -httpAddr=":80" -pass="serverpassword"
多了个-pass,指定的是ngrok服务端的管理密码,后面添加用户时要用到。
客户端与http隧道相关的两个配置文件《ngrok.cfg》、《启动子域名wx.bat》
《ngrok.cfg》关键内容
server_addr: "hongzaosoft.cn:4443"
trust_host_root_certs: false
inspect_addr: disabled
auth_token: username #这里填的是后面在服务端添加的ngrok用户名
password: "userpassword" #这里填的是后面在服务端添加的ngrok用户密码,注意引号不能少
《ngrok_tcp_25565.cfg》同样也比普通版的需要多配置 用户名和密码
生成的文件全部是绿色免安装,拷过去就可以用了。windows下双击bat文件,Linux下执行sh的shell脚本就可以了。
当然,也可以通过淘宝https://item.taobao.com/item.htm?id=550860319208来获取ngrok程序
三、服务器、客户端启动方法
以windows为例, 服务端目录结构如下:
.crt和.key文件就是数字证书,hongzaosoft文件是个加密文件,都是用来保障安全的,请认准有证书验证的ngrok。
双击运行《启动ngrok服务端.bat》这个bat文件,启动后界面
如果您生成时选择了支持用户管理功能,会多两个脚本《adduser(添加用户_设置用户密码_授权可使用的子域名).bat》《addTcpPort(将端口授权给某个用户).bat》
首先增加一个用户,这里以用户名username,密码userpassword,授权子域名 wx 为例,双击运行《adduser(添加用户_设置用户密码_授权可使用的子域名).bat》
注意:前面自动生成的cfg配置文件中,默认填的是用户名username,密码userpassword,这里为了把程序调通,请先增加这么一个用户。
1. 请输入您的ngrok管理密码,此密码为启动ngrokd服务端时指定的-pass参数值,初始密码为serverpassword
修改这个密码请在《启动ngrok服务端.bat》中更改-pass指定的参数,重启ngrok服务端生效。
2. 请输入您要添加的ngrok用户名(后面客户端的*.cfg文件中auth_token参数填的就是这里添加的用户名)
3. 请输入您要添加的ngrok用户密码(后面客户端的*.cfg文件中password参数填的就是这里添加的密码)
4. 请输入您要允许该ngrok用户使用的子域名,每个子域名需用双引号,单个子域名例如\"wx\" 多个子域名之间以逗号分隔,例如 \"blog\",\"shop\"
这里要注意,子域名前后必须加 \"
5. 成功后的状态为{'code': 'ok'},并且在C:\ngrokconfig\ng\ro目录中看到ngrok_添加的用户名 这个文件,否则请检查输入的参数
6. 至此在服务端已经添加了 用户名为username,密码为userpassword,授权子域名 wx.hongzaosoft.cn的 用户,此用户使用http隧道时将只能使用wx.hongzaosoft.cn这个子域名
接下来启动客户端。客户端目录结构如下:
.crt和.key文件就是数字证书,请认准有证书验证的ngrok。
如果要启动wx这个子域名的http内网穿透,双击《启动子域名wx.bat》就可以了,显示online的成功界面如下:
要启动tcp隧道转发25565端口,
如果您生成时选择了“支持授权用户端口号”,则需在服务器端做授权操作,服务端双击运行《addTcpPort(将端口授权给某个用户).bat》
双击运行《启动端口25565.bat》这个bat文件,就可以映射25565端口了,显示online表明成功。
如果要做其他tcp端口、http子域名的内网穿透,详细参见生成的软件中包含的文档。
四、Linux系统下的使用方法
Linux的使用方法也很简单,有写好的对应的shell脚本。
1. 将生成的服务端文件夹上传到您想放的位置,上传拷贝文件可以用sftp工具,比如winscp或者FileZilla
2. 进入到服务端所在文件夹,给ngrokd服务端程序、shell脚本加上可执行属性
chmod a+x ./ngrokd
chmod a+x ./start_ngrok_server.sh
3. 执行脚本启动服务端
./start_ngrok_server.sh
4. 如果客户端也是选的Linux系统,上传文件,进入到客户端所在文件夹,给ngrok程序、shell脚本加上可执行属性
chmod a+x ./ngrok
chmod a+x ./StartSubdomainwx.sh
chmod a+x ./StartPort25565.sh
5. 启动http隧道运行
./StartSubdomainwx.sh
启动tcp隧道运行
./StartPort25565.sh
五、使用过程中可能的疑问解答
见生成文件夹中的《ngrok服务器搭建过程问题集锦 》
《启动多端口指南》
软件的下载链接http://www.hongzaosoft.cn/downloadngrok.html