我们常常会遇到需要将本地服务暴露到公网上使用的需求。比如在进行微信公众号、小程序开发,或者处理第三方支付接口回调等功能时,往往需要配置 webhook,而本地开发环境通常处于内网,外部网络无法直接访问。简单来说,就是让外边的人能访问到你本地的计算机,比如你电脑上有个网站,外边的人直接是访问不到的,这时候就需要用内网穿透软件。
内网本地网络应用提供外地直接连接访问,不需安装访问端就可以成功访问内网的所有网络服务,就和本地访问一样,可成功映射的服务包括:网站、ftp、3389远程桌面、sql数据库、我的世界跨地区游戏联机等,各种服务端如视频监控、OA、财务软件、CRM系统、ERP系统、金蝶、用友、速达、美萍、管家婆、新中大等,各种进销存软件、管理软件。在本地局域网的服务器上跑的所有端口应用,以及本地的打印机等网络硬件设备,都可以通过内网穿透技术应用,实现被外网访问到。
常见的内网穿透方式有如开源的ngrok和frp,界面化操作的nat123等方式。ngrok 作为一款强大开源内网穿透工具,能够帮助我们轻松实现内网让外地访问这一目标。下面我会详细介绍 无公网IP直接用ngrok 实现内网穿透外网访问,以及有自己公网主机搭建穿透服务的2种方案详细教程和具体使用步骤。如果是需要更为简单操作的,也可以考虑选择使用nat123来作为自己的内网穿透工具使用,nat123是一个非常老牌的内网穿透服务平台,这个对应官网里面就有很多实例教程,但由于nat123的体验版线路有所限制,较好访问使用一般需要升级更高级线路服务,所以这里对它就不多余介绍了,有需要的可以自行前往查看了解。
一、无公网IP使用 ngrok 实现内网穿透1、注册 ngrok 账号
访问 ngrok 官方网站ngrok.com。
可以使用 GitHub 或者 Google 账号进行登录。完成注册并登录之后,可以看到 Dashboard 中给出了使用的三个步骤。
2、下载 ngrok 客户端
进入官网的下载页面,官方清晰地给出了各个系统的安装方法。
本人比较推荐直接下载 ZIP 包,然后直接解压,这种方式最为迅速。根据自己的操作系统选择对应的软件,例如 Windows 系统选择 Windows 的安装包。
3、配置账户
获取 Authtoken:登录 Ngrok 控制台后,在个人设置或相关页面中找到 “Authtoken”。这是一个用于验证身份的密钥,Ngrok 通过它识别用户身份,确保合法使用服务。复制该 “Authtoken”,后续配置 Ngrok 时会用到。
配置 Authtoken:打开命令提示符(CMD),切换到 Ngrok 解压后的目录,例如输入 “cd C:ngrok”。然后执行命令 :
ngrok authtoken 2Yh...(Your Authtoken)
将方括号替换为实际的 Authtoken。执行此命令后,Ngrok 会将 Authtoken 保存到本地配置文件中,以便后续使用时自动验证身份。
4、启动内网穿透
假设本地运行了一个 Web 服务,监听在 8080 端口,现在要通过 Ngrok 将其暴露到公网。在命令提示符中执行 :
ngrok HTTP 8080
执行该命令后,Ngrok 会与 Ngrok 服务器建立连接,并为本地的 8080 端口生成一个公网访问地址,类似 “HTTPS://xxxx.ngrok-free.app”(xxxx 为随机生成的字符串)。
此时,任何人通过这个公网地址就可以访问本地运行在 8080 端口的服务。
进入后就可以看到你写的后端内容了。
二、有公网主机自己搭建ngrok内网穿透服务器ngrok是一个内网穿透的解决方案,它使得你本地的服务器可以被局域网外的公网访问,ngork有服务端和客户端,服务端运行在公网服务器,客户端运行在本地服务器ngrok服务端会建立http和https服务,默认端口80/443,以及供ngrok客户端连接的服务,默认端口4443。
1,安装git和go以及其它依赖
wget https://studygolang.com/dl/golang/go1.11.linux-amd64.tar.gz
tar -zxvf go1.11.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/src/go/bin
go version
2,下载源码 (项目已停止更新,源码完全固定)
git clone https://github.com/inconshreveable/ngrok.git
3,生成证书(默认的证书是 ngrok.com,我们需要改成我们自己的域名,如:abc.com,如果一级域名已经占用,也可以使用二级域名,需要自己在域名解析里申请,如何申请,就不细说了,如:222.abc.com)
cd ngrok
mkdir cert
cd cert
export NGROK_DOMAIN="222.abc.com"
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
cp rootCA.pem ../assets/client/tls/ngrokroot.crt
cp device.crt ../assets/server/tls/snakeoil.crt
cp device.key ../assets/server/tls/snakeoil.key
4,生成服务端与客户端
GOOS=linux GOARCH=amd64 make release-server
GOOS=windows GOARCH=amd64 make release-client
5,启动服务端服务
#./bin/ngrokd -domain="$NGROK_DOMAIN"
nohup ./bin/ngrokd -domain="xxx.xxxx.com" -httpAddr=":8000" -httpsAddr=":8443" >log/ngrok.log &
这里我们使用后台启动nohup,域名为222.abc.com,由于商品与系统其他服务有冲突,这里http和htpps端口分别自定义为8000、8443,并记录日志到文件夹log下的ngrok.log文件中。
参数说明:
-httpAddr=":8000" http服务的访问端口 默认80
-httpsAddr=":8443" https服务的访问端口 默认443
-tunnelAddr=":4443" 客户端连接服务端的端口 默认4443
注意事项,使用端口时,同时记得配置防火墙。
6,客户端配置与连接
将ngrok下载到你需要使用客户端的电脑中,并新建配置文件ngrok.cfg
server_addr: "222.abc.com:4443"
trust_host_root_certs: false
运行客户端
ngrok -config=ngrok.cfg -subdomain hh 8081
启动本地web服务,端口8081,可以通过http://hh.222.abc.com:8000访问。
小结下最后ngrok是开源内网穿透工具,可以直接无公网IP映射外网访问,只使用客户端方式,也可以在自己公网主机部署搭建ngrok服务器内网穿透服务,配置起来是相对简单的,纯转发端口原理。如果是想要更为简单的界面化操作的内网穿透服务,也可以选择像nat123这样的,nat123同样可以直接无公网Ip使用,和自己公网主机搭建,对于windows操作有界面化点点下就可以,适合普通windows用户的选择。
自己公网主机搭建穿透服务器就多了一个公网机部署的操作,如无公网IP的则直接用对应客户端添加映射本地具体应用端口媃即可让外网访问。上面主要分享了ngrok的内网穿透方法,不管选择使用哪些内网穿透工具方式,适合自己应用场景即是好选择,希望本文对大家有所帮助。