5,树莓派3B+ 使用 Frp 实现内网穿透,公网访问web服务器,设置自动启动,后台运行。 (新人向)

5,树莓派3B+ 使用 Frp 实现内网穿透,公网访问web服务器,设置自动启动,后台运行。 (新人向)_第1张图片

内网穿透

就是让没有固定公网 ip 的内网的服务器,暴露在公网之上,从而在外网可以访问。

基于这个工具,不但可以让外部网络访问内网的web服务器,也可以访问我们自建的NAS服务器(私有云)等等,各种网络服务,相当于有了固定的公网ip 。

可以实现内网穿透的工具有很多,这里用到的工具就是非常简单又好用的反向代理 Frp !(详细介绍)

上一篇,在树莓派3B+ (Raspbian 4.14) 上安装了web环境,装上了 typecho 博客,但是只能内网访问,现在通过设置 Frp,让没有固定公网 ip的树莓派,实现外网访问。

下文所需的工具,一台外网的VPS,一个域名,Frp服务端,Frp客户端,搭建好web服务器的树莓派。

 

Frp

讲一个比喻,说一下Frp的基本思路。

5,树莓派3B+ 使用 Frp 实现内网穿透,公网访问web服务器,设置自动启动,后台运行。 (新人向)_第2张图片

你坐在屋里,屋外的友人想跟你聊天,但是你们说的话,彼此都听不到,这屋子隔音真是特别好!
这时候你妈妈在屋外,她跟你有一个纸杯电话!
然后通过妈妈的转述,你和友人可以聊天了!

好了,不要吐槽我的画功。

Frp客户端装在树莓派3B+上,树莓派每次开机,Frp客户端会通过网络,告诉在外网VPS上的Frp服务端,我现在ip地址是什么什么,然后VPS服务器上的Frp端会把我们之前绑到这台VPS上的域名,指向到Frp客户端报告上来的ip 。这样在外网访问我们的域名,就可以访问到内网的树莓派了。

 

实际操作

域名的购买和申请,VPS的购买和基本配置,这里不具体介绍了,网上教程很多,不同的服务提供商具体的操作也不同,但原理相同!

VPS,我用的是一个很小的服务器,内存只有128M,使用的Centos 7 64bit Minimal 系统。

域名购买后,在域名管理后台,添加两条A记录,分别是 @ 和 WWW,都指向到自己的VPS服务器ip地址(A记录指向的必须是ip地址,免费的二级域名不可以)。

 

VPS上配置服务器端

Frp用起来很简单,通过SSH,使用root 帐号登陆 VPS服务器,下载解压,然后配置Frp的基本信息,运行Frp,即可。

https://github.com/fatedier/frp/releases 这里有很多不同版本的Frp程序,可以选择最新版进行安装。

下面提供两个安装方式,选一个就行(推荐第二种):

  1. 第一个方式是自行下载安装,需要手动修改配置文件。(可以选择任何版本,安装完成后需要手动设置开机自动启动)
  2. 第二个是一键脚本,自动下载安装,再跟着步骤一个个填写配置,完成安装。(只能安装脚本自动选择的最新版,默认加入开机自动启动)(由koolshare的Clang制作)

第一种方式:

以当前最新版 v0.26.0 举例,如果用其他版本号的程序,需要自己修改下面命令中的文件名。

以root 用户通过 SSH 登陆VPS后,依次输入以下命令:

wget https://github.com/fatedier/frp/releases/download/v0.26.0/frp_0.26.0_linux_arm.tar.gz
tar -zxvf frp_0.26.0_linux_arm.tar.gz
cd frp_0.26.0_linux_arm
nano frps.ini

第一行是下载Frp,第二行是解压,第三行是进入解压后Frp的目录,第四行打开配置文件。

Frp 服务端会有一个dashboard 管理页,在配置文件中也得配置一下。
# 号后面是注释的内容,不影响代码运行。
有不想运行的代码,在前面加上 # 号也可以。
[common]区域为必要内容,所需信息必须填写。

具体如下:

[common]
dashboard_user = username # 服务端控制面板访问账号的名称
dashboard_pwd = password # 服务端控制面板访问账号的密码
token = access_token # 客户端连接令牌秘钥,可以随便写一串字符做为
subdomain_host = xxx.xxx.xxx.xxx # VPS的ip

###########下列配置默认也可以,无需改动###############
bind_addr = 0.0.0.0 # 地址 (0.0.0.0表示允许任何地址)
bind_port = 7000 # 穿透监听的端口,可以自定义
bind_udp_port = 7001 # udp协议监听端口,可以自定义
kcp_bind_port = 7000 # udp协议支持kcp模式。kcp的运行端口,不设置表示禁用,也可以与'bind_port'端口一致

#内网服务使用的端口,可以自己添加多个
vhost_http_port = 80 # 虚拟主机穿透监听端口 (80端口是http默认的端口)
vhost_https_port = 443 # 虚拟主机穿透监听端口(443端口是https默认的访问端口)

dashboard_addr = 0.0.0.0 # 服务端管理页访问的地址,写VPS的ip即可
dashboard_port = 7500 # 服务端管理页地址的端口,可以自定义

log_file = ./frps.log # frp日志记录路径
log_level = info # 日志记录级别(trace, debug, info, warn, error),默认info
log_max_days = 3 # 日志记录天数,默认3,超过3天自动覆盖
heartbeat_timeout = 90 # 客户端与服务端连接心跳检测,默认就行
#allow_ports = 1000-100000 # 允许客户端使用的穿透端口,不设置则全部允许
max_pool_count = 5 # 穿透服务允许的连接数
max_ports_per_client = 0 # 单个客户端允许建立的穿透服务,0为不限制
authentication_timeout = 900 # 连接超时
tcp_mux = true # tcp流多路复用(可以理解为优化传输) 

设置完成后执行下面这个,启动即可。

./frps -c frps.ini

 

第二种方式:

一键脚本安装服务端,以root 用户通过 SSH 登陆VPS后,依次输入以下命令:

wget --no-check-certificate https://raw.githubusercontent.com/clangcn/onekey-install-shell/master/frps/install-frps.sh -O ./install-frps.sh
chmod 700 ./install-frps.sh
./install-frps.sh install

第一行,下载脚本,脚本包涵自动下载安装。第二行,取得权限。第三行,运行脚本。

稍等片刻后,会询问我们配置信息,根据自己的情况进行填写。

Loading network version for frps, please wait...
frps Latest release file frp_0.8.1_linux_amd64.tar.gz    #此步骤会自动获取frp最新版本,自动操作,无需理会
Loading You Server IP, please wait...
You Server IP:xxx.xxx.xxx.xxx                                #自动获取你服务器的IP地址
Please input your server setting:

Please input frps bind_port [1-65535](Default Server Port: 5443):      #输入frp提供服务的端口,用于服务器端和客户端通信
Please input frps dashboard_port [1-65535](Default dashboard_port: 6443): #输入frp的控制台服务端口,用于查看frp工作状态
Please input frps vhost_http_port [1-65535](Default vhost_http_port: 80):  #输入frp进行http穿透的http服务端口
Please input frps vhost_https_port [1-65535](Default vhost_https_port: 443): #输入frp进行https穿透的https服务端口
Please input privilege_token (Default: WEWLRgwRjIJVPx2kuqzkGnvuftPLQniq): #输入frp服务器和客户端通信的秘钥,默认是随机生成的,也可以自己打一串字符。
Please input frps max_pool_count [1-200](Default max_pool_count: 50):     #设置每个代理可以创建的连接池上限,默认50

##### Please select log_level #####
1: info
2: warn
3: error
4: debug
#####################################################
Enter your choice (1, 2, 3, 4 or exit. default [1]):        #设置日志等级,4个选项,默认是info,exit 会跳出安装流程


Please input frps log_max_days [1-30]
(Default log_max_days: 3 day):            #设置日志保留天数,范围是1到30天,默认保留3天。

##### Please select log_file #####
1: enable
2: disable
#####################################################
Enter your choice (1, 2 or exit. default [1]):      #设置是否开启日志记录,默认开启,开启后日志等级及保留天数生效,否则等级和保留天数无效

设置完成后,检查一遍,没问题了按任意键继续安装。

============== Check your input ==============
You Server IP   : xxx.xxx.xxx.xxx 
Bind port       : 5443
Dashboard port  : 6443
vhost http port : 80
vhost https port: 443
Privilege token : WEWLRgwRjIJVPx2kuqzkGnvuftPLQniq
Max Pool count  : 50
Log level       : info
Log max days    : 3
Log file        : enable
==============================================

安装结束后显示:

Congratulations, frps install completed!
==============================================
You Server IP   : xxx.xxx.xxx.xxx
Bind port       : 5443
Dashboard port  : 6443
vhost http port : 80
vhost https port: 443
Privilege token : WEWLRgwRjIJVPx2kuqzkGnvuftPLQniq
Max Pool count  : 50
Log level       : info
Log max days    : 3
Log file        : enable          
==============================================
frps Dashboard: http://xxx.xxx.xxx.xxx:6443 # 这个是Frp 管理页的地址,可以收藏备用。
==============================================

最后更新下配置:

./install-frps.sh update

附加几条服务器端的管理命令:

/etc/init.d/frps start # 开启服务器
/etc/init.d/frps stop # 关闭服务器
/etc/init.d/frps restart # 重启服务器
/etc/init.d/frps status # 查看服务器状态
/etc/init.d/frps config #  设置服务器
/etc/init.d/frps version # 查看服务器当前版本

卸载服务器上的Frp服务端:

./install-frps.sh uninstall

 

树莓派 上配置客户端:

使用Putty 通过SSH连接树莓派,或者 登陆树莓派桌面,运行LX终端。
切换到 root 帐号,不会的话,点击这里有教程。

输入以下命令:

wget https://github.com/fatedier/frp/releases/download/v0.26.0/frp_0.26.0_linux_arm.tar.gz
tar -zxvf frp_0.26.0_linux_arm.tar.gz
cd frp_0.26.0_linux_arm
sudo nano frpc.ini

第一行,下载Frp程序。第二行,解压!第三行,进如Frp的文件夹。第四行,用Nano打开 Frpc.ini 配置文件。

然后会进入Nano编辑器,通过键盘上下左右移动,来修改配置,如图所示:

5,树莓派3B+ 使用 Frp 实现内网穿透,公网访问web服务器,设置自动启动,后台运行。 (新人向)_第3张图片

[common]
token = xxxxxxx # 之前在服务器端设置的秘钥
server_addr = xxx.xxx.xxx.xxx # VPS的IP地址
server_port = 5445 # 服务器端,监听的端口,把5445改成你自己的。

[web]
type = http # 添加http服务
local_ip = 192.168.xxx.xxx # 内网http服务器的地址,就是本例中树莓派的内网地址
local_ip =  80 # http服务器的端口,默认是80
custom_domains = www.xxxx.com # 你绑定VPS的域名

修改完毕,按“Ctrl+O”保存,再按“Ctrl+X”退出。

最后输入下面的命令,更新下配置,并启动:

./frpc -c ./frpc.ini

TIPS:如果最后更新配置时,服务器连接报错了,可能是因为你安装了不匹配的 Frp版本,或者 token 秘钥写错了。

 

基本结束,但还有收尾工作!

到这里,基本安装结束。在浏览器中打开 Frp 的dashboard管理页,在Proxies 中选择之前配置过的分类,比如http,如果之Frp顺利启动,这里应该就可以看到服务状态是 Online 了。然后打开之前绑定的域名,出现的就是树莓派里的网站了。
可以接着上一篇的文章继续安装 typecho 了,公网地址可以填写 vps 的 ip,或者我们绑定的域名。

5,树莓派3B+ 使用 Frp 实现内网穿透,公网访问web服务器,设置自动启动,后台运行。 (新人向)_第4张图片

注意:SSH回话窗口关闭后不久,Frp的服务就会停止。因为还没有添加 Frp服务到树莓派的后台服务中。树莓派在重启后,也不会自动运行Frp。(宝塔面板安装后可以开机自动启动,并在后台运行。)

 

接来需要做两件事:

  1. 在服务器端(VPS上),把 Frp 服务添加到开机自动启动中,并且如果启动失败再自动重启。
  2. 在客户端(树莓派上),把 Frp 服务添加到开机自动启动中,并且如果启动失败再自动重启。

虽然是两件事,但其实操作是一样的!

这里介绍 使用 systemctl 来控制启动:

先客户端(树莓派)上吧,SSH连接,切换 root 用户,输入以下命令:

sudo vim /lib/systemd/system/frpc.service

意思是在 lib/systemd/system 文件夹下,新建一个名为 frpc.service 的文件。

TIPS:命令中的 vim 也可以替换为 nano 。nano 编辑器,之前的说明中,已经用过了,它不仅可以新建文件,还能打开不存在的文件,编辑后,保存,输入文件名即可。

在新建的 Frpc.service 中写入以下内容:

[Unit]
Description=frpc service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=/home/pi/frp_0.26.0_linux_arm/frpc -c /home/pi/frp_0.26.0_linux_arm/frpc.ini  
# 上面的路径,写你的树莓派上frpc的实际安装目录!

[Install]
WantedBy=multi-user.target

然后配置Frpc 启动失败后的自动重启,打开 Frpc.ini,输入下面这条命令时,得确保你当前在 Frp 的实际安装目录下,否则就在 Frpc.ini 前自行加上路径:(方法一的默认路径是:/home/pi/frp_0.26.0_linux_arm/)

sudo nano frpc.ini 

在frpc.ini 文件,[common] 区域添加一下内容:

[common]
login_fail_exit = false

保存后,就完工了,输入下面的命令,启动Frpc:

sudo systemctl start frpc

输入下面的命令,加入自动启动:

sudo systemctl enable frpc

附加两条基本控制方法:
重启Frpc,可以 sudo systemctl restart frpc
停止Frpc,可以 sudo systemctl stop frpc
 

到这里,树莓派上的Frp 服务就可以后台运行了,关掉SSH会话后,依然在后台运行。

服务器端(VPS)上,做法是一样的!只是需要加入自动运行的程序是 Frps ,需要配置的是 Frps.ini 。

Frp 整个服务中核心文件就四个:

Frps # 服务器端Frp主文件
Frps.ini # 服务器端 Frp 配置文件
Frpc # 客户端Frp 主文件
Frpc.ini # 客户端 Frp 配置文件

TIPS:如果之前在服务器端用的是一键脚本(方法二)安装,那么可以省去配置服务器端Frp自启动,因为已经配置好了。

结束,感谢阅读。

你可能感兴趣的:(树莓派,Raspberry)