Skip to content

Ngrok使用方式

Ngrok是一种内网穿透软件。 1.x版本是开源的 2.x版本是商业的版本也就是Ngrok官网提供的版本,并未开源。

软件是go语言编写的所以编译还是比较简单的。

Ngrok编译

以下脚本是来自简书的原创, 作者使用gitee做镜像加速github,经过尝试效果很不错,本人在Ubuntu wsl编译成功。

shell
export NGROK_DOMAIN="二级域名"
git clone https://gitee.com/OtherCopy/ngrok.git
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 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

# copy生成的证书到指定目录,编译需要
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key


# 生成客户端配置文件
mkdir bin
echo server_addr: "$NGROK_DOMAIN:4443" > bin/ngrok.cfg
echo trust_host_root_certs: false>> bin/ngrok.cfg

# 采用国内gitee镜像,提升编译速度
git clone -- https://gitee.com/mirrors/log4go.git src/github.com/alecthomas/log4go
git clone -- https://gitee.com/ngrok-install/websocket.git src/github.com/gorilla/websocket
git clone -- https://gitee.com/ngrok-install/go-vhost.git src/github.com/inconshreveable/go-vhost
git clone -- https://gitee.com/ngrok-install/mousetrap.git src/github.com/inconshreveable/mousetrap
git clone -- https://gitee.com/ngrok-install/go-bindata.git src/github.com/jteeuwen/go-bindata
git clone -- https://gitee.com/mirrors_addons/osext.git src/github.com/kardianos/osext
git clone -- https://gitee.com/ngrok-install/binarydist.git src/github.com/kr/binarydist
git clone -- https://gitee.com/GoLibs/go-runewidth.git src/github.com/mattn/go-runewidth
git clone -- https://gitee.com/ngrok-install/termbox-go.git src/github.com/nsf/termbox-go
git clone -- https://gitee.com/mirrors/go-metrics.git src/github.com/rcrowley/go-metrics

#linux server
GOOS=linux GOARCH=amd64 make release-server

#linux client
GOOS=linux GOARCH=amd64 make release-client
#window client
GOOS=windows GOARCH=amd64 make release-client
export NGROK_DOMAIN="二级域名"
git clone https://gitee.com/OtherCopy/ngrok.git
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 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

# copy生成的证书到指定目录,编译需要
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key


# 生成客户端配置文件
mkdir bin
echo server_addr: "$NGROK_DOMAIN:4443" > bin/ngrok.cfg
echo trust_host_root_certs: false>> bin/ngrok.cfg

# 采用国内gitee镜像,提升编译速度
git clone -- https://gitee.com/mirrors/log4go.git src/github.com/alecthomas/log4go
git clone -- https://gitee.com/ngrok-install/websocket.git src/github.com/gorilla/websocket
git clone -- https://gitee.com/ngrok-install/go-vhost.git src/github.com/inconshreveable/go-vhost
git clone -- https://gitee.com/ngrok-install/mousetrap.git src/github.com/inconshreveable/mousetrap
git clone -- https://gitee.com/ngrok-install/go-bindata.git src/github.com/jteeuwen/go-bindata
git clone -- https://gitee.com/mirrors_addons/osext.git src/github.com/kardianos/osext
git clone -- https://gitee.com/ngrok-install/binarydist.git src/github.com/kr/binarydist
git clone -- https://gitee.com/GoLibs/go-runewidth.git src/github.com/mattn/go-runewidth
git clone -- https://gitee.com/ngrok-install/termbox-go.git src/github.com/nsf/termbox-go
git clone -- https://gitee.com/mirrors/go-metrics.git src/github.com/rcrowley/go-metrics

#linux server
GOOS=linux GOARCH=amd64 make release-server

#linux client
GOOS=linux GOARCH=amd64 make release-client
#window client
GOOS=windows GOARCH=amd64 make release-client

Ngrok服务端

编译后的bin目录的ngrokd就是linux的服务脚本

shell
sudo ./ngrokd -log=stdout -domain="二级域名" -httpAddr=":40000" -httpsAddr=":40001" -tunnelAddr=":40002"
sudo ./ngrokd -log=stdout -domain="二级域名" -httpAddr=":40000" -httpsAddr=":40001" -tunnelAddr=":40002"

在服务器上运行这个程序,并添加a记录指向这个服务器的ip 一般用二级域名做主域名 三级域名做app的域名

Ngrok客户端

使用配置文件config.yaml

yaml
server_addr: "域名:40002"
trust_host_root_certs: false
tunnels:
    webapp:
        proto:
            http: 9090
        subdomain: test
    tcp3389:
        remote_port: 43389
        proto:
            tcp: 3389
server_addr: "域名:40002"
trust_host_root_certs: false
tunnels:
    webapp:
        proto:
            http: 9090
        subdomain: test
    tcp3389:
        remote_port: 43389
        proto:
            tcp: 3389

windows启动用的bat脚本(实测powershell脚本不好使)

bat
ngrok -subdomain test -config=ngrok.yml start tcp3389
pause
ngrok -subdomain test -config=ngrok.yml start tcp3389
pause

开启之后就可以使用。

实测效果是并没有比frp效果好。并且由于其程序依赖图形界面运行,后台运行还要使用nssm来配合。 所以总体上本人并不推荐。