专栏首页赵俊的Java专栏自建 ngrok 内网穿透服务

自建 ngrok 内网穿透服务

ngrok内网穿透 是什么,有啥用处,以及为什么自建服务,这里我就不再多说了,相信点进来的人也不需要我解释这些。

准备工作

  • 有公网 IP 的 VPS 一台
  • 可以配置域名解析的域名一个。
  • 系统:CentOS (也可为其他,命令稍有不同)

配置域名解析

先把域名给配置了,比如我的域名是 zhaojun.im,那么建立 ngrok.zhaojun.im*.ngrok.zhaojun.im 解析到 你的 VPS 的 IP 上 (A 记录)。

安装 go 语言环境

ngrok 是基于 go 语言开发的,所以需要先安装 go 语言开发环境,CentOS 可以使用 yum 安装:

1

yum install golang

如果没有权限,请使用 sudo 安装,安装完成之后,执行 go version 看到类似信息,证明安装成功:

1

go version go1.7.3 linux/amd64

安装 git 环境

有些 VPS 的系统中自带了 git 环境,有的没有带,如果你的 git 使用不正常,请卸载自带的 git,重装安装。

卸载原有 git (根据需要自选):

1

yum remove git

更新 yum 源:

1

yum update

安装 git :

1

yum install git

安装完后执行 git --version,返回类似的信息,证明安装成功:

1

git version 2.5.0

下载 ngrok 源码:

找一个存放 ngrok 的文件夹 ,clone 一份源码:

(为了方便演示,本文使用 root 用户,所以存放在 /root/ 路径下)

cd /root
git clone https://github.com/inconshreveable/ngrok.git
export GOPATH=/root/ngrok

生成自签名证书

使用 ngrok 官方服务时,我们使用的是官方的 SSL 证书。自己建立 ngrok 服务,需要我们生成自己的证书,并提供携带该证书的 ngrok 客户端。

证书生成过程需要有自己的一个基础域名,官网随机生成的地址,如:695a358d.ngrok.com,基础域名就是 ngrok.com。而在上文中提到的二级域名 ngrok.zhaojun.im 就是用来作为这次要提供的基础域名。如果你的域名是 abc.com,那么域名基础域名可以设置为 ngrok.abc.com

以我的基础域名为例(注意替换成自己的域名),生成证书过程如下:

cd /root/ngrok
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.zhaojun.im" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=ngrok.zhaojun.im" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

执行完成以上命令后,在 ngrok 目录下,会新生成 6 个文件:

1

device.crt device.csr device.key rootCA.key rootCA.pem rootCA.srl

我们在编译可执行文件之前,需要把生成的证书分别替换到 assets/client/tlsassets/server/tls 中,这两个目录分别存放着 ngrokngrokd 的默认证书。

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

cp device.crt assets/server/tls/snakeoil.crt

cp device.key assets/server/tls/snakeoil.key

中间会提示是否覆盖,输入 y 确认即可。这里最好一行一行复制执行,别一起复制执行。

编译 ngrokd 和 ngrok

ngrokd 是服务端的执行文件,进入到 ngrok 目录下,执行如下命令编译:

1

make release-server

ngrok 是客户端的可执行文件,进入到 ngrok 目录下,执行如下命令编译:

1

GOOS=xxx GOARCH=xxx make release-client

不同平台使用不同的 GOOSGOARCHGOOS 为编译出来的操作系统 (windows,linux,darwin),GOARCH 对应的构架 (386, amd64, arm)

Linux 平台 32 位系统:GOOS=linux GOARCH=386
Linux 平台 64 位系统:GOOS=linux GOARCH=amd64

Windows 平台 32 位系统:GOOS=windows GOARCH=386
Windows 平台 64 位系统:GOOS=windows GOARCH=amd64

MAC 平台 32 位系统:GOOS=darwin GOARCH=386
MAC 平台 64 位系统:GOOS=darwin GOARCH=amd64

ARM 平台:GOOS=linux GOARCH=arm

然后下载编译后的客户端,通过 ftp 或 scp 等都可以,生成的目录在 ngrok 的 bin 目录下,当前例子的路径为 /root/ngrok/bin/windows_amd64/ngrok.exe

启动 ngrokd 服务器

在 ngrok 的 bin 目录下执行:

1

./ngrokd -domain="ngrok.zhaojun.im" -httpAddr=":8088" -httpsAddr=":8089"

其中,-domain 为你的 ngrok 服务域名,-httpAddr 为 http 服务端口地址,访问形式为:xxx.ngrok.zhaojun.im:8088,也可设置为 80 默认端口,注意端口冲突即可,-httpsAddr 为 https 服务,同上。

ngrokd 启动后,退出命令行即关闭服务。如果想要在后台运行,则执行:

1

nohup ./ngrokd -domain="ngrok.zhaojun.im" -httpAddr=":8088" -httpsAddr=":8089" &

注意末尾需要有 & 号,详细搜索 nohup 了解。 关闭服务只需通过:

ps -A # 找到PID,执行关闭

kill xxxid

启动 ngrok 客户端

上面我们编译好了客户端并下载到了本地,演示路径为 d:/ngrok/ngrok.exe

d:/ngrok/ 目录下,建立 ngrok 配置文件:ngrok.cfg

server_addr: "ngrok.zhaojun.im:4443"

trust_host_root_certs: false

server_addr 端口默认 4443,还需要服务器开启 4443 端口,使用阿里云或腾讯云的需要去安全组放行 4443 外网端口,不然无法正常使用。

然后使用 cmd 到这个路径下(d:/ngrok/),执行命令启动并转发本地的 4000 端口:

1

ngrok -subdomain demo -config=./config.cfg 4000

运行完了以后会有提示域名,根据提示域名访问,我这里这里为 : http://demo.ngrok.zhaojun.im:8088,访问这个就等于访问到你的 http://127.0.0.1:4000 下的内容了。

更详细的 ngrok 配置,请参考官方文档 : https://ngrok.com/docs

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python 基础语法

    一份执着✘
  • Python Numpy 快速入门

    一份执着✘
  • LeetCode 965 Univalued Binary Tree

    判断二叉树是否是 唯一二叉树. 当树中所有节点的值都一样时,我们认为他是一颗 唯一二叉树。

    一份执着✘
  • ubuntu搭建内网穿透服务Ngrok

    说些闲话: 最近一直在乱折腾,看看C,看看Python,又打算去看一下PHP,然后又是前端的Vue.Js,最后发现——嗯?我都在干些什么? 当然不论是在做什么...

    李郑
  • 【腾讯云的1001种玩法】轻松搭建内网穿透服务Ngrok

    使用腾讯云Ubuntu服务器搭建内网穿透服务Ngrok实现内网内容转发,日常开发中经常遇到本地/内网的内容需要发布到公网中进行展示,或者在公网中发布自己的服务器...

    李郑
  • 内网穿透神器:Ngrok在支付中的正确使用姿势

    随着互联网的发展,无论是web服务还是移动APP越来越多的都集成了第三方支付(支付宝、微信、银联)。通常作为服务提供方,支付成功以后都会有一个后端回调URL来通...

    小柒2012
  • 利用ngrok实现Linux服务器 SSH&Web服务的内网穿透

    ngrok是一个非常流行的反向代理服务,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道,支持80端口以及自定义tcp端口转发.ngrok 可...

    yuanfan2012
  • 使用ngrok作反向代理

    自从进入了公司,就碰到一个很大的问题,那就是公司电脑扛不走,所以在家想访问公司的电脑中的资料就很麻烦,所以就只能使用ngrok作反向代理,之后ssh到公司网站去...

    bboysoul
  • 内网穿透神器:Ngrok在支付中的正确使用姿势

    小柒2012
  • 使用Ngrok将本地服务映射为公网服务

    这篇文章将为大家介绍ngrok,如何安装,配置以及在什么场景下需要使用ngrok。在没有使用过Ngrok之前,您可能会遇到过这样一些情况

    字母哥博客

扫码关注云+社区

领取腾讯云代金券