本文主要介绍如何使用ngrok让可以外网访问内网中的树莓派

背景

本人家里有一台树莓派3b,常年开机,由于没有外网固定IP,所以在公司无法直接ssh链接到树莓派,于是想到了ngrok这个内网穿透工具。在这里写一篇文章,帮助有和我一样问题的朋友。

什么是ngrok

ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。

怎么使用ngrok

  1. 首先去官网注册一个ngrok账号,地址是https://ngrok.com/
  2. 下载ngrok,树莓派3b下载的是arm版的,这里你可以本地下载传到树莓派,也可以直接在树莓派上执行命令下载
   mkdir ngrok && wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-arm.zip
   #进入文件夹,解压
   cd ngrok
   unzip ngrok-stable-linux-arm.zip
   #如果提示没有unzip命令,先安装unzip
   apt-get install unzip
  1. 这时候要去官网找你的授权码,如图

    《利用 ngrok 让外网可以 ssh 访问内网的 树莓派 3b》

    箭头所指,后一面的一串就是你的授权码。
    或者去左侧 Auth

    《利用 ngrok 让外网可以 ssh 访问内网的 树莓派 3b》

    打码的地方就是你的授权码

  2. 然后在树莓派中执行

    ./ngrok authtoken xxxxxxxxx
    # xxxxxxx 换成你的授权码

    提示

    Authtoken saved to configuration file: /root/.ngrok2/ngrok.yml
    # 后面这个是我的路径,可能与你不一样

    证明保存你的认证信息成功

  3. 然后执行

    ./ngrok tcp 22

    然后提示

    ngrok by @inconshreveable     (Ctrl+C to quit)                                   
    
    Session Status                online 
    Account                       你的名字 (Plan: Free)
    Version                       2.2.8
    Region                        United States (us) 
    Web Interface                 http://127.0.0.1:4040
    Forwarding                    tcp://0.tcp.ngrok.io:14555-> localhost:22
    Connections                   ttl     opn     rt1     rt5     p50     p90
                                    7       0       0.00    0.00    0.61    600.26

    表明’0.tcp.ngrok.io’这个域名的14555端口已经转发到了你树莓派的22端口

  4. 然后你就可以通过XShell等工具连接树莓派。地址是:0.tcp.ngrok.io ,ssh端口是显示的端口,我这里是14555,然后点击连接,用户名密码还是你树莓派的用户名密码。这时候你就会发现已经可以ssh连接到你内网的树莓派了

怎么查看ngrok的转发情况

官网登录后左侧 Status

《利用 ngrok 让外网可以 ssh 访问内网的 树莓派 3b》
显示的就是你这个账号的所有转发情况,域名、端口、客户端地址、地区和转发开始时间都可以查看到

进阶

安装上面的步骤,你会发现,你关闭树莓派的ssh客户端后,转发会停止,这时候需要把ngrok放到你的后台运行,这里有很多方法,我使用的是比较简单的screen

# 首先安装screen
apt-get install screen
# 创建一个名字为ngrok的screen会话 (名字随意起)
screen -S ngrok
# 自动进入该会话 ,然后执行ngrok
./ngrok tcp 22
# Ctrl + A + D 退出该会话,会话会挂在后台
# 简单的 screen 命令
# 列出所有的会话
screen -ls
# 杀死某个会话
kill PID
# 恢复进入某个会话
screen -r 会话名字

结束语

这里只是介绍了ngrok最简单的用法,ngrok功能很强大,大家有兴趣深入学习的话可以去官网看一下。

发表评论