从互联网访问树莓派之二: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!

欢迎关注我的公众号,持续更新中~~~

posted @ 2021-05-18 23:35  就是为了好玩  阅读(491)  评论(0编辑  收藏  举报