使用 Ngrox 实现内网穿透

栏目: Go · 发布时间: 5年前

内容简介:本文是最近在做 Server 开发,需要将一个内网的服务暴露出去,使其在家也能访问到。

版权声明

本文是 开源实验室 原创文章,转载请以 链接 形式注明地址: https://kymjs.com/note/2019/02/18/01

对本知识点有任何问题,可加我的个人微信:kymjs123

使用 Ngrox 实现内网穿透

最近在做 Server 开发,需要将一个内网的服务暴露出去,使其在家也能访问到。

ngrok 是一个反向代理工具,官方有免费的可以使用,但是由于海外原因速度非常慢。好在这套服务都开源了,我们可以用开源代码搭建一个服务,自己使用。

搭建 ngrok 服务器

1、首先你需要:

  • 一个公网服务器
  • 备案过的域名

如果你没有的话,可以加我微信说明来意,我愿意免费给你用我的。

2、安装 Git 和 Golang

apt-get install build-essential golang mercurial git

ubuntu自带的 golang 是 1.2 ,版本非常低,需要手动升级,而偏偏垃圾Golang 1.5开始自举,必须自己编译自己。所以如果你的版本是1.2或所有1.5以下的版本。

你需要:首先升级到1.4,然后用1.4编译安装Golang1.5,然后从1.5开始安装最新版本。

安装Golang1.4

Golang下载地址: https://dl.gocn.io/

首先下载一个1.4.3版本的golang,例如我的下载目录是/tmp下面

tar  -xzf go1.4.linux-amd64.tar.gz

cd go/src

./make.bash 编译

安装成功,将会输出:

ALL TESTS PASSED

—

Installed Go for linux/amd64 in /home/you/go.

Installed commands in /home/you/go/bin.

*** You need to add /home/you/go/bin to your $PATH. ***

cd /tmp

mv go /{$HOME}/go1.4

将编译好的golang1.4拷贝到{$HOME}目录下,在下一步编译golang1.9的时候会自动去{$HOME}目录下找 go 1.4 $HOME不同的环境不同,我的ubuntu是/root,安装是请自己确定好$HOME

安装golang1.9

这个地方有一个坑,我编译1.8版本的时候会在中途卡死,编译不过去,因此建议最好不要编译1.8版本的,直接跳到1.9或者用1.7

首先下载一个1.9版本的golang,我的下载目录是/tmp下面

rm -rf go  删掉上一次编译的1.4

tar  -xzf go1.9.linux-amd64.tar.gz

cd go/src

./all.bash 编译

安装成功,将会输出:

ALL TESTS PASSED

—

Installed Go for linux/amd64 in /home/you/go.

Installed commands in /home/you/go/bin.

*** You need to add /home/you/go/bin to your $PATH. ***

cd /tmp

mv go /{$HOME}/go1.9

ln -s /{$HOME}/go1.9/bin/go /usr/bin/go

完成安装

执行命令 go version

编译ngrox

1、 首先从 GitHub clone 源码:

git clone https://github.com/tutumcloud/ngrok.git ngrok

2、 生产签名证书

使用ngrok.com官方服务时,我们使用的是官方的SSL证书。自建ngrokd服务,如果不想买SSL证书,我们需要生成自己的自签名证书,并编译一个携带该证书的ngrok客户端。

证书生成过程需要一个二级域名。 比如,我的域名是 kymjs.com ,我替换成自己的二级域名 ngrox.kymjs.com

cd ngrok

NGROK_DOMAIN="ngrox.kymjs.com"

openssl genrsa -out base.key 2048

openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.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 base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt

3、复制生成的证书到 ngrox 目录中

cp base.pem assets/client/tls/ngrokroot.crt

4、开始编译服务端程序和客户端程序

make release-server release-client

编译成功后会在bin目录下找到ngrokd和ngrok这两个文件。其中ngrokd 就是服务端程序了。

5、启动服务端程序

/bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="ngrox.kymjs.com" -httpAddr=":9080" -httpsAddr=":9443"

httpAddr、httpsAddr 分别是 ngrok 用来转发 http、https 服务的端口,可以随意指定。ngrokd 还会开一个 4443 端口用来跟客户端通讯(可通过 -tunnelAddr=”:xxx” 指定)。由于我的80和443端口另有用处,这里就使用了9080和9443替代了,反正端口号无所谓。

6、设置本地客户端

在同级目录下新建一个配置文件ngrok.cfg

server_addr: "ngrox.kymjs.com:4443"  
trust_host_root_certs: false

然后命令行启动 ngrox 客户端

ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=tomcat 8080

这样就成功将原本内网的 localhost:8080 代理到外网的 tomcat.ngrox.kymjs.com:9080

注意事项

mac系统如果是ssh登录的,当你退出当前ssh的时候,你启动的ngrox进程也会随之停止(类似ssh启动一个springboot程序的时候一样),解决方法是先用 screen 命令新开一个进程,然后再执行自己的程序:

screen

java -jar xxx.jar

欢迎您订阅我的付费文章专栏:包含更多有深度技术文章,与未来方向认知。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Go Web 编程

Go Web 编程

[新加坡]Sau Sheong Chang(郑兆雄) / 黄健宏 / 人民邮电出版社 / 2017-11-22 / 79

《Go Web 编程》原名《Go Web Programming》,原书由新加坡开发者郑兆雄(Sau Sheong Chang)创作、 Manning 出版社出版,人名邮电出版社引进了该书的中文版权,并将其交由黄健宏进行翻译。 《Go Web 编程》一书围绕一个网络论坛 作为例子,教授读者如何使用请求处理器、多路复用器、模板引擎、存储系统等核心组件去构建一个 Go Web 应用,然后在该应用......一起来看看 《Go Web 编程》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试