使用frp实现内网穿透教程

2024-04-28 10:44
文章标签 frp 教程 穿透 实现 使用

本文主要是介绍使用frp实现内网穿透教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

文章目录

  • 简介
    • frp 是什么?
    • 为什么选择 frp?
  • 概念
    • 工作原理
    • 代理类型
  • 内网穿透教程
    • 服务端安装和配置
    • 本地Windows(客户端)安装和配置
    • 本地Linux虚拟机(客户端)安装和配置
    • 使用 systemd 管理服务端
    • 注意事项

简介

frp 是什么?

frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转

中文官网:https://gofrp.org/zh-cn/

中文文档:https://gofrp.org/zh-cn/docs/

为什么选择 frp?

通过在具有公网 IP 的节点上部署 frp 服务端,您可以轻松地将内网服务穿透到公网,并享受以下专业特性:

  • 多种协议支持:客户端服务端通信支持 TCP、QUIC、KCP 和 Websocket 等多种协议。
  • TCP 连接流式复用:在单个连接上承载多个请求,减少连接建立时间,降低请求延迟。
  • 代理组间的负载均衡。
  • 端口复用:多个服务可以通过同一个服务端端口暴露。
  • P2P 通信:流量不必经过服务器中转,充分利用带宽资源。
  • 客户端插件:提供多个原生支持的客户端插件,如静态文件查看、HTTPS/HTTP 协议转换、HTTP、SOCKS5 代理等,以便满足各种需求。
  • 服务端插件系统:高度可扩展的服务端插件系统,便于根据自身需求进行功能扩展。
  • 用户友好的 UI 页面:提供服务端和客户端的用户界面,使配置和监控变得更加方便。

概念

工作原理

frp 主要由两个组件组成:客户端(frpc) 和 服务端(frps)。通常情况下,服务端部署在具有公网 IP 地址的机器上,而客户端部署在需要穿透的内网服务所在的机器上。

由于内网服务缺乏公网 IP 地址,因此无法直接被非局域网内的用户访问。用户通过访问服务端的 frps,frp 负责根据请求的端口或其他信息将请求路由到相应的内网机器,从而实现通信。

代理类型

在 frp 中,一个代理对应一个需要公开访问的内网服务。一个客户端可以同时配置多个代理,以满足不同的需求。

frp 支持多种代理类型,以适应不同的使用场景。以下是一些常见的代理类型:

  • TCP:提供纯粹的 TCP 端口映射,使服务端能够根据不同的端口将请求路由到不同的内网服务。
  • UDP:提供纯粹的 UDP 端口映射,与 TCP 代理类似,但用于 UDP 流量。
  • HTTP:专为 HTTP 应用设计,支持修改 Host Header 和增加鉴权等额外功能。
  • HTTPS:类似于 HTTP 代理,但专门用于处理 HTTPS 流量。
  • STCP:提供安全的 TCP 内网代理,要求在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
  • SUDP:提供安全的 UDP 内网代理,与 STCP 类似,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
  • XTCP:点对点内网穿透代理,与 STCP 类似,但流量不需要经过服务器中转。
  • TCPMUX:支持服务端 TCP 端口的多路复用,允许通过同一端口访问不同的内网服务。

每种代理类型适用于不同的使用情境,您可以根据需求选择合适的代理类型来配置 frp。

内网穿透教程

演示frp安装和简单配置,用阿里云服务器(公网)作为服务端,本地Windows和本地Linux作为客户端实现内网穿透效果。

演示目的:

使用服务器的3316端口访问本地(Windows)的3306端口
使用服务器的33022端口连接本地(Linux)的22端口(SSH)

由于frp功能和配置项比较多,有需要的可以直接去官网查看具体文档

配置示例

功能特性

参考配置

服务端安装和配置

1.下载安装包

本次演示使用安装包

Windows:https://github.com/fatedier/frp/releases/download/v0.57.0/frp_0.57.0_windows_amd64.zip

Linux:https://github.com/fatedier/frp/releases/download/v0.57.0/frp_0.57.0_linux_amd64.tar.gz

如果下载慢可以使用:百度网盘下载

其它版本下载地址:https://github.com/fatedier/frp/releases

2.上传压缩包到Linux服务器并修改配置文件

创建目录并上传压缩包,这里演示使用的安装目录为:/usr/local/frp

在这里插入图片描述

将压缩包上传到Linux服务器后解压到当前目录,然后进入解压后的文件夹目录

 cd /usr/local/frptar -zxvf frp_0.57.0_linux_amd64.tar.gzcd frp_0.57.0_linux_amd64/

在这里插入图片描述

修改服务端配置文件 frps.toml

[common]
# 服务端和客户端的TCP通信端口, 建议1024以上端口
bind_port = 7000
# 客户端访问服务端的密码
token = abcdefg
# 服务端仪表盘的端口, 可以用浏览器访问查看
dashboard_port = 7500
# 服务端仪表盘的用户密码
dashboard_user = frp
dashboard_pwd = frp123# 日志保存设定, 保存位置、保存时长
log_file = ./frps.log
log_level = info
log_max_days = 7

在这里插入图片描述

启动命令(如果启动失败,需要先设置防火墙开放端口)

./frps -c frps.toml &

在这里插入图片描述

启动成功可以去浏览器验证一下仪表盘页面

仪表盘访问地址:公网IP:[刚才配置的仪表盘端口]

在这里插入图片描述

输入刚才配置的用户名密码登录即可

在这里插入图片描述

至此服务器的安装配置和启动就完成了

本地Windows(客户端)安装和配置

解压下载好的zip文件,这个时候可能会出现病毒查杀,手动添加进信任区就可以了

在这里插入图片描述

进入解压好的文件夹,编辑 frpc.toml 配置文件

在这里插入图片描述

[common]
# 服务端公网IP
server_addr = [服务端公网IP]
# 客户端访问服务端的密码
token = abcdefg
# 客户端与服务端通信端口
server_port = 7000[mysql]
# 指定TCP连接类型
type = tcp
# 客户端IP, 这里填本地IP就可以
local_ip = 127.0.0.1
# 表示客户端本地的端口号
local_port = 3306
# 表示服务端的代理端口号
remote_port = 3316

此配置文件的意思是将服务端的3316端口代理到客户端本地的3306端口

客户端启动命令

在当前目录下进入cmd命令行窗口执行启动命令

frpc.exe -c frpc.toml

在这里插入图片描述

OK,下面验证一下

在这里插入图片描述

然后服务器本地的MySQL服务是不受影响的,还是可以通过原来的端口访问

在这里插入图片描述

本地Linux虚拟机(客户端)安装和配置

安装步骤与服务端基本相同,除最后一步修改文件不同

服务端修改的是 frps.toml

客户端修改的是 frpc.toml

[common]
# 服务端公网IP
server_addr = [服务端公网IP]
# 客户端访问服务端的密码
token = abcdefg
# 客户端与服务端通信端口
server_port = 7000[range:ssh]
# 指定TCP连接类型
type = tcp
# 客户端IP, 这里填本地IP就可以
local_ip = 127.0.0.1
# 当前设备开放的远程连接端口, 默认为22
local_port = 22
# 表示服务端的代理端口号
remote_port = 33022
# 是否加密
use_encryption = true
# 是否压缩
use_compression = false

在这里插入图片描述

此配置文件的意思是将服务端的33022端口代理到本地虚拟机的22端口,也就是可以通过服务端的33022端口SSH连接到本地虚拟机

启动客户端

./frpc -c ./frpc.toml &

在这里插入图片描述

OK,下面验证一下

在这里插入图片描述

可以通过仪表盘来监控连接情况

在这里插入图片描述

使用 systemd 管理服务端

在 Linux 系统下,使用 systemd 可以方便地控制 frps 服务端的启动、停止、配置后台运行以及开机自启动。

以下是具体的操作步骤:

  1. 安装 systemd

    如果 Linux 服务器上尚未安装 systemd,可以使用包管理器如 yum(适用于 CentOS/RHEL)或 apt(适用于 Debian/Ubuntu)来安装它:

    # 使用 yum 安装 systemd(CentOS/RHEL)
    yum install systemd# 使用 apt 安装 systemd(Debian/Ubuntu)
    apt install systemd
    

在这里插入图片描述

  1. 创建 frps.service 文件

    使用文本编辑器 (如 vim) 在 /etc/systemd/system 目录下创建一个 frps.service 文件,用于配置 frps 服务。

    sudo vim /etc/systemd/system/frps.service
    

    写入内容

    注意替换路径和配置文件名称以匹配实际安装。

    [Unit]
    # 服务名称,可自定义
    Description = frp server
    After = network.target syslog.target
    Wants = network.target[Service]
    Type = simple
    # 启动frps的命令,需修改为您的frps的安装路径
    ExecStart = /path/to/frps -c /path/to/frps.toml[Install]
    WantedBy = multi-user.target
    

在这里插入图片描述

  1. 使用 systemd 命令管理 frps 服务

    # 启动frp
    sudo systemctl start frps
    # 停止frp
    sudo systemctl stop frps
    # 重启frp
    sudo systemctl restart frps
    # 查看frp状态
    sudo systemctl status frps
    
  2. 设置 frps 开机自启动

    sudo systemctl enable frps
    

在这里插入图片描述

注意事项

  1. 防火墙端口开放
sudo firewall-cmd --zone=public --add-port=7000/tcp --permanent
sudo firewall-cmd --zone=public --add-port=7500/tcp --permanentsudo firewall-cmd --reload

案例使用的服务端安装在阿里云服务器,还需要到阿里云设置安全组,将端口添加到安全组中,仅供参考。

  1. 客户端可以和服务端正常通信(Ping)

通常情况下,服务端部署在具有公网 IP 地址的机器上,而客户端部署在需要穿透的内网服务所在的机器上。

  1. 服务端和客户端启动命令和配置文件

服务端

# 服务端启动命令, & 表示后台运行
./frps -c ./frps.toml &
# 配置文件
frps.toml

客户端

# 客户端启动命令, & 表示后台运行
./frpc -c ./frpc.toml &
# 配置文件
frpc.toml

服务端和客户端比较容易混淆,输入命令的时候需要注意一下。

在这里插入图片描述

这篇关于使用frp实现内网穿透教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/943029

相关文章

服务端多端部署报表异步下载的核心技术实现与解析(一)

报表作为数据可视化的重要一环,其高效、安全的下载机制对于提升用户体验至关重要。本文将深入探讨一种基于阿里云对象存储服务(OSS)的报表异步下载解决方案,并通过核心代码实现来解析其背后的技术逻辑。本方案采用Java编写,结合AES加密算法保障数据传输安全性,并利用临时目录处理文件,确保了资源的有效管理和高效下载。本篇文章暂时没有加入异步部分的代码。 技术背景与需求 在多端部署

C++列表实现

文章目录 一、listView相关内容主要思想实例全部代码 二、QTreeView 一、listView 相关内容 QAbstractItemModel:一个抽象的类,为数据项模型提供抽象的接口,常见的的数据模型列如:QStringListModel,QStandardItemMode,QDirModel等都继承于此类; QStringListModel:数据模型,储存一组字

【kali工具】使用 nc 扫描端口

使用 nc 扫描端口 nc 是 netcat 的简写,有着网络界的瑞士军刀美誉。因为它短小精悍、功能实用,被设计为一个简 单、可靠的网络工具 nc 的作用: 1. 实现任意 TCP/UDP 端口的侦听,nc 可以作为 server 以 TCP 或 UDP 方式侦听指定端口 2. 端口的扫描,nc 可以作为 client 发起 TCP 或 UDP 连接 3. 机器之间传输文件 4. 机

超级数据查看器 教程合集 整理版本 pdf格式 1-31集

点击下载    超级数据查看器 教程合集整理版本 pdf格式https://download.csdn.net/download/qq63889657/89311725?spm=1001.2014.3001.5501

echarts的柱状图使用

1. 柱状图(柱体顶部使用外部图片 相关代码 <template><div class="out-bg"><div class="container" ref="warnChartRef"></div></div></template><script>import * as echarts from 'echarts'export default {data() {return {

基于SSM的“羽毛球馆管理系统”的设计与实现(源码+数据库+文档)

基于SSM的“羽毛球馆管理系统”的设计与实现(源码+数据库+文档) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统结构图 登录界面 后台用户添加 后台用户管理 球场添加 球场列表 物资添加 物资列表 预定添加 预定列表 预定更改 摘要 时代的变化速度实在

Python实现将日志写入到数据表中

文章目录 1. 设计数据库表结构2. 对日志的处理1. 日志数据结构化2. 使用日志库3. 日志异步写入4. 错误处理和重试机制5. 合理的索引和表设计6. 清理和维护策略示例:使用`logging`库和MySQL处理器 3. Python代码实现注意事项 4 .用pymysql实现安装 `pymysql`Python 脚本实现说明 要将日志数据写入MySQL数据库,你需要进行以

Git使用(4):分支管理

一、新建分支         首先选择Git -> Branches...         然后选择 + New Branch,输入新分支名称,例如dev。         可以看到右下角显示已经切换到新建的dev分支了。         push到远程仓库,可以看到新添加的分支。 二、切换分支与合并分支         为了演示合并分支,我们现在dev分支上进行一

了解 Robot Framework :接口自动化测试教程!

开源自动化测试利器:Robot Framework Robot Framework 是一个用于实现自动化测试和机器人流程自动化(RPA)的开放源代码框架。它由一个名为 Robot Framework Foundation 的组织得到推广,得到了多家领军企业在软件开发中的广泛应用。框架以其开放性和灵活性为特点,能够无缝整合各种其他工具,无论团队规模大小,均无需承担额外许可成本。 该框架

node.js 版本切换——一台机器快速使用不同的nodejs版本

nodejs 版本切换(windows版) 一、按健win+R弹出窗口,键盘输入cmd,然后敲回车。然后进入命令控制行窗口,并输入where node查看之前本地安装的node的路径。 二、找到上面找到的路径,将node.exe所在的父目录里面的所有东西都删除。 三、从官网下载安装包 https://github.com/coreybutler/nvm-windows/release