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

frp实现内网穿透

时间:2025-01-09 16:34:08浏览次数:1  
标签:frps 实现 穿透 Nginx frp 公网 内网 port

因公司内网有两个端口需要外网访问,在网上找到这个方法,可以把内网端口映射到外网。

1、frp是什么?
1、frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

frp 主要由两个组件组成:客户端(frpc) 和 服务端(frps)。通常情况下,服务端部署在具有公网 IP 地址的机器上,而客户端部署在需要穿透的内网服务所在的机器上。 由于内网服务缺乏公网 IP 地址,因此无法直接被非局域网内的用户访问。用户通过访问服务端的 frps,frp 负责根据请求的端口或其他信息将请求路由到相应的内网机器,从而实现通信。

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

2、frp和nginx的区别
FRP 和 Nginx 存在多方面的区别,以下是详细介绍:

功能特性
Nginx:支持 HTTP/2、IPv6、WebSockets、gRPC 以及 HTTP/3(通过 Nginx QUIC 传输模块)等多种协议和技术,能很好地服务静态文件,支持 SSL,还包含用于转换响应的模块,可通过第三方模块进行扩展5.
FRP:支持 TCP、UDP、HTTP、HTTPS、WebSocket 等协议,拥有丰富的插件系统,支持全锥型 NAT、P2P 连接、会话保持、健康检查以及热重载而不中断连接等功能.
使用场景
Nginx:适用于复杂的负载均衡场景、高性能环境以及服务网格架构等,在需要诸如速率限制、缓存或高级路由等高级功能时表现出色,常被用于容器化环境如 Kubernetes 中的入口控制,以管理对集群中服务的外部访问.
FRP:擅长将位于 NAT 或防火墙后的内部服务快速、简便地暴露到互联网上,例如位于 NAT 后的 Web 服务器或用于远程管理的 SSH 服务器,适用于较为简单的场景,无需 Nginx 的高级功能.
易用性
Nginx:配置语法相对简单,有庞大的社区提供丰富的文档和示例,但要处理复杂任务可能需要深厚的技术专业知识.
FRP:设置和管理相对容易,即使没有丰富的网络知识,也能轻松地将内部服务器暴露到互联网上.
反向代理与负载均衡能力
Nginx:作为高性能的负载均衡器,支持 HTTP、TCP 和 UDP 的负载均衡,具备 SSL 终止、会话保持、健康检查和服务器名称指示(SNI)等功能,能提供容错和实时活动监控,不过其高级负载均衡功能仅在付费的 Nginx Plus 版本中可用,复杂场景下的配置可能会变得复杂.
FRP:可将任何位于 NAT 或防火墙后的 HTTP 和 HTTPS 服务暴露到互联网,支持会话保持和健康检查,能在同一端口上复用流量以代理多个服务,但负载均衡功能相较于 Nginx 不够成熟.
对不同协议的支持
HTTP 和 HTTPS:Nginx 在 HTTP 和 HTTPS 方面表现卓越,提供了丰富的路由、重写、重定向和负载均衡选项,还有缓存和速率限制等高级功能;FRP 虽也能处理 HTTP/HTTPS 流量,但缺少 Nginx 的高级选项.
SSH:Nginx 不适合处理 SSH 流量,而 FRP 能够将来自公网的 SSH 流量转发到私网,方便管理位于 NAT 或防火墙后的服务器.
WebSockets:Nginx 对 WebSockets 有强大的支持,可提供代理和负载均衡;FRP 支持 WebSockets,但缺乏 Nginx 的高级负载均衡和路由功能.
要配置frp内网穿透服务器有2个前提条件---------------------------------------------------------------------------------------------------------------

1.必须有一台可以公网访问的服务器,我这里用的是阿里云的云服务器。

2.内网的服务器要能ping通云服务器。

下面开始frp服务器的部署

1.frp服务端部署

首先在公网服务器下载frp插件,github地址https://github.com/fatedier/frp/

wget  https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz

下载完成后解压

注意这里有frpc和frps,frpc.toml和frps.toml分别代表frp客户端和服务端的配置文件。这里只需要配置服务端的配置frps.toml

编辑frps.toml文件

[common]
bind_port = 9911
dashboard_port = 9912
dashboard_user = admin
dashboard_pwd = admin

详解
bind_port frp服务端口,frpc的配置会调用
dashboard_port frp的web控制台端口
dashboard_user frp的web控制台端口账号
dashboard_pwd frp的web控制台端口密码

部署完成后,运行

./frps -c frps.toml

也可以后台启动 nohup ./frps -c ./frps.toml &> /dev/null &

加入系统服务

vim /etc/systemd/system/frps.service

[Unit]
Description=frp server
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart=/root/data/frp/frp_0.59.0_linux_amd64/frps -c /root/data/frp/frp_0.59.0_linux_amd64/frps.toml

[Install]
WantedBy=multi-user.target

启动 systemctl start frps

启动成功访问xxxxxxx:9912,出现如下页面说明服务端部署完成

 

2.frp客户端部署

在需要映射的内网服务器上部署frpc。

配置frpc.toml文件

[common]
server_addr = 公网ip
server_port = 9911


[tcp_9000]
type = tcp
local_ip = 127.0.0.1
local_port = 9000
remote_port = 9000

[tcp_admin]
type = tcp
local_ip = 192.168.124.222
local_port = 9090
remote_port = 9090

[tcp_nacos]
type = tcp
local_ip = 192.168.124.200
local_port = 8848
remote_port = 8848

[tcp_api]
type = tcp
local_ip = 192.168.124.222
local_port = 80
remote_port = 80

[Web]
# http服务
## 数据类型
type = http
## 本地IP localhost、127.0.0.1或你用ipconfig得到的内网IP都可
local_ip = 127.0.0.1
## 本地需要暴露在外网的端口,一般为你本地的项目端口
local_port = 80
## 是该条规则在服务端开放的端口号,自己填写并记录即可,服务端对https设置的端口为8200,所以此处也为8200
## remote_port = 8200
## subdomain = test
custom_domains= **.**.**.**
local_ip 指定的就是需要外网映射的端口,可以配置多个端口
配置成系统命令

vim /etc/systemd/system/frpc.service

[Unit]
Description=frp client
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart=/data/frp/frp_0.59.0_linux_amd64/frpc -c /data/frp/frp_0.59.0_linux_amd64/frpc.toml

[Install]
WantedBy=multi-user.target

 

启动

systemctl start frpc.service

客户端启动会连接公网的frps服务器地址

启动成功后 访问  公网ip:8848  或者  公网ip:9090, 出现相关页面,已经成功映射到公网ip。

 

标签:frps,实现,穿透,Nginx,frp,公网,内网,port
From: https://www.cnblogs.com/yylucky666/p/18662366

相关文章

  • 深入解析网络IO底层原理:实现高效的数据通信
    当你在深夜享受高速下载一部高清电影,或是在关键时刻进行视频会议却毫无卡顿,你或许会为流畅的网络体验暗自庆幸。但你可曾意识到,这背后是网络IO底层原理在默默发力。它关乎我们每一次网络交互的顺畅与否,是保障高效数据通信的关键。现在,就让我们一同深入剖析网络IO底层原理,去......
  • 【雪花算法的实现原理】
    雪花算法的实现原理一、ID结构二、实现原理三、算法特点四、注意事项雪花算法(Snowflake)是由Twitter开源的一种分布式ID生成算法,其核心思想是将64位的long型ID分为四个部分,分别为:符号位、时间戳、工作机器ID、序列号。雪花算法的实现原理:一、ID结构符号位(1位......
  • 腾讯云AI代码助手编程挑战赛:基于腾讯混元实现智能问答与交互AI对话功能
    引言在当今人工智能迅猛发展的时代,智能问答与交互AI对话功能正逐渐渗透到各个领域,从日常生活中的语音助手到企业级的智能客服系统。腾讯云AI代码助手编程挑战赛正在火热进行中,腾讯云AI代码助手编程挑战赛作为“AI开发黑客松”系列活动的关键部分,其主题“用AI构造AI-打造......
  • docker安装jellyfine实现家庭影院
    安装环境为Ubuntuserver20.04。管理员账户登陆系统。新建应用安装目录,用于缓存应用使用过程中生成的中间数据,如配置、预览等,最好建到速度较快的SSD硬盘上,可提高体验。mkdir/mnt/ssd/jellyfin-app/configmkdir/mnt/ssd/jellyfin-app/cache拉取镜像并安装。dockerpu......
  • 【AIGC-ChatGPT进阶提示词指令】AI美食助手的设计与实现:Lisp风格系统提示词分析
    引言在人工智能助手的应用领域中,美食烹饪是一个既专业又贴近生活的方向。本文将详细分析一个基于Lisp风格编写的美食助手系统提示词,探讨其结构设计、功能实现以及实际应用效果。提出你的菜系,为你分析,并生成图片卡片提示词在最下方效果图系统架构设计核心角色定......
  • 1.3.3实现一个线程池
    文章目录1.ZERO_ThreadPool.h—线程池头文件2.ZERO_ThreadPool.cpp—线程池实现文件3.main.cpp1.ZERO_ThreadPool.h—线程池头文件#ifndefZERO_THREADPOOL_H#defineZERO_THREADPOOL_H#include<iostream>#include<vector>#include<thread>#inc......
  • VUE +WebSocket+speak-tt 实现在浏览器右下角实时给商家推送订单消息
    先看效果  1、WebSocket服务建立 1.1引入包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>1.2新建配置类packagecom......
  • 2025毕设python牙医诊所管理系统的设计与实现程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于牙医诊所管理系统的研究,现有研究主要以传统管理模式为主,专门针对基于Python的牙医诊所管理系统的研究较少。随着数字化时代的发展......
  • 基于 Admission Webhook 实现 Pod DNSConfig 自动注入
    本文主要分享如何使用基于AdmissionWebhook实现自动修改PodDNSConfig,使其优先使用NodeLocalDNS。1.背景上一篇部署好NodeLocalDNSCache,但是还差了很重要的一步,配置pod使用NodeLocalDNSCache作为优先的DNS服务器。有以下几种方式:方式一:修改kubelet中的dn......
  • 蓝易云 - 使用Frp内网穿透快速搭建Web应用实践
    当你需要将内网中的Web应用暴露给外部网络访问时,可以使用Frp(FastReverseProxy)进行内网穿透。Frp是一个高性能的反向代理应用,可以帮助你快速搭建内网Web应用的访问通道。以下是快速搭建Web应用的实践步骤:步骤1:安装Frp首先,你需要在内网服务器和外网服务器上安装Frp。可以从Fr......