搭建ngrok服务器

搭建ngrok服务器

apt-get install build-essential golang mercurial git     安装git 和Golang

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

生成签名或申请SSL证书

cd ngrok

NGROK_DOMAIN=”ngrok.xxx.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

替换证书

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

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

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

编译

make release-server release-client

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

启动服务端

./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain=“ngrok.xxx.com” -httpAddr=“:880” -httpsAddr=“:8443”

httpAddr、httpsAddr 分别是 ngrok 用来转发 http、https 服务的端口,可以随意指定。ngrokd 还会开一个 4443 端口用来跟客户端通讯(可通过 -tunnelAddr=”:xxx” 指定)。

服务端配置

设置为系统程序,并后台运行,在/etc/systemd/system/目录下创建服务ngrok.service,内容为

[Unit]
Description=ngrok server
After=network.target

[Service]

Type=simple
ExecStart=/opt/ngrok/ngrok/bin/ngrokd -tlsKey=/myweb/ngrok/server.key -tlsCrt=/myweb/ngrok/server.crt -domain=”ngrok.xxx.com” -httpAddr=”:80″ -httpsAddr=”:443″ -log "/var/log/ngrokd.log"

Restart=on-failure

[Install]
WantedBy=multi-user.target

systemctl start ngrok.service启动服务

使用服务

sudo systemctl enable ngrokd
sudo systemctl start ngrokd
sudo systemctl status ngrokd

编译客户端

(1)windows

GOOS=windows GOARCH=amd64 make release-client

(2)mac

GOOS=darwin GOARCH=amd64 make release-client

#linux客户端
GOOS=linux GOARCH=amd64(386) make release-client
#linux服务端
GOOS=linux GOARCH=386 make release-server

客户端配置

执行对应的命令会在bin目录下生成相对应的windows、mac目录,ngrok.exe就存放在对应目录下。将对应的ngrok.exe下载到本地。

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

server_addr: “ngrok.xxx.com:4443”

trust_host_root_certs: false

同级目录下新建一个启动脚本startup.bat

@echo on

cd %cd%

#ngrok -proto=tcp 22

#ngrok start web

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

 

客户端服务添加到 systemd 自启动服务中,保存下面内容到文件 /lib/systemd/system/ngrok.service

[Unit]
Description=ngrok client
After=network.target

[Service]
Type=simple
ExecStart=/opt/ngrok/ngrok -config "/opt/ngrok/ngrok.yml" -log "/var/log/ngrok.log" start transmission ssh
Restart=on-failure

[Install]
WantedBy=multi-user.target

ExecStart 加载了配置文件 /opt/ngrok/ngrok.ym
server_addr: ngrok.xxx.com:4443
trust_host_root_certs: false
tunnels:
  transmission:
    remote_port: 9091
    proto:
      tcp: 9091
  ssh:
    remote_port: 23333
    proto:
      tcp: 22

FYI:

Can’t load /root/.rnd into RNG

cd /root
openssl rand -writerand .rnd

ping ngrok.xxx.com 提示找不到 host, 直接把域名和 IP 写到内服务器的 /etc/hosts 文件上

You must be logged in to post a comment