首页 > 其他分享 >使用frp实现内网穿透

使用frp实现内网穿透

时间:2024-06-05 20:23:27浏览次数:26  
标签:实现 端口 123.123 穿透 frp port 服务端 客户端

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

标签:实现,端口,123.123,穿透,frp,port,服务端,客户端
From: https://www.cnblogs.com/jeikerxiao/p/18233704

相关文章

  • Android JSBridge 详解(背景和原理、特性和挑战、应用场景和实现方法)
    AndroidJSBridge详解(背景和原理、特性和挑战、应用场景和实现方法)JSBridge(JavaScriptBridge)是一种用于在JavaScript和Native代码之间进行通信的技术,常用于在Web应用中调用Native功能或在Native应用中嵌入Web页面。在Android平台上,JSBridge可以实现通过......
  • 【调试笔记-20240601-Linux-在 OpenWRT-23.05 上配置 frpc 实现内网穿透】
    调试笔记-系列文章目录调试笔记-20240601-Linux-在OpenWRT-23.05上配置frpc实现内网穿透文章目录调试笔记-系列文章目录调试笔记-20240601-Linux-在OpenWRT-23.05上配置frpc实现内网穿透前言一、调试环境操作系统:OpenWrt23.05.3调试环境调试目标二、调试步......
  • Java转UML类图实现方法
    一、maven依赖<dependency><groupId>com.github.javaparser</groupId><artifactId>javaparser-core</artifactId><version>3.26.0</version></dependency>二、解析Java文件类关系importcom.github.javaparser.Java......
  • 前端实现输入内容计算密码强度
    提示:记录工作中遇到的需求及解决办法文章目录前言一、思路二、计算密码强度分数密码强度动画展示效果完善动画效果完整代码前言平时我们在浏览各种网站和APP的时候,都接触过密码这个东西~密码设置的好不好,关乎到你的账号安全性,越复杂的密码越安全,所以密......
  • 【Go-多线程】Golang的channel实现消息的批量处理
    【Go-多线程】Golang的channel实现消息的批量处理。当消息量特别大时,使用kafka之类的messagequeue是首选,但这是更加轻量的方案channelx.go//这个方案需要实现以下几点://1.消息聚合后处理(最大条数为BatchSize),核心://(1)带buffer的channel相当于一个FIFO的队列//(2)多个常驻的gorou......
  • MFC中动态创建多个按钮并实现其消息响应
    我们需要根据程序输入或运行时信息在界面上动态生成一个或多个按钮,并分别添加消息响应,实现这一目标包括如下几步:1.在类中声明按钮变量指针CButtonbtnArray[n];2.在类中声明并定义按钮控件的ID, buttonID=10000;3.想要创建按钮的数量staticconstintn=6;主要这几行:af......
  • 使用powershell脚本,自动压缩文件夹,实现备份功能
    担心数据丢失?教你3分钟实现自动压缩,备份文件夹。最近在使用obsidian,想要在多台电脑上访问一个同一个仓库,所以我把obsidian-vault设置在了mac-mini的共享文件夹上。但是有一个问题,mac-mini上边的硬盘是我的闲置硬盘,随时都可能挂掉。一、通过脚本自动备份为了避免obsidian......
  • Spring Boot集成RocketMQ实现分布式事务
            RocketMQ是由阿里巴巴集团开发的一款高性能、高可靠、分布式的开源消息中间件,它在2012年对外开源,并于2016年捐赠给Apache软件基金会,随后在2017年成为了Apache的顶级项目。RocketMQ的设计旨在满足互联网业务场景中的海量消息传递需求,尤其擅长处理高并发、大数据......
  • 简单实现限流中间件
    本文由ChatMoney团队出品引言在现代Web应用开发中,限流是一个重要的概念,它能够保护服务器免受流量攻击,确保服务的稳定性和可用性。Go语言以其高性能和并发处理能力在后端服务开发中广受欢迎。Gin是一个使用Go语言编写的Web框架,以其简洁和高效著称。在Gin框架中,通过中间件实现......
  • “粘土风格”轻松拿捏,基于函数计算部署 ComfyUI实现AI生图
    阿里云函数计算FC 一键部署火爆全球工作流AI生图平台——ComfyUI ,实现更高质量的图像生成,三步轻松完成“黏土”创意AI画作,晒图赢眼部按摩器等好礼!活动地址:https://developer.aliyun.com/topic/june/fc?spm=a2c6h.29234099.J_6985717350.4.65997562KE82EH实验准备目前在......