使用frp实现内网穿透

使用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

管理后台界面如下:

frp管理后台

配置信息

frps 服务端配置信息

https://gofrp.org/zh-cn/docs/reference/server-configures/

frpc 客户端配置信息

https://gofrp.org/zh-cn/docs/reference/client-configures/

posted @ 2024-06-05 20:15  jeikerxiao  阅读(104)  评论(0编辑  收藏  举报