在线自动生成ngrok内网穿透|内网端口映射|内网转公网
什么是内网穿透

内网穿透是指将局域网内的计算机与公网(一般是固定IP)计算机通过端口进行连接,访问公网计算时将请求转发给内网计算机,达到从公网访问内网机器的目的。目前业界普遍使用的是Ngrok。

Ngrok典型应用场景

以下常用软件都可以使用ngrok实现穿透

在线生成Ngrok服务端与客户端
  • 填写域名或IP(请确认无误,否则客户端连接时会提示证书不匹配)
  • 选择服务端和客户端(必须同批次生成,分两次生成的服务端与客户不能相互链接)
  • 支付宝扫码付款
  • 系统处理中(处理时长约1~2分钟,请勿关闭浏览器)
  • 下载生成结果(Ngrok服务端与客户端)
域名或IP
输入指向Ngrok服务端机器的域名,如youdomain.com,如果是云服务一定要备案,否则会被拦截云服务商。如果没有域名可输入服务端IP
相同批次生成的客户端与服务端会生成了内置配对的安全证书,可安全通信。不同批次生成的客户端和服务端相互通信会失败。
所以多个客户端连接同一服务端时,客户端需复选多种平台,服务端同理。
 下载前,必须把下面的目录说明和Ngrok内网穿透配置教程看完再下载
下载文件目录说明
├── ngrok.cfg                客户端配置文件示例,请根据实际情况修改,内有修改说明
├── darwin_amd64             MAC平台 64位系统
│   ├── ngrok   客户端
│   └── ngrokd  服务端
├── linux_386                Linux平台 32位系统
│   ├── ngrok 客户端
│   └── ngrokd 服务端
├── linux_arm                ARM平台
│   ├── ngrok 客户端
│   └── ngrokd 服务端
├── ngrok                   Linux平台 64位系统  客户端
├── ngrokd                  Linux平台 64位系统  服务端
├── windows_386             Windows平台 32位系统
│   ├── ngrokd.exe 服务端
│   └── ngrok.exe 客户端
└── windows_amd64           Windows平台 64位系统
    ├── ngrokd.exe 服务端
    └── ngrok.exe 客户端
Ngrok内网穿透配置教程 - 服务端(Server)配置

以常用的CentOS7.9为例部署Ngrok Server。

Ngrok Server文件

/usr/local/ngrok/ngrokd

Ngrok Server启动命令

/usr/local/ngrok/ngrokd -domain=youdomain.com -httpAddr=:8000 -httpsAddr=:8443  -tunnelAddr=:4443 -log=/usr/local/ngrok/ngrok.log -log-level=INFO

如果上面输入的是IP地址,要去掉-domain参数。示例中4443端口是服务端使用的端口,客户端请求此端口与服务端建立隧道连接。也可以更换为其它端口数字。

CentOS防火墙需要放行4443端口(注意:云服务器如阿里云、腾讯云还要在安全组或防火墙中放行4443端口),这个端口接受来自Ngrok Client的连接。

上线环境推荐使用宝塔守护进程管理器管理服务端进程,这样会随系统自动启动ngrokd服务端,如下图

如果使用Windows作为Ngrok Server,则在CMD下运行ngrokd.exe,参数和Linux下的参数相同

Ngrok内网穿透配置教程 - 客户端(Client)配置

同样以常用的CentOS7.9为例部署Ngrok Client。

Ngrok Client文件

/usr/local/ngrok/ngrok

Ngrok Client配置文件及内容

/usr/local/ngrok/ngrok.cfg
server_addr: "youdomain.com:4443"
trust_host_root_certs: false
tunnels:
  mysql:
    remote_port: 3307
    proto:
      tcp: "127.0.0.1:3306"
  nginx:
    remote_port: 81
    proto:
      tcp: "127.0.0.1:80"
  ssh:
    remote_port: 23
    proto:
      tcp: "127.0.0.1:22"

      注意:
      上面三个端口映射配置是示例,请根据实际情况修改成自己,如果只作一个端口映射,只留一个即可
      remote_port是服务端的端口,比如ssh,意思是客户端的22端口映射到了服务端的23端口,这样就可以通过 ssh root@youdomain -p 23 登录到客户端
      youdomain.com要替换成自己的域名或IP,域名时要解析到服务端,如果是阿里云等公有云时域名一定要备案才可以
      4443端口是服务端的监听端口,如果服务端使用其它端口,这里也要同步修改。
      该文件放到客户端ngrok或ngrok.exe同级目录下
      客户端部署时最后这几行提示文本一定要删除
    

上面示例是以MySQL/Nginx/SSH为例,将本地80端口映射到服务器中的81端口,将本地3306端口映射到服务器的3307端口,将本地22端口映射到服务器的23端口。这样访问服务器的3307端口时实际访问的是内网中的3306,但对外网而言服务器就是一台MySQL服务器。同样的因为81端口作为映射,服务器同样是一台HTTP服务器。注意:服务端防火墙应该放行3307、81、23端口。如果服务端和客户使用同样的端口,如服务端的3306对应客户端的3306端口,这时需要服务端不要启动MySQL服务或启动占用3306端口的服务。

Ngrok Client启动命令

/usr/local/ngrok/ngrok -config=/usr/local/ngrok/ngrok.cfg -log=/usr/local/ngrok/ngrok.log  start mysql nginx ssh

如果使用Windows作为Ngrok Client,则在CMD下以管理员身份运行ngrok.exe,参数和Linux下的参数相同

当客户端连接成功时,通道连接状态会变为online,显示如下:

    Tunnel Status                 online
Version                       1.7/1.7
Forwarding                    tcp://youdomain.com:3307 -> 127.0.0.1:3306
Forwarding                    tcp://youdomain.com:81 -> 127.0.0.1:80
Forwarding                    tcp://youdomain.com:23 -> 127.0.0.1:22
Web Interface                 127.0.0.1:4040
# Conn                        0
Avg Conn Time                 0.00ms

如果通道连接状态Tunnel Status不是online时,请检测服务端ngrokd服务是否启动、服务端4443端口是否开放、客户端配置文件是否正确。

如果客户端测试连接成功,最后线上部署时,推荐使用宝塔守护进程管理器管理客户端的ngrok进程,这样客户端会随机器启动自动连接服务端。

重要事情说三遍! 重要事情说三遍! 重要事情说三遍!

部署不成功100%是由于下面原因

1. ngrok部署需要一点技术基础,小白不要下载。

2. 下载时域名或IP填错了(首尾,中间不能有空格等无效字符)。

3. 下载时选的环境和实际部署环境不一致。

4. 部署时必须使用下载时填写的域名(如果填的IP,必须使用这个IP),不能更换域名或IP。客户端只能与同批次下载的服务端链接。

5. 服务端必须开放4443端口,阿里云腾讯云等云服务器除了机器本身有防火墙要开放外,还需要在服务商安全组里也要放行这个端口。

6. 4443端口可以自己更换,如果更换 ,服务端启动参数和客户端配置参数及防火墙都要修改。

7. 如果客户端启动后显示链接状态只有显示online是成功,其它状态(最多的是reconnecting)都是失败,说明客户端未能与服务端成功创建通道链接,可以在客户端使用telnet命令排查4443端口是否开放。

 

使用telnet命令后,如果长时间显示(超2秒)链接中(如下显示),说明服务端未开放4443端口(或ngrok服务端未启动)

C:\Users\Administrator>telnet 50.180.198.206 4443
正在连接50.180.198.206...

使用ps查看ngrokd服务进程是否成功运行,下图是成功运行的显示结果

[root@C202411254874951 ~]# ps aux|grep ngrokd
root       96947  0.0  0.9 1093212 18260 ?       Sl   Feb14   2:01 /usr/ngrok/ngrokd -domain=mydomain.com -httpAddr=:8000 -httpsAddr=:8443 -tunnelAddr=:4443 -log=./ngrok.log -log-level=INFO
root      345707  0.0  0.0 221928  1040 pts/0    S+   09:37   0:00 grep --color=auto ngrokd

咨询收费!收费!收费!

使用问题
点击这里
联系客服

 联系与反馈