第一步
提前准备以下三点:
记住服务器的公网ip
在阿里云控制台的安全策略开放端口,建议全部开放,如果不开放,后面用到什么端口,就开放什么端口也行
登陆服务器之后,关闭firewall或者防火墙,不关闭的话,也记得开放相应的端口,否则无法连接。
上面提到的端口,不是固定的,如果用到什么端口你就配置什么端口,我为了不频繁配置端口,就选择开放全部端口,和关闭防火墙
第二步
域名需要备案。
配置域名解析,给域名配置两条A解析记录
a.test.com ->119.119.141.242
*.a.test.com ->119.119.141.242
1
2
这里由于是测试,我就随便配置了一个,配置了一个二级的。
也可配置成一级域名,看个人喜好。
test.com ->119.119.141.242
*.test.com ->119.119.141.242
1
2
这两者的区别在后面用域名访问你本地的机器的时候,就可以体现了,
配置好以后,上面的需要通过 www.a.test.com访问局域网内部的网站,
下面的只需要输入www.test.com即可访问局域网内网站,就是这个区别
如下图所示
第三步
登录服务器,配置服务器端
#安装git 用于下载ngrok代码
yum -y install git
#克隆代码,文件夹命名为 ngrok-server,也可以填写,默认就是ngrok
git clone https://github.com/inconshreveable/ngrok.git ngrok-server
#安装golang
yum -y install golang
1
2
3
4
5
6
进入克隆的 ngrok目录下,后续的操作都是基于ngrok-server目录下操作
cd ngrok-server
1
执行命令配置环境变量用于创建ngrok证书
#设置环境变量,Go语言的安装位置
export GOPATH=/usr/local/ngrok/
#设置环境变量,ngrok域名,填写自己配置的域名
export NGROK_DOMAIN="a.test.com"
1
2
3
4
切记! 上面的域名一定要填写自己的域名
切记!上面的域名一定要填写自己的域名
切记!上面的域名一定要填写自己的域名
执行命令创建ssl证书
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 server.key 2048
openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000
1
2
3
4
5
6
7
生成如下证书文件
复制证书文件
#复制rootCA.pem到assets/client/tls/并更名为ngrokroot.crt
cp rootCA.pem assets/client/tls/ngrokroot.crt
#复制server.crt到assets/server/tls/并更名为snakeoil.crt
cp server.crt assets/server/tls/snakeoil.crt
#复制server.key到assets/server/tls/并更名为snakeoil.key
cp server.key assets/server/tls/snakeoil.key
1
2
3
4
5
6
上面会让你提示是否覆盖,输入y即可。如果不想每次都提示,可以使用如下命令,这是一个骚操作。
cp前面加上一个\,然后加上-rf即可没有提示,直接覆盖。
\cp -rf rootCA.pem assets/client/tls/ngrokroot.crt
\cp -rf server.crt assets/server/tls/snakeoil.crt
\cp -rf server.key assets/server/tls/snakeoil.key
1
2
3
生成客户端和服务器端
#win服务端
GOOS=windows GOARCH=386 make release-server
#win客户端
GOOS=windows GOARCH=386 make release-client
#linux服务端
GOOS=linux GOARCH=386 make release-server
#linux客户端
GOOS=linux GOARCH=386 make release-client
1
2
3
4
5
6
7
8
我只用到linux服务器端和win客户端,我只需要执行如下即可。
根据自己需要生成.
#linux服务端
GOOS=linux GOARCH=386 make release-server
#win客户端
GOOS=windows GOARCH=386 make release-client
1
2
3
4
第一次生成需要点时间,因为golang编译需要下载一些插件。
编译后的软件在bin目录下
cd bin
1
进入 linux_386服务器端文件夹配置启动服务器
./ngrokd -domain="a.test.com" -httpAddr=":80" -httpsAddr=":443"
1
http默认端口是80,
https默认端口是443,
上面我都选择默认的,这样做的好处就是通过域名进行内网穿透访问我局域网内的web服务时,不用输入端口,
直接像这样输入域名即可访问
http://www.a.test.com
https://www.a.test.com
1
2
如果选择其他的,你访问的时候,需要在域名后面加上端口,
假如你这样配置了
./ngrokd -domain="a.test.com" -httpAddr=":8080" -httpsAddr=":4430"
1
你在后面访问网站的时候,需要加上端口去访问,功能不影响。
http://www.a.test.com:8080
https://www.a.test.com:4430
1
2
至此,服务器配置完成
说明:
ngrok会监听80端口和443端口,这是因为在上面启动命令上面配置了,
还会默认监听一个4443端口,这个端口是用于服务器和客户端通讯的,记住这个4443端口,后面客户端配置会用到,这个4443也可以修改。
-tunnelAddr=":4430" 参数可以修改端口为4430,自己根据实际情况配置。
./ngrokd -domain="a.test.com" -httpAddr=":8080" -httpsAddr=":8081" -tunnelAddr=":4430"
1
上面的8080和8081端口真是针对服务器层面的。
假如你配置成了8080和8081,那么如果你访问你本地的服务,你请求的地址是
http://www.a.test.com:8080 或者 访问https://www.a.test.com:8081
然后再访问你自己内网机器对应的服务,这个和你本机电脑的端口是没有关系的。
在自己的客户端,会配置一个域名前缀和端口,这个就有关系:
举例:
你本地运行了一个bbs服务,端口是800,域名是bbs.a.test.com
那么你在本地客户端ngrok的配置则为 bbs>800端口
ngrok.exe -subdomain bbs-config=ngrok.cfg 800
1
然后访问就在这样访问 http://bbs.a.test.com:8080,而不是http://bbs.a.test.com:800
不知道这么说能不能理解,
1、服务器上配置的端口,只是针对com后面的,如果你服务器上面配置了什么端口,你com后面访问就需要加上什么端口
2、客户端上配置的端口,针对com前面的,就是如果bbs对应一个800,端口,那么访问bbs域名,那么就访问对应的800端口的服务。
配置客户端
下载Windows_386客户端文件夹到局域网电脑上进行配置和运行。
Windows_386客户端文件夹只有一个文件。
ngrok.exe
1
然后在Windows_386文件夹中新建两个文件,一个是配置文件,一个是启动脚本文件
ngrok.cfg是配置文件
server_addr: "a.test.com:4443" # 配置服务器地址,端口需要和服务器上面的4443端口一致,否则无法连接
trust_host_root_certs: false
1
2
启动文件start.bat内容
ngrok.exe -subdomain www -config=ngrok.cfg 80
1
如果太懒懒得新建,点击如下地址下载,已经配置好了。只要修改域名就行,和ngrok.exe放在同一目录即可
https://shell-1251121573.cos.ap-guangzhou.myqcloud.com/ngrok-etc-single.zip
说明:
-subdomain www 指定一个www这个子域名,也是就 www.a.test.com,www可以修改自定义
-config=ngrok.cfg 指定配置文件
80 这个是你本地的web服务的端口。也是就www.a.test.com访问的端口,根据自己需要修改。
配置完毕之后,点击运行start.bat,出现如下提示表示映射成功成功
http://www.a.test.com -> 映射到本机的 127.0.0.1:80
https也映射到80.这个是因为我只配置了http的80端口,没有配置443端口,在下面有更详细的配置。
至此内网端口穿透ngrok服务器搭建和配置完毕。
更多高级的操作,固定多个端口和tcp和http穿透。
如果需要配置多个端口而且指定不同的端口的作用,可以参考如下配置
ngrok.cfg是配置文件,里面内容填入
记住,编写配置文件的时候,不要使用tab键,需要使用空格键,yaml格式有关。
server_addr: "a.test.com:4443" # 配置服务器地址,端口需要和服务器上面的4443端口一致,否则无法连接
trust_host_root_certs: false
tunnels:
ssh: #配置ssh端口
remote_port: 22
proto:
tcp: 22
sssh: #配置windows3389远程端口
emote_port: 3389
proto:
tcp: 3389
ftp:
remote_port: 21
proto:
tcp: 21
http: #配置网站端口
subdomain: www #这是配置网站的域名,配置了www,那么通过www.a.test.com就可以访问本地的服务
proto: #www也可以改成其他的。
http: 80 #局域网本地的的web服务端口
https: 443
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
启动文件start.bat内容
ngrok.exe -config ngrok.cfg start-all
1
之后双击start.bat即可启动内网
如果不想编写,点击这里下载,放在同级 目录即可
https://shell-1251121573.cos.ap-guangzhou.myqcloud.com/ngrok-etc-all.zip
配置在Windows环境下客户端开机启动
进入如下目录
C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
1
把用户名替换成自己的用户名
修改start.bat 内容,原来是这样的
ngrok.exe -config ngrok.cfg start-all
1
之后,我把 ngrok.exe和ngrok.cfg放在C盘ngrok目录,
之后start.bat内容修改成如下:
c:\ngrok\ngrok.exe -config c:\ngrok\ngrok.cfg start-all
1
保存
之后把start.bat 复制到Startup文件中即可实现开启自动启动。
linux服务器 和客户软件实现开机自动启动,可以自行百度,或者翻看我以前的blog,搜索开启自动启动关键词
常见错误
大部分错误信息可以从下面这个文章找到答案,我就不一一贴出来了。
https://tonybai.com/2015/03/14/selfhost-ngrok-service/
---------------------
作者:diyiday
来源:CSDN
原文:https://blog.csdn.net/diyiday/article/details/84504206
版权声明:本文为博主原创文章,转载请附上博文链接!
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/306.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~