Ngrok内网穿透实现远程桌面

  内网穿透的主要目的: 让外网的计算机能访问内网的机器。
  说到内网穿透,第一反应想到的可能就是花生壳和向日葵软件,但因为它是收费的,所以今天我们借助一个开源项目Ngrok来搭建自己的内网穿透服务器。

材料准备

  1. CentOS(amd64 6.X或7.X)服务器
  2. 公网域名 (没有的可以去万网注册)
  3. SSH远程连接软件 (如Xshell, SecureCRT, putty等)

搭建Ngrok服务器(CentOS 6.X或7.X)

准备工作

  1. 安装gcc编译器
    1
    yum install gcc -y
  2. 安装git工具
    1
    yum install git -y
  3. 克隆Ngrok源码
    1
    git clone https://github.com/inconshreveable/ngrok.git
  4. 安装Go语言环境
    1
    2
    3
    wget https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz
    tar -C /usr/local -xzf go1.8.3.linux-amd64.tar.gz
    vim /etc/profile
    在profile文件末尾添加以下的内容:
    1
    2
    3
    #go lang
    export GOROOT=/usr/local/go
    export PATH=$PATH:$GOROOT/bin
    生效环境,并检查是否成功安装Go环境
    1
    2
    source /etc/profile
    go version

生成证书

1
2
3
4
5
6
7
8
9
10
11
12
cd /ngrok
mkdir cert
cd cert

#这里修改为自己的域名
NGROK_DOMAIN="my.domain.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

覆盖原本证书

1
2
3
yes|cp rootCA.pem /usr/local/ngrok/assets/client/tls/ngrokroot.crt
yes|cp device.crt /usr/local/ngrok/assets/server/tls/snakeoil.crt
yes|cp device.key /usr/local/ngrok/assets/server/tls/snakeoil.key

编译Ngrok

查看不同系统下的不同配置信息

  • Linux 平台 32 位系统:GOOS=linux GOARCH=386
  • Linux 平台 64 位系统:GOOS=linux GOARCH=amd64
  • Windows 平台 32 位系统:GOOS=windows GOARCH=386
  • Windows 平台 64 位系统:GOOS=windows GOARCH=amd64
  • MAC 平台 32 位系统:GOOS=darwin GOARCH=386
  • MAC 平台 64 位系统:GOOS=darwin GOARCH=amd64
  • ARM 平台:GOOS=linux GOARCH=arm

编译生成 Linux 服务端

1
GOOS=linux GOARCH=amd64 make release-server

编译生成 window 客户端
1
GOOS=windows GOARCH=amd64 make release-client

启动Ngrok服务

1
2
3
cd /usr/local/ngrok
# 注意domain修改为自己的域名,7788可以修改为自定义端口号
nohup ./bin/ngrokd -tlsKey="assets/server/tls/snakeoil.key" -tlsCrt="assets/server/tls/snakeoil.crt" -domain="my.domain.com" -httpAddr=":7788" &

Window客户端配置

ngrok配置文件

新建文件 ngrok.cfg

1
2
3
4
5
6
7
server_addr: "my.domain.com:4443"
trust_host_root_certs: false
tunnels:
mstsc:
remote_port: 56666
proto:
tcp: 127.0.0.1:3389

根据自己域名和端口信息修改server_addrremote_port

新建ngrok.bat

1
ngrok -config="ngrok.cfg" start mstsc

其中ngrok为之前编译的可执行文件ngrok.exe, 之前编译失败的可直接下载适用于windows 64位系统的ngrok程序 - ngrok-stable-windows-amd64.zip

运行ngrok.bat即可启动

Window开机ngrok自启动(非必选)

  1. 新建ngrok.vbe文件

  2. 写入以下程序

    1
    2
    set ws=wscript.createobject("wscript.shell")  
    ws.run "ngrok.bat /start",0
  3. 运行中启动 shell:startup

  4. 创建ngrok.vbe快捷方式拷贝到启动目录中

Window远程桌面连接

  1. 运行中启动 mstsc

  2. 输入ngrok服务器地址,用户和密码等

  3. 远程桌面成功效果图

文章作者: Shawn
文章链接: https://www.shawnlin.cn/ngrok/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Shawn's Blog
打赏
  • 微信
  • 支付宝

评论