你的位置:首页 > 互联网IT
ngrok,ngrok内网穿透,ngrok穿透,ngrok映射,ngrok_Windows服务器端搭建,ngrok_Windows客户端搭建,ngrok搭建,ngrok代理,ngrok教程,ngrok
ngrok,ngrok内网穿透,ngrok穿透,ngrok映射,ngrok_Windows服务器端搭建,ngrok_Windows客户端搭建,ngrok搭建,ngrok代理,ngrok教程,ngrok服务器端,ngrok客户端,ngrok转发,ngrok端口映射,ngrok端口穿透
系统:Windows/linux
软件:ngrok
软件下载:
windows服务端+客户端:ngrok_Windows版本.rar
linux服务端+客户端:ngrok_linux版本.rar
ngrok_Windows服务器端启动说明
新建:服务器端启动.bat
ngrokd_x64.exe -domain="www.badiu.com" -httpAddr=":801" -httpsAddr=":802" -tunnelAddr=":7000"
说明:
程序 域名 http端口:801 https端口:802 客户端连接端口:7000
使用这个-domain参数就是对应你之前解析到服务器的二级域名ngrok和三级域名*.ngrok的,如果你想对应一级域名,这里可以用"domain.com"替换"ngrok.domain.com"
带证书启动设置
新建:服务器端启动.bat
ngrokd_x64.exe -tlsKey="snakeoil.key" -tlsCrt="snakeoil.crt" -domain="www.badiu.com" -httpAddr=":801" -httpsAddr=":802" -tunnelAddr=":7000"
说明:
程序 证书秘钥 证书 域名 http端口:801 https端口:802 客户端连接端口:7000
使用这个-domain参数就是对应你之前解析到服务器的二级域名ngrok和三级域名*.ngrok的,如果你想对应一级域名,这里可以用"domain.com"替换"ngrok.domain.com"
ngrok_Windows客户端端启动说明
新建:客户端启动.bat
ngrok_x64.exe -config=config.conf start a web2 ssh
说明:
程序 配置文件config.conf 启动配置文件名称:a web2 ssh
config.conf 配置
server_addr: "www.baidu.com:7000"
tunnels:
web1:
subdomain: "a"
proto:
http: 127.0.0.1:80
web2:
hostname: "www.ngrok.cc"
proto:
https: 192.168.1.156:443
ssh:
remote_port: 10011
proto:
tcp: 192.168.1.1:22
config.conf 说明:
server_addr: "www.baidu.com:7000" #//服务器IP/域名:端口
tunnels:
web1: #//名称1(不要重复)
subdomain: "a" #//二级域名
proto:
http: 127.0.0.1:80 #//http-web端口
web2: #//名称2(不要重复)
hostname: "www.ngrok.cc" #//域名
proto:
https: 192.168.1.156:443 #//https-web端口
ssh: #//名称3(不要重复)
remote_port: 10011 #//服务器开放端口TCP
proto:
tcp: 192.168.1.1:22 #//本地/远程IP域名:端口
ngrok_linux服务器端启动说明
上传服务器端:ngrokd_x64
加入权限:chmod +x ngrokd_x64
服务器端启动:
/root/ngrok/ngrokd_x64 -domain="www.baidu.com" -httpAddr=":801" -httpsAddr=":802" -tunnelAddr=":7000"
说明:
程序 域名 http端口:801 https端口:802 客户端连接端口:7000
后台运行:后台运行不能使用 & ,也不知道原因。
nohup /root/ngrok/ngrokd_x64 -domain="www.baidu.com" -httpAddr=":801" -httpsAddr=":802" -tunnelAddr=":7000"
带证书服务器端启动:
/root/ngrok/ngrokd_x64 -tlsKey=/root/ngrok/server.key -tlsCrt=/root/ngrok/server.crt -
domain="www.baidu.com" -httpAddr=":801" -httpsAddr=":802" -tunnelAddr=":7000"
说明:
程序 证书秘钥 证书 域名 http端口:801 https端口:802 客户端连接端口:7000
使用这个-domain参数就是对应你之前解析到服务器的二级域名ngrok和三级域名*.ngrok的,如果你想对应一级域名,这里可以用"domain.com"替换"ngrok.domain.com"
结束ngrokd_x64
killall -I ngrokd_x64
ngrok_linux客户端端启动说明
上传客户端:ngrok_x64
加入权限:chmod +x ngrok_x64
客户端启动:
同目录下启动
./ngrok_x64 -config=./config.conf start a web2 ssh
说明:
程序 配置文件config.conf 启动配置文件名称:a web2 ssh
后台运行,后台运行不能使用 & ,也不知道原因。
nohup ./ngrok_x64 -config=./ngrok.cfg start a web2 ssh
结束ngrok_x64
killall -I ngrok_x64
config.conf 配置
server_addr: "www.baidu.com:7000"
tunnels:
web1:
subdomain: "a"
proto:
http: 127.0.0.1:80
web2:
hostname: "www.ngrok.cc"
proto:
https: 192.168.1.156:443
ssh:
remote_port: 10011
proto:
tcp: 192.168.1.1:22
config.conf 说明:
server_addr: "www.baidu.com:7000" #//服务器IP/域名:端口
tunnels:
web1: #//名称1(不要重复)
subdomain: "a" #//二级域名
proto:
http: 127.0.0.1:80 #//http-web端口
web2: #//名称2(不要重复)
hostname: "www.ngrok.cc" #//域名
proto:
https: 192.168.1.156:443 #//https-web端口
ssh: #//名称3(不要重复)
remote_port: 10011 #//服务器开放端口TCP
proto:
tcp: 192.168.1.1:22 #//本地/远程IP域名:端口
服务端命令
--help 查看帮助
-domain 域名,已去掉证书验证可以使用ip,仅作tcp转发可以使用ip
-httpAddr HTTP连接,空字符串禁用 (default ":80")
-httpsAddr HTTPS连接,空字符串禁用 (default ":443")
-log 写消息记录到该文件。 “标准输出”和“无”具有特殊意义 (default "stdout")
-log-level 消息的级别记录。其中之一:DEBUG,INFO,WARNING,ERROR (default "DEBUG")
-tlsCrt TLS证书文件路径
-tlsKey TLS key证书文件路径
-tunnelAddr 公共广播监听ngrok客户端 (default ":4443")
客户端命令
--help 查看帮助
-config 配置文件路面
-hostname 自定义域名
-log 日志的路径,非必须
-log-level 日志级别:DEBUG,INFO,WARNING,ERROR (default "DEBUG")
-proto 隧道协议 http、https、tcp、默认为http和https
-server_addr 服务器地址
-subdomain 子域名,当服务器配有域名启动的时候带上固定服务器分配的前缀域名,对应域名在服务端启动的-domain
1、服务端下载地址
2、客户端下载地址
参考文章:https://www.sunnyos.com/article-show-74.html
http://www.sunnyos.com/article-show-61.html
https://www.cxyzjd.com/article/weixin_41186948/83189598
https://www.cxyzjd.com/article/qq_41357211/100901115
部署服务器端主程序
5.1、部署到Windows Server服务器
将生成的ngrokd.exe文件复制到windows服务器中,当然如果要部署到linux中也是没有问题的。
这里我将ngrokd.exe放在c:\grokeServer目录下:
为了方便,我编写了一个批处理文件:ngrokserver2.bat
ngrokd.exe -tlsKey="snakeoil.key" -tlsCrt="snakeoil.crt" -domain="ngrok.你的域名.com" -httpAddr=":801" -httpsAddr=":802"
点击批处理运行结果如下:
绑定的域名换成自己的域名,http使用801端口,https使用802端口,供客户端连接的管道端口设置为4443端口,必须前面的域名相同。
为了安全许多服务器会将端口屏蔽,我使用的是ECS服务器,默认801,802都是关闭的,需要手动开启,在阿里云的后台添加开放的端口就可了:
5.2、一键部署ngrok服务器(CentOS、Debian、Ubuntu)
如果编译生成ngrok的源代码生成应用太麻烦,你可以选择网友写的工具,支持一键部署到安装平台:CentOS、Debian、Ubuntu。
https://github.com/clangcn/ngrok-one-key-install
六、部署ngrok客户端
这里的客户端就是您的web应用程序所运行的主机,将ubuntu生成的ngrok.exe客户端应用复制到您的系统中:
添加配置文件ngrok.cfg:
server_addr: "ngrok.你的域名.com:4443" trust_host_root_certs: false
添加批处理start.bat,如果只运行一次直接在命令行下输入命令也是一样的效果,内容如下:
ngrok.exe -subdomain kyt -config=ngrok.cfg 8987
其中8987为端口号,运行成功的结果如下所示:
看到这个界面时说明已成功了。
Ngrok一个端口穿透运行
这些步骤完成了,就可以开始运行程序了。
5.1 运行服务器端
首先运行服务器端,需要带上相应的参数:
/usr/local/ngrok/bin/ngrokd -tlsKey=/usr/local/ngrok/server.key -tlsCrt=/usr/local/ngrok/server.crt -domain="ngrok.domain.com"
使用这个-domain参数就是对应你之前解析到服务器的二级域名ngrok和三级域名*.ngrok的,如果你想对应一级域名,这里可以用"domain.com"替换"ngrok.domain.com"。
小贴示:很多说明的文章里会带上端口的参数,其实可以不用填,在客户端运行时填写端口参数就可以了
5.2 运行客户端
运行客户端稍有点复杂,有几个步骤要做。
5.2.1 生成参数文件
ngrok要穿透的域名和端口都需要通过参数文件表达,先来个最简单的吧,新建ngrok.cfg文件:
nano ngrok.cfg
文件要确保和之前生成的客户端执行文件在一个文件夹内。编辑文件内容:
server_addr: "ngrok.domain.com:4443" trust_host_root_certs: false
保存退出。ngrok.domain.com
就是你的域名。
如果是在windows下,可以使用最简单的记事本新建,文件内容完全一致。编辑完成保存的时候一定要记得选择Utf-8编码方式,保存类型选择 所有文件*.*
,否则执行的时候会出错。
5.2.2 执行客户端程序
./ngrok -config=./ngrok.cfg -subdomain=域名前缀 80
确保在ngrok文件夹内,域名前缀
就是你需要访问的域名的前缀,比如www.domain.com
中的www
,最后的80就是你要穿透的端口号。
在windows下使用命令:
ngrok -config=ngrok.cfg -subdomain 域名前缀 80
这里的域名前缀和上面讲的是同一个内容。
运行成功后,命令窗口就会显示一个文字UI界面。到这里,我在内网的树莓派建立的Web程序宝塔Linux面板
就可以正常访问了,端口号80是默认端口,可以不用www.domain.com:80
这样输入,如果你用的是其他端口,就需要在域名后输入:端口号
,比如www.domain.com:8080
。
小贴示:到这个步骤,你已经成功设置一个域名的内网穿透了。
6. Ngrok多个端口穿透运行
只穿透一个端口有点太浪费了,我决定多穿透几个,于是继续搜索文章,又让我找到了学习的对象,开始下一个步骤。
小贴示:程序的编译和服务器端的运行都不用改变,只需要改变客户端命令即可。
6.1 运行多个端口穿透的客户端参数
多个端口和一个端口的穿透最大的区别就在于ngrok.cfg
这个文件里的内容:
server_addr: "ngrok.domain.com:4443" trust_host_root_certs: false tunnels: tunnel1: subdomain: 域名前缀1 proto: http: 80 forex: subdomain: 域名前缀2 proto: http: 8080 mysql: remote_port: 3306 proto: tcp: 3306
这里要介绍一个之前没有出现的概念——隧道 tunnels
,其实这才是Ngrok的核心,我还处于一知半解的状态,大家可以将它理解为你想要穿透的端口号,一个端口就需要一条tunnel
,同时可以有多条隧道运行。
6.2 执行多隧道客户端程序
这条命令多了几个参数:
./ngrok -config ngrok.cfg start tunnel1 forex mysql
多了start参数,以及三条隧道的名称。这其中tunnel1
和forex
都是http的穿透,适合Web应用程序,比如网站服务程序。而mysql
这条隧道是tcp协议穿透的,比如数据库连接。这里需要注意remote_port: 3306
这一行,这是为默认地址配置端口号,如果你不填写后面的数字,系统会自动分配一个,这会造成穿透失败,需要直接配置成和你的要穿透的端口一致的状态。
7. 后台运行和控制
前面的命令我都是通过SSH连接执行的,只要关闭SSH连接窗口,命令就被终止了,所以需要后台运行程序。以下内容未在windows中尝试,如果有需要的请自行搜索。如果方便,也可以发邮件告诉我进行补充ixujue@vip.qq.com
7.1 服务器端后台运行
这里我们要用到nohup
命令和&
的组合:
nohup /usr/local/ngrok/bin/ngrokd -tlsKey=/usr/local/ngrok/server.key -tlsCrt=/usr/local/ngrok/server.crt -domain="ngrok.domain.com" &
运行后会提示nohup ignoring input and appending output to ‘nohup.out’
,这是代表执行结果记录日志文件不可写,重定向到nohup.out
这个文件了,说明已经执行成功了。运行成功后,窗口不会显示任何内容,之前执行的过程都隐藏了,这和使用了&
命令有关。
7.2 客户端后台运行
客户端后台运行不能使用&
命令,会直接出错,我不明白其中的原因。
执行一个端口穿透的命令:
nohup ./ngrok -config=./ngrok.cfg -subdomain=域名前缀 80
执行多个端口穿透的命令:
nohup ./ngrok -config ngrok.cfg start tunnel1 forex mysql
执行完成后,可以关闭窗口也不会终止服务。
7.3 查询后台运行程序
重新使用SSH连接后,无论是服务器端还是客户端程序的运行情况都不会显示,我们无法确认是否正常运行,所以需要查看后台运行的程序:
ps -aux
运行这个命令就可以显示后台所有的程序,这里是三个参数的集合-a -u -x
,具体哪个是什么意思,大家可以去搜索学习。
显示的结果中注意看最右端,会看到/usr/local/ngrok/...
这样一行,这就是在后台运行的程序了。
7.4 关闭后台运行程序
关闭后台运行的程序需要用到kill
命令:
kill -9 程序ID
这个程序ID要在ps -aux
显示的结果中对应行左边查看,第一列是命令的用户,第二列就是程序ID。运行该命令就会关闭后台运行的程序。
8. 小结
到这里,Ngrok就可以为你正常提供服务了。这两天时间,我走了太多的弯路,重置过4次阿里云服务器系统盘。还好现在网上的相关资料非常丰富,让我可以尽情学习,谢谢各位前辈大公无私的奉献,这也是让我想要把自己的经验进行分享的最大动力。
想要在整体过程中做到知其然亦知其所以然还是比较困难的,除非你对Linux和Ngrok两者都非常熟悉,以及网络端口相关的知识。所以在这种情况下,我是追求能够正常运行,然后再逐渐学习相关内容,在实践中学习。
9. 命令参考
所有的操作我都是在root账号下进行的。
最后我把整个过程中我使用到的Linux命令都列出来,供大家搜索参考学习。
命令 | 用途 |
---|---|
cd 目录位置 | 变更目录,/ 代表根目录。 |
mkdir 文件夹名 | 创建文件夹。 |
apt-get | Debian安装软件命令。 |
nano | 一个字符终端的文本编辑器,简单易用。 |
nohup | 让进程后台运行,与SSH终端连接无关。 |
& | 让进程后台运行,SSH终端连接断开失效。 |
cp | 复制文件。 |
ps | 查看后台运行文件。 |
kill | 终止后台运行文件。 |
scp | 远程复制文件。 |
服务端命令
--help 查看帮助
-domain 域名,已去掉证书验证可以使用ip,仅作tcp转发可以使用ip
-httpAddr HTTP连接,空字符串禁用 (default ":80")
-httpsAddr HTTPS连接,空字符串禁用 (default ":443")
-log 写消息记录到该文件。 “标准输出”和“无”具有特殊意义 (default "stdout")
-log-level 消息的级别记录。其中之一:DEBUG,INFO,WARNING,ERROR (default "DEBUG")
-tlsCrt TLS证书文件路径
-tlsKey TLS key证书文件路径
-tunnelAddr 公共广播监听ngrok客户端 (default ":4443")
Linux、MAC服务端启动
./ngrokd --domain="xx.xxx.xx.xx" 默认方式setsid ./ngrokd --domain="xx.xxx.xx.xx" 后台运行
Windows服务端启动
打开cmd命令行提示符窗口,通过命令行进入到ngrokd.exe所在的目录,输入以下命令
ngrokd.exe --domain="xx.xxx.xx.xx" 默认方式
2、客户端命令
--help 查看帮助
-config 配置文件路面
-hostname 自定义域名
-log 日志的路径,非必须
-log-level 日志级别:DEBUG,INFO,WARNING,ERROR (default "DEBUG")
-proto 隧道协议 http、https、tcp、默认为http和https
-server_addr 服务器地址
-subdomain 子域名,当服务器配有域名启动的时候带上固定服务器分配的前缀域名,对应域名在服务端启动的-domain
配置文件的使用方法详情可以观看:《Sunng-ngrok的最新使用方法》,里面有配置文件每一项详情介绍
Linux、Mac OS、Windows配置文件,下面格式保存为ngrok.cfg(可以其他名字,自己定义)
server_addr: "server.ngrok.cc:4443" tunnels: sunny: subdomain: "sunnyos" auth: "sunny:admin1993" proto: http: 192.168.1.108:80 sunny1: subdomain: "sunnyos1" proto: http: 192.168.1.104:80 ssh: remote_port: 50000 proto: tcp: 192.168.1.120:22
配置文件启动方式
Linux、Mac OS命令
./ngrok -config=./ngrok.cfg start sunny 启动配置文件里面的某一个隧道
Windows命令,需要先进入到客户端所在的目录
ngrok.exe -config=ngrok.cfg start sunny1 启动配置文件里面的某一个隧道
为了命令行使用方便更容易指向服务器,新增了一个 server_addr 选项,可一条命令进行全部配置的启动,下面是不需要配置文件的启动方式
Linux、Mac OS启动
./ngrok -server_addr=ip:4443 -proto=tcp 22 这样映射本地的22端口,远程端口将由服务器分配./ngrok -server_addr=ip:4443 -subdomain=abc -proto=http 80 映射前置域名为abc的域名到本地的80端口
Windows启动
ngrok.exe -server_addr=ip:4443 -proto=tcp 22 这样映射本地的22端口,远程端口将由服务器分配ngrok.exe -server_addr=ip:4443 -subdomain=abc -proto=http 80 映射前置域名为abc的域名到本地的80端口
发表评论: