【docker系列】搭建Ngrok实现内网穿透
- 2020 年 1 月 16 日
- 筆記
先来一张效果图镇楼

内网穿透是什么?
内网穿透,即NAT穿透,网络连接时术语,计算机是局域网内时,外网与内网的计算机节点需要连接通信,有时就会出现不支持内网穿透。就是说映射端口,能让外网的电脑找到处于内网的电脑,提高下载速度。不管是内网穿透还是其他类型的网络穿透,都是网络穿透的统一方法来研究和解决。
什么场景下会使用到内网穿透?
上面说的比较官方,我们还是来聊聊实际应用场景,比如你接了一个外单系统,做完了以后老板想验货,这时候大部分无非就2种做法,开远程让他看/自己部署到公网的服务器让别人看,两种都很麻烦,费时费力,那么我们做一个内网穿透,直接让别人通过外网域名访问你的本地机器,岂不是很简单。
还有作为开发人员来讲,用内网穿透来做本地调试还是挺方便的,现在第三方对接都是需要公网域名的,比如微信的一些接口,不用内网穿透将会花费很多的时间和精力在调试上。
准备工作
- 一台公网服务器
- 自己的域名,并解析出来一个ngrok服务器的子域名,小编这里用的是ngrok.javakhbd.com
PS:本文基于腾讯云
拉取镜像
docker pull hteen/ngrok

执行编译命令,编译服务端和客户端
docker run --rm -it -e DOMAIN="ngrok.javakhbd.com" -v /data/ngrok:/myfiles hteen/ngrok sh /build.sh
执行成功截图

此刻在/data/ngrok目录下面,你会看到以下文件:

我们生成的客户端和服务器在/data/ngrok/bin目录下

bin/ngrokd 服务端 bin/ngrok linux客户端 bin/darwin_amd64/ngrok osx客户端 bin/windows_amd64/ngrok.exe windows客户端
启动服务器端
由于之前的命令是编译命令并不是启动容器,所以我们开始根据刚才下载的镜像来启动容器
docker run -idt --name ngrok-server -v /data/ngrok:/myfiles -p 80:80 -p 443:443 -p 4443:4443 -e DOMAIN='ngrok.javakhbd.com' hteen/ngrok sh /server.sh

如果是这些宿主端口被nginx等占用可以换以下宿主端口,然后自己做映射即可。
客户端连接
这里以window客户端为例。
先将服务器上编译好的客户端下载下来。

创建一个文件ngrok.cfg
,作为配置文件,里面配置如下:
server_addr: "你的ngrok域名:4443端口" trust_host_root_certs: false
配置文件弄好以后虽然也能通过命令启动,但是总归太麻烦了,我们把命令放到start.bat
可执行文件,这样每次要用到内网穿透的时候双击就可以了。
ngrok.exe -config ngrok.cfg -subdomain ceshi localhost:8081
见证效果
话不多说,直接上动图吧!

– End –