内网穿透是指将局域网内的计算机与公网(一般是固定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 客户端
以常用的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下的参数相同
同样以常用的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
咨询收费!收费!收费!
使用问题
点击这里
联系客服
联系与反馈