通过FRP服务可以实现内网穿透,这样就能使树莓派获得一个公网ip,这样就能通过树莓派进行内网资源的访问,如内网的服务器,NAS等资源。当然了,FRP还是对具有公网ip的服务器带宽有一定的需求
FRP内网穿透原理简介
原理部分
FRP的工作原理很简单,我将数据发送给FRP的服务端,FRP服务端通过我访问的端口号判断这个数据是发送给哪个FRP客户端的,客户端收到数据之后,在将这个数据送给我们树莓派上的一个特定的进程,比如ssh,或者web服务器Apche中,返回的数据依旧原路返回给我们。在这个过程中,其实我们主机的感觉这个转发数据的过程是“透明的”。这就像,我们点了个外卖,饭店(相当于我们的客户端),外卖小哥(FRP服务端),我们(任意的外部主机),饭店把外卖(数据)交给外卖小哥,然后外卖小哥把外卖交给我们。中间外卖小哥怎么送外卖的过程我们是不需要了解的。
实例
上文我们说到了“透明的”,这里我们借助一个例子详细解释一下
比如我们经常用的SSH服务吧,现在,我们在云服务器上配置好了frp的服务端,打开了一个给frp客户端准备的端口7000。然后我们在客户端的配置文件中写上我们需要的端口比如6000,同时也写上frp服务端的ip和端口号7000.这样我们就等于持续不断的给云服务器的7000端口发送请求,一直告诉我们的frps服务端“访问云服务器6000端口的数据统统转发给我”,这样我们传送给云服务器6000端口的数据就能顺利的送达FRP客户端了。
接下来,我们在FRP客户端的配置信息填写我们需要将数据送达的进程的端口号22,这样数据就送给我们的SSH进程啦。
我们接下来要进行SSH链接,只需要填写服务器IP:6000 即可完成ssh链接,就相当于我们的树莓派在公网上可以直接链接一样,这个例子其实也是“透明传输”这个概念的一个实例。
准备工作
1.树莓派3B+(预先烧好最新的raspbian操作系统)
2.具有公网ip的服务器一台,我使用的是腾讯云的服务器
3.下载FRP的服务端与客户端(项目地址 https://github.com/fatedier/frp/releases)
在服务端上下载x86平台的release,在树莓派上下载arm用的release,版本为0.27.1
搭建FRP服务端
登录服务器,解压相关文件
cd /opt #进入opt文件夹
sudo wget https://github.com/fatedier/frp/releases/download/v0.27.1/frp_0.27.1_linux_amd64.tar.gz
tar -xzvf frp_0.27.1_linux_amd64.tar.gz#解压文件
进入相关文件夹后可以看到一系列文件,如下:
赋予相关文件相应的权限
其中frpc为frp的客户端,frps为frps的服务端,这里我们要记得给他们加上相关的权限:
sudo chmod -R 755 ./
进行配置信息的设置
之后我们修改frps.ini文件,内容如下:
- [common]
- bind_port = 7000 #frp服务端进程的端口,我们的frp客户端就需要链接这个端口
- token = icxbk.com #随意设置的一个token,作用类似于密码
保存文件后,启动FRPs:
./frps -c frps.ini
成功连接后会出现一系列的运行日志
保持程序的运行状态
如果是刚接触linux的同学,可能会发现当我们关掉ssh客户端的时候,我们当前运行的进程也会被kill掉,这时候我们引入一款新的工具,tmux,使用方式如下:
tmux #打开一个新的虚拟终端
这样我们就有一台虚拟终端啦,在这个虚拟终端里面运行frps,之后先按ctrl+b,再按下D键,就能退出虚拟终端了,但是虚拟终端里运行的进程以及不会关闭
进行frp客户端的配置工作
在树莓派上,上述下载文件赋予权限的操作都是一样的,主要区别为,在树莓派上我们与运行的是frpc这个可执行文件。
配置frpc文件
frpc的配置文件比较复杂,具体格式如下
- [common]
- server_addr = 127.0.0.1 #你的frps服务器的ip
- server_port = 7000 #我们之前设置的端口
- token=icxbk.com #我们之前设置的token
- [tag]
- type =
- local_ip = 127.0.0.1
- #这里暂时不需要设置,如果你的内网里面还有其他的机器需要使用frp,这里填写机器的ip就好了如192.168.1.105
- local_port = #你希望透传的端口
- remote_port = #你希望你公网服务器和你本地端口建立链接的端口
我的配置文件只涉及到ssh服务,端口配置如下:
- [common]
- server_addr = 127.0.0.1 #云服务器ip地址如193.xx.xx.xx,这里为了安全没有填真实的
- server_port = 7000
- token = icxbk.com
- [ssh]
- type = tcp
- local_ip = 127.0.0.1 #代表给本机
- local_port = 22
- remote_port = 6100 #这样写意味着,访问我服务器的6100端口,相当于访问我本地的22端口
保存配置文件之后,运行frpc:
./frpc -c frpc.ini
运行完成后,出现一系列提示信息,如下:
连通性测试
配置一下SSH客户端的信息(注意哦,这里我填的127.0.0.1是为了安全而隐去了我真实云服务器的地址,配置的时候应该填的是自己服务器真实的ip)
接下来就是激动人心的时刻啦,点击连接
连接成功~~,我们就在公网上成功部署了我们的树莓派服务器
这样我们就实现内网穿透了,使用树莓派用过ssh使其成为一个管理入口,可以实现远程管理家中设施的功能,通过修改配置文件,还可以实现web代理之类的功能
安全性提醒
因为树莓派的22端口已经穿透到公网了,所以一定要记得提前修改密码,不要用默认的pi raspbian了,很容易被人入侵,一旦你公网的树莓派被人拿下了,那么你家里所有的设备都可能受安全威胁。建议使用10位以上的随机生成的密码
- 0000000000000000
-
1888 发帖7917 回复34980 积分
- 私信他 +关注
块
导
航
举报
请选择举报类别
- 广告垃圾
- 违规内容
- 恶意灌水
- 重复发帖