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

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

Ngrok典型应用场景

使用TCP协议的通信,如:以下常用软件都可以使用ngrok实现穿透

在线生成Ngrok服务端与客户端
域名或IP
输入指向Ngrok服务端机器的域名,如youdomain.com,如果是云服务一定要备案,否则会被拦截云服务商。如果没有域名可输入服务端IP
相同批次生成的客户端与服务端会生成了内置配对的安全证书,可安全通信。不同批次生成的客户端和服务端相互通信会失败。
所以多个客户端连接同一服务端时,客户端需复选多种平台,服务端同理。
下载文件目录说明
├── 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进程,这样客户端会随机器启动自动连接服务端。

 联系与反馈