NutzCN Logo
分享 教你搭建自己的ngrok服务器
发布于 26天前 作者 qq_38CDC5E69B2A563E7928B0740E48A759 30 次浏览 复制 上一个帖子
标签:

一、安装git

# 安装git
yum install git

二、安装GO语言环境,注意ngrok编译只支持1.15以下的版本


# 下载:golang安装包 golang官网下载地址: https://golang.google.cn/dl/ wget https://dl.google.com/go/go1.14.15.linux-amd64.tar.gz # 解压:解压压缩包到/usr/local目录 tar -C /usr/local -xzf go1.14.15.linux-amd64.tar.gz # 配置环境变量 vi /etc/profile # 最后一行添加 export PATH=$PATH:/usr/local/go/bin #让配置生效 source /etc/profile # 查看版本 go version #检查下go的env环境变量 go env

三、下载ngrok

# github.com 下载 ngrok源码
cd /usr/local/ 
git clone https://github.com/inconshreveable/ngrok.git

四、生成证书

# 域名xxx.com 换成自己的
cd /usr/local/ngrok
NGROK_DOMAIN="xxx.com"
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

五、 拷贝证书强制性覆盖ngrok原来的证书

\cp -rf rootCA.pem assets/client/tls/ngrokroot.crt 
\cp -rf  server.crt assets/server/tls/snakeoil.crt 
\cp -rf  server.key assets/server/tls/snakeoil.key

六、编译生成服务端

# 在/usr/local/ngrok/ 目录中编译生成服务端
GOOS=linux GOARCH=amd64 make release-server

七、编译生成客户端

# 64位linux客户端: 
GOOS=linux GOARCH=amd64 make release-client

#64位windows客户端: 
GOOS=windows GOARCH=amd64 make release-client

#64位mac平台客户端:
GOOS=darwin GOARCH=amd64 make release-client

#ARM平台linux客户端: 
GOOS=linux GOARCH=arm make release-client

# 生成客户端文件位置
/usr/local/ngrok/bin

八、启动服务

cd /usr/local/ngrok/bin

./ngrokd  -domain="xxx.com" -httpAddr=":800" -httpsAddr=":801" -tunnelAddr=":8443"

# 指定TLS证书和密钥
./ngrokd -tlsKey="/path/to/tls.key" -tlsCrt="/path/to/tls.crt" -domain="xxx.com" -httpAddr=":800" -httpsAddr=":801" -tunnelAddr=":8443"

九、客户端配置文件ngrok.yml

# 新建ngrok.yml
server_addr: xxx.com:8443
trust_host_root_certs: false

十、本地启动客户端

# 目录下打开命令行
# 然后使用以下任一命令运行ngrok:
ngrok -config ngrok.yml 8080
ngrok -config ngrok.yml -subdomain wx 8080 # 或者指定域名 wx.xxx.com


十一、 加入系统服务

1、使用 systemctl 创建 ngrok 服务

在/usr/lib/systemd/system目录添加 ngrok.service

ngrok.service

[Unit]
Description=ngrok
After=network.target
 
[Service]
Type=simple  
Restart=always
RestartSec=1min
ExecStart=/usr/local/ngrok/bin/ngrokd   -domain=xqzgg.cn -httpAddr=:800 -httpsAddr=:801 -tunnelAddr=:8443 %i
ExecStop=/usr/bin/killall ngrok
PrivateTmp=true

[Install]
WantedBy=multi-user.target

2、重载系统服务

systemctl daemon-reload

3、启动服务

systemctl start ngrok.service

4、设置开机启动

systemctl enable ngrok.service

5、ngrok服务命令

# 启动服务
systemctl start ngrok.service

# 停止服务
systemctl stop ngrok.service

# 重启服务
systemctl reload ngrok.service

# 检查服务状态
systemctl status ngrok.service

6、nginx.conf 配置文件

  • 因为我的80端口被nginx占用,所以我需要nginx转发ngrok的请求
# ngrok 穿透
server {
  listen       80;
  # 指定 *.xxx.com 泛型域名
  server_name  *.xxxx.com xxxx.com;

  location / {
    proxy_pass http://127.0.0.1:800;
    proxy_redirect off;
    proxy_set_header Host $http_host:800;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    expires 5s;
  }
}

额外篇

SSL证书

1、 申请域名证书

在阿里云申请免费的ssl,申请完成后等待签发,并下载证书Nginx

2、解析域名

xxxx.com 和 *.xxxx.com

3、替换证书

  • xxxx.com.key
  • xxxx.com.pem
# 服务端
xxxx.com.key 替换 assets/server/tls/snakeoil.key
xxxx.com.pem 替换 assets/server/tls/snakeoil.crt

# 客户端
xxxx.com.pem 替换 assets/client/tls/ngrokroot.crt

4、重新编译服务端及客户端

# 服务端
GOOS=linux GOARCH=amd64 make release-server

#64位windows客户端: 
GOOS=windows GOARCH=amd64 make release-client

5、启动服务

ngrokd -tlsKey=/usr/local/ngrok/assets/server/tls/snakeoil.key -tlsCrt=/usr/local/ngrok/assets/server/tls/snakeoil.crt  -domain=xxx.com -httpAddr=:800 -httpsAddr=:801 -tunnelAddr=:8443

6、更改nginx配置

  • 因为我的80端口被nginx占用,所以我需要nginx转发ngrok的请求
# nginx.conf 配置,需要开启ssl
server
{
    listen 80;
    listen 443 ssl http2;
    server_name *.xxxx.com xxxx.com;
    root /www/wwwroot/ngrok;
    gzip off;

    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    # 这里应该是你的域名证书
    ssl_certificate    /www/server/panel/vhost/cert/ngrok.com/fullchain.pem;
    ssl_certificate_key    /www/server/panel/vhost/cert/ngrok.com/privkey.pem;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    add_header Strict-Transport-Security "max-age=31536000";
    error_page 497  https://$host$request_uri;
    #SSL-END

    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }

    location / {
      proxy_pass http://127.0.0.1:800;
      proxy_redirect off;
      proxy_set_header Host $http_host:800;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      expires 5s;
    }

    access_log  /www/wwwlogs/ngrok.com.log;
    error_log  /www/wwwlogs/ngrok.com.error.log;
}

后续定制及优化

通过以上操作,我们的ngrok服务器就已经成功搭建了,客户端也成功的跑了起来。但是,如果我们想要对ngrok进行一些定制和优化,可以参考这些后续定制及优化的方法。

1、修改客户端ngrok默认服务地址

客户端每次还需要加载配置文件,这样显得有些麻烦。能不能像官方服务那样直接执行命令ngrok 80就能使用呢?我们只需要在编译客户端之前,稍作修改即可。同样,如果需要指定域名可以执行命令ngrok -subdomain=test 80来运行客户端。

#修改默认服务地址
vim ./src/ngrok/client/model.go
#找到第23行,将
defaultServerAddr = "ngrokd.ngrok.com:443"
#修改为defaultServerAddr = "ngrok.dingdayu.com:4443" 即可

2、修改客户端ngrok左上角蓝色文字logo

运行客户端后,我们会发现在客户端左上角会有一个蓝色字体的“ngrok”字样的文字logo,如果觉得不太喜欢,或者想修改一下的话,可以在编译客户端之前,作如下修改。

#修改客户端蓝色文字logo
Vim ./src/ngrok/client/views/term/view.go

找到第100行,将

v.APrin
tf(termbox.ColorBlue|termbox.AttrBold, 0, 0, "ngrok")

# 修改为
v.APrintf(termbox.ColorBlue|termbox.AttrBold, 0, 0, "your logo")

3、修改客户端帮助信息

ngrok客户端默认的帮助信息很少,我们可以在编译客户端之前,自己定制帮助内容。

#修改客户端默认帮助信息
vim ./src/ngrok/client/client/cli.go

4、客户端程序加壳优化

编译好的Windows客户端ngrok.exe大小为10MB,有点大,这样加载到内存中,需要读取硬盘的内容也相对较多,影响速度。所以,我们还可以给客户端程序加个压缩壳,对程序进行压缩。

# upx 官网地址
https://upx.github.io

# UPX (the Ultimate Packer for eXecutables)是一款先进的可运行程序文件压缩器。压缩过的可运行文件体积缩小50%-70% ,这样降低了磁盘占用空间、网络上传下载的时间和其他分布以及存储费用。
0 回复
添加回复
请先登陆
回到顶部