12
2019
03
11:07:57

利用云服务器搭建内网穿透ngrok服务器搭建,实现tcp和http转发。

第一步


阿里云或者腾讯云购买了一个ecs服务器


提前准备以下三点:


记住服务器的公网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 

版权声明:本文为博主原创文章,转载请附上博文链接!




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/306.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: