内容简介:本文是最近在做 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
欢迎您订阅我的付费文章专栏:包含更多有深度技术文章,与未来方向认知。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 按钮穿透点击实现方式
- 使用 frp 实现内网穿透
- 树莓派通过 n2n 实现内网穿透
- golang手把手实现tcp内网穿透代理(2)
- 2018-12-05使用Docker部署Ngrok实现内网穿透
- frp 源码阅读与分析(二):TCP内网穿透的实现
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。