Windows搭建ngrok服务器、Linux搭建ngrok服务器、支持用户管理

来源:互联网 发布:还珠格格3知画圆房 编辑:程序博客网 时间:2024/05/19 12:16

微信公众号、支付宝支付等开发要求有公网(外网)服务器。每次调试时,上传代码到服务器很不方便。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