我们知道,在同一个局域网内,可以很容易的通过 SSH 和 XRDP 来登录到树莓派中。但很多时候,我们需要在外网登录到树莓派,比如,在公司登录到家里的树莓派。
通过在家里的路由器上设置端口映射,是可以实现外网访问的,但有个致命的缺点:家用宽带都是动态 IP。
那么,有没有其它方法呢?借助 frp 这个开源工具就可以。
要使用 frp 实现外网登录的目标,首先你得有一台带公网固定 IP 的 VPS(或云主机)
虽然本文讲述的是外网登录树莓派,但它可应用于更多场景:
树莓派 3B+
frp 分为 frps
和 frpc
,它们在同一个压缩包里。frps
用于服务端,frpc
用于客户端。
到 https://github.com/fatedier/frp/releases 下载最新版的 frp。由于我的服务器是 CentOS 7 x64,所以我下载的是 frp_0.21.0_linux_amd64.tar.gz
。
cd /opt
wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_amd64.tar.gz
frp
使用的 go 语言编写,所以下载好之后,直接解压就可以了:
tar zxvf frp_0.21.0_linux_amd64.tar.gz
服务端使用 frps
,配置文件为 frps.ini
。
通常,frps.ini
可以不做任何修改:
[common] bind_port = 7000
创建一个 frps.conf
文件,让 supervisor
管理:
[program:frps] directory=/opt/frp_0.21.0_linux_amd64 command=/opt/frp_0.21.0_linux_amd64/frps -c /opt/frp_0.21.0_linux_amd64/frps.ini autostart=true autorestart=true startsecs=10 stdout_logfile=/var/log/frps/stdout.log stdout_logfile_maxbytes=1MB stdout_logfile_backups=10 stdout_capture_maxbytes=1MB stderr_logfile=/var/log/frps/stderr.log stderr_logfile_maxbytes=1MB stderr_logfile_backups=10 stderr_capture_maxbytes=1MB
让 supervisor 载入并管理:
mkdir -p /var/log/frps supervisorctl supervisor> reload Really restart the remote supervisord process y/N? y
至此,服务端配置完毕。
下载树莓派对应的 frp:
cd /opt
sudo wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_arm.tar.gz
sudo tar zxvf frp_0.21.0_linux_arm.tar.gz
客户端使用 frpc
和 frpc.ini
配置文件。
sudo vim /opt/frp_0.21.0_linux_arm/frpc.ini
输入以下内容:
[common] server_addr = 12.34.56.78 # 改成你的vps的ip server_port = 7000 # 和你的服务器里的 frps.ini 配置的端口保持一致 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 # 本机端口 remote_port = 6022 # 映射到服务器的端口 use_encryption = true use_compression = true
配置之后,树莓派的 22 端口将被映射到服务器的 6022 端口。在外网,只要通过 服务器ip:6022
就能访问到树莓派的 22 端口。
创建一个 frpc.conf
文件,让 supervisor
管理:
[program:frpc] directory=/opt/frp_0.21.0_linux_arm command=/opt/frp_0.21.0_linux_arm/frpc -c /opt/frp_0.21.0_linux_arm/frpc.ini autostart=true autorestart=true startsecs=10 stdout_logfile=/var/log/frpc/stdout.log stdout_logfile_maxbytes=1MB stdout_logfile_backups=10 stdout_capture_maxbytes=1MB stderr_logfile=/var/log/frpc/stderr.log stderr_logfile_maxbytes=1MB stderr_logfile_backups=10 stderr_capture_maxbytes=1MB
让 supervisor 载入并管理:
sudo mkdir -p /var/log/frpc sudo supervisorctl supervisor> reload Really restart the remote supervisord process y/N? y
至此,客户端配置完毕。
现在,在外网,可以这样连接到树莓派的 SSH:
ssh -p 6022 [email protected]
安装好 xrdp 之后,你可以使用和 ssh 一样的方式来处理。注意,服务端不需要做任何改动,只要在树莓派的 frpc.ini
加上以下内容,并重载 supervisor 的配置即可:
sudo vim /opt/frp_0.21.0_linux_arm/frpc.ini
添加以下内容:
[xrdp] type = tcp local_ip = 127.0.0.1 local_port = 3389 remote_port = 43389 use_encryption = true use_compression = true
使用 Windows 的远程桌面连接即可。注意,连接时需要指定端口:
12.34.56.78:43389