内网穿透、反向代理(ngrok服务器搭建)

内网穿透的目的是:让外网能访问你本地的应用,例如在外网打开你本地http://127.0.0.1指向的Web站点。


一、ngrok

ngrok是一个反向代理,通过在公共的端点和本地运行的Web服务器之间建立一个安全的通道。ngrok可捕获和分析所有通道上的流量,便于后期分析与响应。

开源免费

官网:https://ngrok.com/

源码:https://github.com/inconshreveable/ngrok

ngrok1.x开源,ngrok2.x不开源

ngrok使用go语言开发,源代码分为客户端服务器端

国内免费服务器:http://ngrok.ciqiuwl.cn/


下面以上面的免费服务器为示例完成内网穿透

现在假定我的本地已成功部署了一个网站,访问地址为127.0.0.1,想内网穿透后被公网上的用户访问,一般步骤如下:

步骤1、下载windows版本的客户端,解压。一般在为你提供代理服务器的网站上找你要下载的客户端:

步骤2、在命令(cmd)行下进入到ngrok客户端目录下

步骤3、执行 ngrok -config=ngrok.cfg -subdomain xxx 80 //(xxx 是你自定义的域名前缀),建议批处理

如果连接成功,会提示如下信息:

这一步如果你认为太麻烦,可以直接运行目录下的start.bat批处理文件就不用进DOS环境了。运行start.bat直接跳过2,3步

步骤4、如果开启成功 你就可以使用 xxx.ngrok.xiaomiqiu.cn 来访问你本机的 127.0.0.1:80 的服务了,当然你必须确定的是你本机的Web是可以正常访问的。

注意:

如果你自己有顶级域名,想通过自己的域名来访问本机的项目,那么先将自己的顶级域名解析到120.25.161.137(域名需要已备案哦,80端口必须备案),然后执行 ngrok -config=ngrok.cfg -hostname xxx.xxx.xxx 80 //(xxx.xxx.xxx是你自定义的顶级域名)


二、ubuntu下生成ngrok服务器与客户端应用程序

使用Putty远程登陆到服务器,如下所示:

1、安装GIT、获取ngrok:

mkdir ngrok #创建名称为ngrok的目录

apt-get update #更新包管理器

apt-get install git  #安装git

git clone https://github.com/inconshreveable/ngrok.git ngrok2 #将ngrok源代码克隆回本地

成功执行后如下所示:

PS. 直接在服务器上下载的话实在太慢,可以先在本地下载好,然后用ftp放到服务器上去直接用

2、安装Go语言:

apt-get install golang #安装go语言

执行结果如下:

3、设置环境变量

export GOPATH=/usr/local/ngrok/  #设置环境变量,Go语言的安装位置
export NGROK_DOMAIN="xxxx.cn"  #设置环境变量,xxx.cn为你的域名


4、切换到ngrok目录下执行以下命令为域名生成证书

cd ngrok
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

生成后的结果如下:

证书如下:


5、拷贝证书到指定位置

cp rootCA.pem assets/client/tls/ngrokroot.crt  #复制rootCA.pem到assets/client/tls/并更名为ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt #复制server.crt到assets/server/tls/并更名为snakeoil.crt
cp server.key assets/server/tls/snakeoil.key #复制server.key到assets/server/tls/并更名为snakeoil.key

6、 编译

 由于go语言的特性,在编译时直接生成机器码,所以在运行过程中并不需要go的环境(非托管应用)。在ngrok目录下,运行一下命令分别生成对应的客户端与服务端。

#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

生成完成后,在工作目录的bin文件夹下,产生对应的文件。以编译windows平台为例,会产生“ngrok.exe”与“ngrokd.exe”这两个文件,前者客户端,后者需要运行在公网服务器上。

因为项目中引用了一些外部资源,生成会耗费一些时间,对网络也有一定的要求,太慢会中短,命令执行下如:

生成结果:

这里我还生成了两个运行在windows服务器与客户端的应用:

ngrok 是客户端,ngrokd 是服务端。

7、启动ngrok服务端

切换到ngrokd 服务端程序所在的目录并执行如下命令:

./ngrokd -domain xxxx.cn

xxx.cn代表你的域名

执行效果如下:



8、配置客户端

拷贝生成的ngrok.exe到本地计算机,并新建配置文件ngrok.cfg,内容为:

server_addr: "xxxx.cn:4443"
trust_host_root_certs: false

xxx.cn代表你的域名

再新建文件start.bat批处理文件,内容为:

ngrok.exe -subdomain hello -config=ngrok.cfg 8080
hello为子域名前缀,访问时格式为hello.xxx.cn

8080为本地tomcat服务器使用的端口号。

双击start.bat启动效果如下所示:


到此,就可以通过域名hello.xxx.cn访问本地的服务器了。例如我的tomcat服务器:


在编译生成的时候执行
GOOS=windows GOARCH=386 make release-server 
生成服务器端一切正常,可是生成客户端的时候一直报错,说找不到 sync.Pool。后来发现是GO语言软件版本太低了,使用1.3以上版本就不会有问题。
  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要实现TCP内网穿透并搭建FileZilla FTP服务器,你可以按照以下步骤操作: 1. 在你的局域网中,将FTP服务器安装在你的计算机上。你可以从FileZilla官方网站(https://filezilla-project.org/)下载并安装FileZilla服务器软件。 2. 配置FileZilla服务器。运行FileZilla服务器软件,按照提示进行配置。设置FTP服务器的监听端口、FTP用户和密码等信息。 3. 确保你的防火墙和路由器允许外部访问FTP服务器。在你的路由器上,将FTP服务器所在的计算机设置为DMZ主机,或者在路由器上设置端口转发规则,将FTP服务器所使用的端口映射到该计算机。 4. 获取公网IP地址。你可以通过访问网站(例如https://www.whatismyip.com/)来获取你的公网IP地址。 5. 配置TCP内网穿透工具。TCP内网穿透工具可以帮助你将公网IP地址和FTP服务器所使用的端口映射到你的局域网中。常用的工具有ngrok、frp等。你可以选择一个合适的工具,并按照其文档说明进行配置。 6. 启动TCP内网穿透工具,并将公网IP地址和FTP服务器所使用的端口配置到工具中。 7. 现在,你应该能够通过公网IP地址和FTP服务器所使用的端口访问你的FTP服务器了。使用FTP客户端,输入公网IP地址、端口、用户名和密码,即可连接到FTP服务器并进行文件传输。 请注意,TCP内网穿透涉及到网络安全和网络设置等方面的知识,确保你的网络环境安全,并详细了解你所使用的工具的配置和安全性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值