ngrok 是基于 go 语言开发的,因此需要先在服务器 A 上安装 go
前往 go 官网下载安装包
cd ~
wget https://dl.google.com/go/go1.12.7.linux-amd64.tar.gz
tar -C /usr/local -zxvf go1.12.7.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin # 配置环境路径
go version # 验证安装
显示
go version go1.12.7 linux/amd64
安装成功
注意:不要使用 apt 的方式来安装 go,不然编译时可能会因为go语言版本较低会产生像下面这样的错误
package context: unrecognized import path "context" (import path does not begin with hostname)
package net/http/httptrace: unrecognized import path "net/http/httptrace" (import path does not begin with hostname)
Makefile:8: recipe for target 'deps' failed
make: *** [deps] Error 1
如果已经通过apt 安装,可以通过下面方法来卸载
go env # 查看go安装的位置
apt remove golang
apt autoremove
rm -r go安装的位置
git clone https://github.com/inconshreveable/ngrok.git
cd ngrok
使用ngrok.com官方服务时,我们使用的是官方的SSL证书。自己建立ngrok服务,需要我们生成自己的证书,并提供携带该证书的ngrok客户端。首先指定域名:
export NGROK_DOMAIN="ngrok.example.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 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
我们在编译可执行文件之前,需要把生成的证书分别替换到 assets/client/tls
和assets/server/tls
中,这两个目录分别存放着 ngrok 和 ngrokd 的默认证书。
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
make release-server # 会在 ngrok/bin/ 目录下生成 go-bindata 和 ngrokd 这个文件
GOOS=windows GOARCH=amd64 make release-client # 会在 ngrok/bin/windows_amd64/ 目录下生成 ngrok.exe 这个文件
bin/ngrokd -tlsKey="assets/server/tls/snakeoil.key" -tlsCrt="assets/server/tls/snakeoil.crt" -domain="ngrok.example.com" -httpAddr=":6060" -httpsAddr=":6061"
其中 httpAddr=":6060" 是内网的http穿透出来,外网对应的端口
同样 httpsAddr=":6061" 是内网的https穿透出来,外网对应的端口
二者都可以自定义
设置 A 解析,将 ngrok.example.com 解析到 服务器 A 的 IP 上
要是该电脑未设置密码,需要到 控制面板\用户帐户和家庭安全\用户帐户
中设置一个复杂一点的密码
将服务器A中刚才生成的 ngrok.exe 文件下载下来,并在同一个目录下新建 ngrok.cfg
和 ngrok.bat
两个文件。
编辑 ngrok.cfg
server_addr: "ngrok.example.com:4443"
trust_host_root_certs: false
tunnels:
mstsc:
remote_port: 50123
proto:
tcp: "127.0.0.1:3389"
remote_port
可以随意指定
编辑 ngrok.bat
ngrok.exe -config=ngrok.cfg start mstsc
双击 ngrok.bat
连接成功
创建远程桌面连接,输入刚才设置好的电脑 B 的密码
连接成功,只是由于服务器 A 是在美国,所以连接时间很长,搭在国内会比较好