搭建自己的ngrok服务

1. 服务器准备
CentOS6上试过了, 编译卡住了, 据说是git版本过低导致, 想升级git , 谁知又有一堆问题, 索性放弃, 安装了CentOS7, 在上面部署.
2. go环境搭建
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
源码安装go的详细过程如下:
1).下载源码,可以在https://studygolang.com/dl 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.7.1.linux-amd64.tar.gz。
2).将其解压到/usr/local目录下:

tar -C /usr/local  -xzf   go1.7.1.linux-amd64.tar.gz  

注意下载适合自己操作系统的版本
3).设置环境变量

mkdir $HOME/go  
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc  
echo 'export GOPATH=$HOME/go'>> ~/.bashrc  
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  
source  $HOME/.bashrc  

4). 安装go get工具

yum install mercurial git bzr subversion 

2.获取ngrok源码
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
获取源码:

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

或者

git clone https://gitlab.com/thugside/ngrok.git

3. 编译
1). 配置环境变量

export NGROK_DOMAIN="tunnel.ngrok.me"  

tunnel.ngrok.me 替换成你自己的域名。
2). 生成自签名ssl证书

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 device.key 2048

openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr

openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

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

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

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

设置变量:

GOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  

生成服务端与客户端

make release-server release-client  

编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。
其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。
由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
4. 交叉编译
1).生成windows客户端
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。
交叉编译过程如下:

GOOS=windows GOARCH=amd64 make release-server release-client

编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
网上有文章说需要:

cd  /usr/local/go/src/

GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  

我没有重新编译go, 一样生成了windows客户端, 可能我的go版本高的缘故?
2). 编译arm客户端

sudo GOOS=linux GOARCH=arm make release-client

3).编译mac版本客户端

GOOS=darwin GOARCH=amd64 make  release-client

5.设置域名解析
添加两条A记录:tunnel.ngrok.me和*.tunnel.ngrok.me,指向所在的Ngrok服务器ip。
6. ngrokd服务启动与使用
1).启动ngrokd服务端

bin/ngrokd -domain="$NGROK_DOMAIN" 

运行结果如下:

[09:40:02 HKT 2016/10/21] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [registry] [tun] No affinity cache specified
[09:40:02 HKT 2016/10/21] [INFO] (ngrok/log.Info:112) Listening for public http connections on [::]:80
[09:40:02 HKT 2016/10/21] [INFO] (ngrok/log.Info:112) Listening for public https connections on [::]:443
[09:40:02 HKT 2016/10/21] [INFO] (ngrok/log.Info:112) Listening for control and proxy connections on [::]:4443
[09:40:02 HKT 2016/10/21] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting every 30 seconds

默认转发80和443端口, 监听端口是4443
如果要改需要添加参数

-httpAddr=":8000" -httpsAddr=":44443"

$NGROK_DOMAIN是必须指定的, 不然会生成ngrok.com的二级域名, 那就用不了

以后台进程的方式开启

nohup ./ngrok/bin/ngrokd -domain=“tunnel.ngrok.me” -httpAddr=":8000" -httpsAddr=":4433" -log="/tmp/ngrok.log" > /dev/null 2>&1 &

2).启动ngrok客户端
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置

server_addr: "tunnel.ngrok.me:4443"  
trust_host_root_certs: false  

ngrok -config=ngrok.cfg -subdomain test 8080
test是你的二级域名地址
看到这样的信息说明你成功了

ngrok

Tunnel Status                 online
Version                       1.7/1.7
Forwarding                    http://test.tunnel.ngrok.me -> 127.0.0.1:80
Forwarding                    https://test.tunnel.ngrok.me -> 127.0.0.1:80
Web Interface                 127.0.0.1:4040
# Conn                        0
Avg Conn Time                 0.00ms

如果出错了, 可以加参数看看什么原因
-log=stdout

错误的原因有可能是证书的原因,也可能是域名的原因, 必须保持与NGROK_DOMAIN相同
如果开了防火墙的话, 还必须开启80, 443, 4443端口

资料参考:
http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/
http://chuansong.me/n/341281851829
https://www.sunnyos.com/article-show-48.html
http://tonybai.com/2015/03/14/selfhost-ngrok-service/

### 回答1: 要搭建 ngrok 服务器,首先需要在本地安装 ngrok,安装完成后在命令行中输入 `ngrok authtoken <YOUR_AUTH_TOKEN>` 来设置认证令牌。 接下来,使用 `ngrok http <port>` 来启动服务,其中 <port> 是您要映射到公网的本地端口号。 例如,如果您的本地服务器运行在 80 端口上,则可以使用 `ngrok http 80` 启动服务。 启动后,将会得到一个公网 URL,可以将这个 URL 分享给其他人访问您的本地服务器。 注意:如果要使用自定义域名,需要购买 ngrok 高级版本。 ### 回答2: 搭建ngrok服务器是一种将内网服务暴露到公网的方法。首先需要在服务器上安装ngrok软件,可以通过官方网站下载对应的二进制文件。得到二进制文件后,解压并将可执行文件复制到系统的可执行路径下。 在服务器上创建一个用于存放ngrok配置文件和证书的目录,例如/opt/ngrok。在该目录下创建一个自定义的域名配置文件,例如ngrok.yml,用于配置需要暴露的服务和域名信息。在该文件中,我们需要配置tunnels部分,指定需要暴露的服务和端口号。 接下来,生成SSL证书用于支持HTTPS协议。运行以下命令: ``` # 生成CA私钥并自签名CA证书 $ openssl genrsa -out rootCA.key 2048 $ openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok" -days 3650 -out rootCA.pem # 生成服务器私钥和证书签名请求(CSR文件) $ openssl genrsa -out server.key 2048 $ openssl req -new -key server.key -subj "/CN=your-domain.com" -out server.csr # 使用CA私钥和签名请求生成服务器证书 $ openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 3650 ``` 将生成的证书文件(rootCA.pem和server.crt)放入ngrok服务器目录。 接下来需要配置ngrok客户端,将ngrok服务器的域名、端口和SSL证书配置到ngrok客户端中。在本地机器上下载和配置ngrok客户端,根据服务器上的域名和端口号进行配置。将生成的根证书rootCA.pem放入客户端的.ngrok文件夹里,并运行以下命令启动ngrok客户端: ``` $ ngrok client -config=ngrok.cfg -subdomain=subdomain your-service-host:port ``` 通过以上步骤,即可成功搭建ngrok服务器,实现将内网服务暴露到公网。接下来可以通过ngrok客户端访问公网上的服务,使用域名和端口号即可访问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值