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

家里办了一个移动的宽带,可是移动死都不给外网ip,用 teamviewer只能远程,有些其他业务好像没有做,
花生壳有点坑,没办法,只好自己动手了。刚好阿里云服务器打折,买了一个服务器开搞。

第一步

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

提前准备以下三点:

  • 记住服务器的公网ip
  • 在阿里云控制台的安全策略开放端口,建议全部开放,如果不开放,后面用到什么端口,就开放什么端口也行
  • 登陆服务器之后,关闭firewall或者防火墙,不关闭的话,也记得开放相应的端口,否则无法连接。

上面提到的端口,不是固定的,如果用到什么端口你就配置什么端口,我为了不频繁配置端口,就选择开放全部端口,和关闭防火墙

第二步

域名需要备案。
配置域名解析,给域名配置两条A解析记录

a.test.com ->119.119.141.242 
*.a.test.com ->119.119.141.242

这里由于是测试,我就随便配置了一个,配置了一个二级的。
也可配置成一级域名,看个人喜好。

test.com ->119.119.141.242 
*.test.com ->119.119.141.242

这两者的区别在后面用域名访问你本地的机器的时候,就可以体现了,
配置好以后,上面的需要通过 www.a.test.com访问局域网内部的网站,
下面的只需要输入www.test.com即可访问局域网内网站,就是这个区别

如下图所示

利用云服务器搭建内网穿透ngrok服务器搭建,实现tcp和http转发。_第1张图片

第三步

登录服务器,配置服务器端

#安装git 用于下载ngrok代码
yum -y install git
#克隆代码,文件夹命名为 ngrok-server,也可以填写,默认就是ngrok
git clone https://github.com/inconshreveable/ngrok.git ngrok-server
#安装golang
yum -y install golang

进入克隆的 ngrok目录下,后续的操作都是基于ngrok-server目录下操作

cd  ngrok-server

执行命令配置环境变量用于创建ngrok证书

#设置环境变量,Go语言的安装位置
export GOPATH=/usr/local/ngrok/
#设置环境变量,ngrok域名,填写自己配置的域名
export NGROK_DOMAIN="a.test.com"  

切记! 上面的域名一定要填写自己的域名

切记!上面的域名一定要填写自己的域名

切记!上面的域名一定要填写自己的域名

利用云服务器搭建内网穿透ngrok服务器搭建,实现tcp和http转发。_第2张图片

执行命令创建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

生成如下证书文件

利用云服务器搭建内网穿透ngrok服务器搭建,实现tcp和http转发。_第3张图片

复制证书文件

#复制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 

上面会让你提示是否覆盖,输入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 

在这里插入图片描述

生成客户端和服务器端

#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

我只用到linux服务器端和win客户端,我只需要执行如下即可。
根据自己需要生成.

#linux服务端
GOOS=linux GOARCH=386 make release-server
#win客户端
GOOS=windows GOARCH=386 make release-client

第一次生成需要点时间,因为golang编译需要下载一些插件。

利用云服务器搭建内网穿透ngrok服务器搭建,实现tcp和http转发。_第4张图片

利用云服务器搭建内网穿透ngrok服务器搭建,实现tcp和http转发。_第5张图片

编译后的软件在bin目录下

利用云服务器搭建内网穿透ngrok服务器搭建,实现tcp和http转发。_第6张图片

cd bin

利用云服务器搭建内网穿透ngrok服务器搭建,实现tcp和http转发。_第7张图片

进入 linux_386服务器端文件夹配置启动服务器

./ngrokd -domain="a.test.com" -httpAddr=":80" -httpsAddr=":443"

http默认端口是80,
https默认端口是443,
上面我都选择默认的,这样做的好处就是通过域名进行内网穿透访问我局域网内的web服务时,不用输入端口,
直接像这样输入域名即可访问

http://www.a.test.com
https://www.a.test.com

如果选择其他的,你访问的时候,需要在域名后面加上端口,
假如你这样配置了

./ngrokd -domain="a.test.com" -httpAddr=":8080" -httpsAddr=":4430"

你在后面访问网站的时候,需要加上端口去访问,功能不影响。

http://www.a.test.com:8080
https://www.a.test.com:4430

至此,服务器配置完成

说明:
在这里插入图片描述

ngrok会监听80端口和443端口,这是因为在上面启动命令上面配置了,
还会默认监听一个4443端口,这个端口是用于服务器和客户端通讯的,记住这个4443端口,后面客户端配置会用到,这个4443也可以修改。

-tunnelAddr=":4430" 参数可以修改端口为4430,自己根据实际情况配置。

./ngrokd -domain="a.test.com"  -httpAddr=":8080" -httpsAddr=":8081" -tunnelAddr=":4430"

上面的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

然后访问就在这样访问 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

然后在Windows_386文件夹中新建两个文件,一个是配置文件,一个是启动脚本文件

利用云服务器搭建内网穿透ngrok服务器搭建,实现tcp和http转发。_第8张图片

ngrok.cfg是配置文件

	server_addr: "a.test.com:4443"      # 配置服务器地址,端口需要和服务器上面的4443端口一致,否则无法连接
	trust_host_root_certs: false

启动文件start.bat内容

ngrok.exe -subdomain www -config=ngrok.cfg 80

如果太懒懒得新建,点击如下地址下载,已经配置好了。只要修改域名就行,和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转发。_第9张图片

利用云服务器搭建内网穿透ngrok服务器搭建,实现tcp和http转发。_第10张图片

利用云服务器搭建内网穿透ngrok服务器搭建,实现tcp和http转发。_第11张图片

至此内网端口穿透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

启动文件start.bat内容

ngrok.exe  -config ngrok.cfg  start-all

之后双击start.bat即可启动内网

如果不想编写,点击这里下载,放在同级 目录即可
https://shell-1251121573.cos.ap-guangzhou.myqcloud.com/ngrok-etc-all.zip

利用云服务器搭建内网穿透ngrok服务器搭建,实现tcp和http转发。_第12张图片

配置在Windows环境下客户端开机启动

进入如下目录

C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

把用户名替换成自己的用户名

修改start.bat 内容,原来是这样的

ngrok.exe  -config ngrok.cfg  start-all

之后,我把 ngrok.exe和ngrok.cfg放在C盘ngrok目录,

之后start.bat内容修改成如下:

c:\ngrok\ngrok.exe  -config c:\ngrok\ngrok.cfg  start-all	

保存

之后把start.bat 复制到Startup文件中即可实现开启自动启动。

linux服务器 和客户软件实现开机自动启动,可以自行百度,或者翻看我以前的blog,搜索开启自动启动关键词

常见错误

大部分错误信息可以从下面这个文章找到答案,我就不一一贴出来了。

https://tonybai.com/2015/03/14/selfhost-ngrok-service/

你可能感兴趣的:(linux,windows)