利用frp透穿访问内网的树莓派

mac上安装树莓派系统

  1. 下载最新的树莓派 (点此下载)
  2. 解压zip文件得到 *.img 文件
  3. 把内存卡连接到电脑上,确认内存卡的标识:df -h
  4. 第3步得到了内存卡的标识,它可能类似于:/dev/disk2s1,卸载它:diskutil unmount /dev/disk2s1
  5. 使用dd命令把 *.img 文件刻录到内存卡上:dd bs=40m if=xxx.img of=/dev/disk2s1,这一步会经历一段非常长且看起来无响应的时间,我的镜像大概4G+,跑了有20分钟

    如果想要看看dd的进度,可以使用 sudo killall -29 dd

  6. 镜像写入完毕不要急着拔掉内存卡,terminal进入内存卡(如果不知道怎么进入,可以用访达打开内存卡的boot目录,然后拖个文件到terminal就行了)touch ssh 创建个空文件
  7. diskutil unmountDisk /dev/disk1 卸载内存卡,系统安装完成

安装frp进行透穿

服务器设置
  1. 下载最新版frp程序到电脑上,注意需要下载服务器对应的版本,我的vps下载的是amd64的版本。这里不直接用vps下是因为curl wget我都失败了。。。
  2. scp -p $服务器ssh端口 $frp.tar $服务器用户名@$服务器地址:文件上传后的目录将tar上传至vps
  3. 到vps中tar zxvf $frp.tar 解压frp程序
  4. 设置frps.ini,我大概设置成这样:
[common]
bind_addr = 服务器地址
bind_port = 7000
dashboard_port = 7500
dashboard_user = dashboard用户名
dashboard_pwd = dashboard密码
vhost_http_port = 8080
  1. nohup ./frps -c ./frps.ini 跑起程序
设置客户端
  1. 下载最新版frp程序到电脑上,不直接下到树莓派上的理由同服务端
  2. 使用sftp把frp程序上传到树莓派
  3. 解压frp并设置frpc.ini,我大概 设置成:
[common]
server_addr = 服务器ip
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

[web]
type = http
local_port = 8000  // 这个端口是之后本地的web服务使用的端口
custom_domains = 个人域名
  1. nohup ./frpc -c ./frpc.ini 跑起程序

验证是否成功布署

验证 ssh 是否可以连接:

ssh -oPort=7000 pi@个人域名,正常的话将以ssh的方式进入树莓派

这里的端口7000就是 frps.ini 里设置的 bind_port

验证 http 是否可以访问:
  1. 随便找个目录,执行python -m SimpleHTTPServer 8000来创建一个简单的服务器

这里的端口 8000 对应的是 frpc.ini 里 web 块下的 local_port

  1. 浏览器访问域名或服务器,记得带上端口,比如我的:eraise.xyz:8080,如果正常将会打开一个简单的网页并显示你树莓派下某个文件夹的列表

这里的端口 8080 是 frps.ini 里设置的vhost_http_port

你可能会碰上的问题

  1. 通过frp进行ssh连接的时候,提示ssh_exchange_identification: read: Connection reset by peer
    这可能是你的服务器时间跟树莓派时间相差太多导致的,我将两者都设置为香港时间问题解决
  2. 通过frp进行ssh连接的时候,提示ssh: connect to host 192.243.113.148 port 7000: Connection refused
    这可能是你的树莓派的frpc没有启动导致的,试着启动一下frpc吧
  3. pip3 执行的时候,提示:cannot import name 'main' error after upgrading pip
    这可能是先前使用pip安装包,安装失败导致的,我现在的解决方案是:sudo python3 -m pip uninstall pip
  4. 安装mysql,但却找不着默认密码,mysql -u root -p 进不去
    试一下root权限执行 mysql 吧
  5. ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?
    可能是缺少ssl库,试一下sudo apt install libssl-dev

参考资料:

推荐阅读更多精彩内容