使用frp实现内网穿透
环境说明:
服务端设备:阿里云轻量应用服务器(假设IP为:123.123.123.123)
服务端系统:ubuntu 20.04
客户端设备:树莓派4B
客户端系统:树莓派
前言
引用frp项目的部分官方文档对frp进行一个简单的介绍:
frp是什么?
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
为什么使用 frp ?
通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:
客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
代理组间的负载均衡。
端口复用,多个服务通过同一个服务端端口暴露。
多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
服务端和客户端 UI 页面。
这一段文档看不懂?没关系,你只需要知道frp是免费开源的内网穿透工具,这就够了。下面链接可以了解到更多:
frp项目官网:https://gofrp.org/
frp的github项目地址:https://github.com/fatedier/frp
frp的项目文档:https://gofrp.org/zh-cn/docs/
如何使用frp
进行frp内网穿透需要一台有公网ip的设备作为转发的服务端,本篇用阿里云服务器来作为服务端,给树莓派实现内网穿透,以下是详细步骤:
1.在服务端部署frp
用SSH连接到阿里云服务器,下载amd64架构的frp文件包:
sudo wget https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz
https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz
然后用tar命令解压下载的压缩包:
sudo tar -zxvf frp_0.58.1_linux_amd64.tar.gz
进入解压后的文件夹,文件夹中包含amd64架构的服务端二进制文件和客户端二进制文件两种。由于阿里云服务器作为服务端,所以在这上面我们只用到服务端的二进制文件及对应的ini配置文件,其他的文件可以选择删除掉。
编辑frps.ini文件:
$ cd frp_0.58.1_linux_amd64
sudo vim frps.toml
frps.toml
文件内容如下:(建议修改默认端口,如修改成9898)
bindPort = 9898 # 默认端口为7000
其中,bind_port
端口修不修改都可以,但是bind_port
端口要与客户端配置文件的server_port
端口相同。修改完之后ctrl +o保存,ctrl +x退出。
记得要在服务器防火墙中放行bind_port
端口。
设置完毕,就可以启动frp服务了。
先到阿里云服务器控制台窗口中启动服务端frp服务,在frp的目录中执行:
./frps -c ./frps.toml
2.配置frp客户端
再用SSH连接到树莓派的控制台,下载适用于树莓派的arm64架构的frp文件包:
sudo wget https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_arm64.tar.gz
https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_arm64.tar.gz
与上一步类似,解压下载的压缩包:
sudo tar -zxvf frp_0.58.1_linux_arm64.tar.gz
同样的,文件夹中包含了服务端和客户端的两种二进制文件。树莓派作为客户端只用到客户端的二进制文件及对应的ini配置文件,其他的文件可以删除。
编辑其中的frpc.toml文件:
$ cd frp_0.58.1_linux_arm64/
sudo nano frpc.toml
frpc.ini文件内容如下:
如服务器端IP地址为:123.123.123.123
serverAddr = "123.123.123.123"
serverPort = 9898
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
按如下参数说明修改配置文件:
server_addr:服务器的IP地址;
server_port:服务器端的端口,与服务端配置文件的bind_port
端口相同;
local_ip:要在公网访问的本地设备的地址,这里指客户端本机,填127.0.0.1即可;
local_port:本地设备要暴露的端口,即理解为提供服务的端口
remote_port:在外网的访问端口,此端口上的流量会被转发到本地设备对应的local_port端口上
还有别忘了在服务器防火墙上放行remote_port
端口
连接树莓派的控制台,启动客户端frp服务时同样在frp目录中执行:
./frpc -c ./frpc.toml
需要注意的是,一定要先启动服务端frp,再启动客户端frp。
3.测试连接
使用可访问服务器的电脑,
$ ssh -o Port=6000 [客户端用户名]@[服务器IP]
示例:
如树莓派的用户为pi,互联网外网服务器的IP地址为:123.123.123.123
$ ssh -o Port=6000 pi@123.123.123.123
正常则可打开内网树莓派SSH端。
服务端配置管理后台
bindPort = 9898
# The default value is 127.0.0.1. Change it to 0.0.0.0 when you want to access it from a public network.
webServer.addr = "0.0.0.0"
webServer.port = 8500
# dashboard's username and password are both optional
webServer.user = "admin"
webServer.password = "admin@123"
如外网服务器的IP地址为:123.123.123.123
则访问服务端管理后台
地址:123.123.123.123:8500
账号:admin
密码:admin@123
管理后台界面如下:
配置信息
frps 服务端配置信息
https://gofrp.org/zh-cn/docs/reference/server-configures/
frpc 客户端配置信息
https://gofrp.org/zh-cn/docs/reference/client-configures/