[分享] 用树莓派搭建内网穿透家庭入口
1173 查看
5 回复
 楼主 | 发布于 2019-07-23 | 只看楼主
分享到:

通过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文件,内容如下:

  1. [common]
  2. bind_port = 7000 #frp服务端进程的端口,我们的frp客户端就需要链接这个端口
  3. token = icxbk.com #随意设置的一个token,作用类似于密码

保存文件后,启动FRPs:

./frps -c frps.ini

成功连接后会出现一系列的运行日志

保持程序的运行状态

如果是刚接触linux的同学,可能会发现当我们关掉ssh客户端的时候,我们当前运行的进程也会被kill掉,这时候我们引入一款新的工具,tmux,使用方式如下:

tmux #打开一个新的虚拟终端

这样我们就有一台虚拟终端啦,在这个虚拟终端里面运行frps,之后先按ctrl+b,再按下D键,就能退出虚拟终端了,但是虚拟终端里运行的进程以及不会关闭

进行frp客户端的配置工作

在树莓派上,上述下载文件赋予权限的操作都是一样的,主要区别为,在树莓派上我们与运行的是frpc这个可执行文件。

配置frpc文件

frpc的配置文件比较复杂,具体格式如下

  1. [common]
  2. server_addr = 127.0.0.1 #你的frps服务器的ip
  3. server_port = 7000 #我们之前设置的端口
  4. token=icxbk.com #我们之前设置的token
  5. [tag]
  6. type =
  7. local_ip = 127.0.0.1
  8. #这里暂时不需要设置,如果你的内网里面还有其他的机器需要使用frp,这里填写机器的ip就好了如192.168.1.105
  9. local_port = #你希望透传的端口
  10. remote_port = #你希望你公网服务器和你本地端口建立链接的端口

我的配置文件只涉及到ssh服务,端口配置如下:

  1. [common]
  2. server_addr = 127.0.0.1 #云服务器ip地址如193.xx.xx.xx,这里为了安全没有填真实的
  3. server_port = 7000
  4. token = icxbk.com
  5. [ssh]
  6. type = tcp
  7. local_ip = 127.0.0.1 #代表给本机
  8. local_port = 22
  9. remote_port = 6100 #这样写意味着,访问我服务器的6100端口,相当于访问我本地的22端口

保存配置文件之后,运行frpc:

./frpc -c frpc.ini

运行完成后,出现一系列提示信息,如下:

连通性测试

配置一下SSH客户端的信息(注意哦,这里我填的127.0.0.1是为了安全而隐去了我真实云服务器的地址,配置的时候应该填的是自己服务器真实的ip)

接下来就是激动人心的时刻啦,点击连接

连接成功~~,我们就在公网上成功部署了我们的树莓派服务器
这样我们就实现内网穿透了,使用树莓派用过ssh使其成为一个管理入口,可以实现远程管理家中设施的功能,通过修改配置文件,还可以实现web代理之类的功能


安全性提醒

因为树莓派的22端口已经穿透到公网了,所以一定要记得提前修改密码,不要用默认的pi raspbian了,很容易被人入侵,一旦你公网的树莓派被人拿下了,那么你家里所有的设备都可能受安全威胁。建议使用10位以上的随机生成的密码

(1 ) (1 )
回复 举报

回复于 2019-07-24 沙发

谢谢分享!!!
(0 )
评论 (0) 举报

回复于 2019-07-24 2#

谢谢分享
(0 )
评论 (0) 举报

回复于 2019-07-26 3#

感谢分享
(0 )
评论 (0) 举报

回复于 2019-07-27 4#

支持下,谢谢分享!
(0 )
评论 (0) 举报

回复于 2019-08-07 5#

谢谢分享!!!
(0 )
评论 (0) 举报
  • 发表回复
    0/3000





    举报

    请选择举报类别

    • 广告垃圾
    • 违规内容
    • 恶意灌水
    • 重复发帖

    全部板块

    返回顶部