Posts 基于frp内网穿透, 在树莓派部署外网可访问的Web服务器
Post
Cancel

基于frp内网穿透, 在树莓派部署外网可访问的Web服务器

一、 前言

拿到树莓派之后, 想着用来做一个什么东西, 第一反应便是网站—-但只是在宿舍的局域网中可以访问未免太扫兴了, 好在我有两三台有公网ip的阿里云服务器, 于是我即刻开始捣鼓起了我心水已久的内网穿透

据说frp很好用, 搜了一下, 果然既简单又人性化, 下面是具体的实现方法

以下的”服务端”指首先被访问到的设备, 即具有公网ip的设备;

“客户端”则是处在内网中的设备(比如树莓派)

二、 开始

0. 准备工具

硬件要求

  • 一块可以用的树莓派
  • 一个具有公网ip的服务器
  • 手中操作全局的电脑

网络环境要求

  • 树莓派和服务器可以通过ssh控制
  • 手中的电脑和树莓派在同一局域网下
  • 三者均连接到互联网

1. 下载frp

推荐先在方便下载的环境(比如可以科学上网的windows环境)中下载,然后scp到服务端和客户端

Github的release地址是fatedier/frp/releases

frp使用GO语言编写, 我们在选用编译后的releases的时候需要注意系统和架构匹配(特别注意树莓派基于arm架构)

比如我的两个设备

  • Aliyun ECS实例 (CentOS 8.0): Linux_amd64
  • 树莓派4 (Ubuntu Server 20.04 for Raspberry Pi): Linux_arm64

由于是编译好的, 所以拿来解压以后就可以直接用, 还是非常方便的

2. 共通线

在客户端和服务端都要完成以下操作

  • 创建目录sudo mkdir /usr/local/frp/
  • 将下载好的压缩包想办法传过来
  • 解压tar -zxvf 压缩包名字.tar.gz
  • 进入解压后的文件夹

3.1 服务端线

  • 删除两个客户端文件: frpc & frpc.ini
  • 修改服务端配置文件: frps.ini
1
2
3
[common]
bind_port = 7000           
vhost_http_port = 6081    

这两个变量的意思就是: 外部访问到服务端的vhost_http_port端口之后, frp使用端口bind_port向客户端传送数据

如果使用云服务器, 请务必配置安全组以开放这两个端口

以上面的配置为例, 比如我现在如果想在客户端提供web服务, 服务端首先从6081端口收到get请求, 然后通过7000端口将其转发至客户端

服务端的配置文件很简单, 一般不会出错

启动服务端./frps -c ./frps.ini, 之后便会看到启动成功的信息

3.2 客户端线

  • 删除两个服务端文件: frps & frps.ini
  • 修改客户端配置文件: frpc.ini
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[common]
server_addr = 120.56.37.48   #公网服务器ip
server_port = 7000            #与服务端bind_port一致
 
#公网通过ssh访问内部服务器
[ssh]
type = tcp              #连接协议
local_ip = 192.168.3.48 #内网服务器ip
local_port = 22         #ssh默认端口号
remote_port = 6000      #自定义的访问内部ssh端口号
 
#公网访问内部web服务器以http方式
[web]
type = http         #访问协议
local_port = 80     #内网服务端口号
custom_domains = repo.iwi.com   #所绑定的公网服务器域名或者ip地址

根据注释的提示按需修改即可, 如果之后运行出错, 大概率是客户端的配置文件出了问题

启动客户端./frpc -c ./frpc.ini, 之后便会看到连接成功的提示, 如果没有或卡住了, 首先检查防火墙(和云服务的安全组), 其次检查服务端是否正常运行

4. 添加开机自启

  • 服务端一般都是24小时运行, 不需要开机自启
  • 客户端一般需要配置开机自启

如果之前没有配置过开机自启的脚本, 请移步Ubuntu添加开机启动脚本

如果配置过, 直接修改文件/etc/rc.local, 按照期望的启动顺序添加命令, 这里我们加入frp和apache的启动命令 (如果是CentOS请更改启动apache的命令)

1
2
3
4
#启动apache
sudo /etc/init.d/apache2 start
#后台启动frp
nohup (你的frp路径)/frpc -c frpc.ini &

重新启动后, 发现从公网地址的指定端口可以访问到树莓派的web页面, 说明开机自启设置成功

5. 完成基本工作

至此, 内网穿透成功实现, 接下来可以:

  • 利用监听的端口实现一些简单的应用
  • 编写运行脚本, 管理frp进程
  • 充分利用内网穿透, 实现更多实用有趣功能(如远程NAS, 远程控制寝室设备)

这些工作, 日后将会逐渐推进!

This post is licensed under CC BY 4.0 by the author.

在ubuntu与CentOS上快速部署apache

基于ubuntu和samba, 利用树莓派4b实现局域网轻NAS