内网穿透是指将局域网内的计算机与公网(一般是固定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进程,这样客户端会随机器启动自动连接服务端。
使用问题
点击这里
联系客服
联系与反馈