从互联网访问树莓派之二:frp内网穿透
本期将介绍从互联网访问树莓派的第二期——frp内网穿透。实现内网穿透的软件有很多,有商业的,也有开源免费的,比如花生壳、nps、ngrok、frp。我也均有尝试体验,综合比较下来,frp的配置是相对简单的,而且方便扩展使用,本期主要介绍frp实现内网穿透远程访问树莓派。当然了,了解了如何实现内网穿透之后,你还可以通过frp实现其他方面的内网穿透访问。但请时刻谨记,不要随便穿透商业企业内网,除非你了解其中的安全风险或者设置好相应的安全措施。
1. frp内网穿透概述
frp是一个免费开源的用于内网穿透的反向代理应用,可以称为新一代高性能内网穿透工具,它支持TCP、UDP协议,也为http和https协议提供了额外的支持。当然要实现对内网的访问,你还是需要一台能够在公网访问的服务器来布置frp服务端,作为你的中转站,帮你实现公网←→frp服务器(中转站)←→内网的连接,让内网里的设备也可以被公网访问到。
frp本身是一个开源项目,作者是个中国人,在github上开源( https://github.com/fatedier/frp ),也有很详细的中文文档介绍。
2. 服务端配置
服务端配置以腾讯云轻量服务器(lighthouse)为例,系统为Ubuntu 18.04 LTS。
首先,到github选择适合服务端的版本,选择frp_0.36.2_linux_amd64.tar.gz
。然后登录到云服务器进行设置。
wget https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz
tar -xzvf frp_0.36.2_linux_amd64.tar.gz
然后可以看到相关文件目录。
frp_0.36.2_linux_amd64/
frp_0.36.2_linux_amd64/frps_full.ini
frp_0.36.2_linux_amd64/frps.ini
frp_0.36.2_linux_amd64/frpc
frp_0.36.2_linux_amd64/frpc_full.ini
frp_0.36.2_linux_amd64/frps
frp_0.36.2_linux_amd64/LICENSE
frp_0.36.2_linux_amd64/frpc.ini
frp_0.36.2_linux_amd64/systemd/
frp_0.36.2_linux_amd64/systemd/frpc@.service
frp_0.36.2_linux_amd64/systemd/frpc.service
frp_0.36.2_linux_amd64/systemd/frps.service
frp_0.36.2_linux_amd64/systemd/frps@.service
其中,frpc
为客户端程序,frps
为服务端程序,*.ini
是配置文件,*.service
是systemd服务配置文件。
先看一下systemd服务配置文件,frps.service
内容如下:
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini
[Install]
WantedBy=multi-user.target
frps_full.ini
配置文件内容很长,有兴趣大家可以自行查看学习,本处只是介绍ssh远程访问树莓派的相关配置,具体如下:
//frps.ini
[common]
bind_port = 7000
端口可以自行填写,但要注意打开云服务相关安全策略,将相应端口打开。
接下来,根据服务配置文件,将服务端程序frps
放到/usr/bin/
目录下,将frps.ini
放到/etc/frp/
目录下,将frps.service
放到/etc/systemd/system/
目录下。具体的程序位置你也可以选择自己设置的目录,但要注意修改服务文件中相应的目录地址。
//相应命令均以root权限运行
mv frps /usr/bin/
mkdir /etc/frp
mv frps.ini /etc/frp/
mv frps.service /etc/systemd/system/
systemctl daemon-reload //更新服务
systemctl enable frps.service //开启服务
这样就通过systemd服务实现了服务端frps程序开机自动启动。服务端至此已经配置完成。对于ssh远程访问,我们在服务端也只是配置了frp的远程访问端口就够了。
3.客户端配置
客户端上我们以树莓派设置为例,首先选择客户端版本frp_0.36.2_linux_arm.tar.gz
。然后登陆树莓派进行配置。
由于基本配置与服务端基本一致,可参照下方命令进行配置。
wget https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_arm.tar.gz #下载程序版本
tar -xzvf frp_0.36.2_linux_arm.tar.gz #解压
客户端frpc.service
内容如下:
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini
ExecReload=/usr/bin/frpc reload -c /etc/frp/frpc.ini
[Install]
WantedBy=multi-user.target
修改并设置frpc.ini
内容如下:
[common]
server_addr = x.x.x.x #服务器ip地址
server_port = 7000 #服务器端口
[ssh_pi] #服务设置名称,中括号内可自行命名
type = tcp #服务类型
local_ip = 127.0.0.1 #本地ip地址
local_port = 22 #本地端口,ssh本地端口号
remote_port = 9999 #内网穿透外网访问端口,可自行设置,但需将服务器端相应端口打开
接下来,按照如下命令完成配置。
//相应命令均以root权限运行
mv frpc /usr/bin/
mkdir /etc/frp
mv frpc.ini /etc/frp/
mv frpc.service /etc/systemd/system/
systemctl daemon-reload //更新服务
systemctl enable frpc.service //开启服务
这样就通过systemd服务实现了服务端frpc程序开机自动启动。树莓派客户端至此已经配置完成。
对于树莓派ssh远程访问,可以通过ssh -p 9999 pi@x.x.x.x
即可实现通过互联网的远程访问。
同样的,对于其他类型的服务只需相应修改客户端或服务端配置即可。
#frpc.ini
[vnc_pi] #远程vnc服务
type = tcp
local_ip = 127.0.0.1
local_port = 5900
remote_port = 1111
[pi4_smb] #远程smb服务
type = tcp
local_ip = 127.0.0.1
local_port = 445
remote_port = 2222
[msdp] #windows远程访问
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 3333
以上这些只需修改客户端即可。
本期内容就到这里,Enjoy!
欢迎关注我的公众号,持续更新中~~~
![](https://img2020.cnblogs.com/blog/2225380/202011/2225380-20201125125227716-1786541152.jpg)