首页 > 其他分享 >frp实现web服务的内网穿透

frp实现web服务的内网穿透

时间:2024-08-22 11:22:10浏览次数:12  
标签:web sudo frps frpc frp 公网 内网

什么是内网穿透?

内网穿透是一种技术,它允许用户通过公网访问位于内部网络中的设备或服务。通常情况下,内部网络中的设备不能直接从公网访问,因为它们可能位于防火墙或NAT(网络地址转换)之后。内网穿透通过建立一条从公网到内网的隧道,使用户能够通过公网访问内部设备或服务。这对于需要远程访问内网设备或提供内部服务给外部用户的情况非常有用。内网穿透可以通过不同的方法实现,包括端口转发、反向代理、VPN等。

frp

介绍

frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。本次就是介绍如何实现web服务的内网穿透

基本原理

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

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

安装

操作系统: CentOS 7 

frp版本: 0.59.0

 1. 查看系统架构,选择对应的安装包
uname -m
  • 如果输出是 x86_64,那么是 AMD/Intel 64位架构。
  • 如果输出是 aarch64 或 armv7l,那么是 ARM 架构。

这里我的是x86_64,所以执行下面命令进行下载,其他的可以从frp发布包去下载

curl -L -O https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz
2. 修改配置文件
a. 公网机器上的配置文件修改

        在 frps.toml 文件中添加以下内容,以指定 HTTP 请求的监听端口为 8080。

        注意: 公网机器需要对外开放这两个端口,否则内网所在的客户端无法与之通信,其中bindPort是与客户端通信的端口

bindPort = 7000
vhostHTTPPort = 8080

b. 启动frps
./frps -c ./frps.toml
c. 内网机器上的配置文件修改

         在 frpc.toml 文件中添加以下内容,确保设置了正确的服务器 IP 地址、本地 Web 服务监听端口和自定义域名:

serverAddr = "x.x.x.x"
serverPort = 7000

[[proxies]]
name = "web"
type = "http"
localPort = 80
customDomains = ["www.yourdomain.com"]

[[proxies]]
name = "web2"
type = "http"
localPort = 8080
customDomains = ["www.yourdomain2.com"]
d. 启动frpc
./frpc -c ./frpc.toml
3. 验证是否可以访问

直接输入域名看是否可以访问

4. 使用systemd来管理frps、frpc服务(可选,但建议)
  • 创建frps.service文件
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

 

  • 使用 systemd 命令管理 frps 服务
# 启动frp
sudo systemctl start frps
# 停止frp
sudo systemctl stop frps
# 重启frp
sudo systemctl restart frps
# 查看frp状态
sudo systemctl status frps
  • 设置 frps 开机自启动
sudo systemctl enable frps

最后在客户端机器上采用同样的方式来创建frpc服务 

标签:web,sudo,frps,frpc,frp,公网,内网
From: https://blog.csdn.net/zqcj6291151/article/details/141390490

相关文章

  • 开发一个MutatingWebhook
    介绍Webhook就是一种HTTP回调,用于在某种情况下执行某些动作,Webhook不是K8S独有的,很多场景下都可以进行Webhook,比如在提交完代码后调用一个Webhook自动构建docker镜像准入Webhook是一种用于接收准入请求并对其进行处理的HTTP回调机制。可以定义两种类型的准入Webhook,即验......
  • webpack4升级到webpack5后部分页面出现Uncaught (in promise) ReferenceError: Cannot
    循环依赖当两个或多个模块相互引用时,就会发生JavaScript中的循环依赖(也称为循环依赖)。这可以是直接引用(A->B->A):或间接( A->B->C->A):虽然循环依赖可能不会直接导致错误,但它们几乎总是会带来意想不到的后果。这可能表现为TypeScript类型检查缓慢或开发服务器频......
  • 【内网渗透系列】域内权限划分
    域本地组成员范围:林中所有的用户、全局组、通用组、本域的域本地组。作用范围:本域。用途:给域内的资源设置访问权限。举例:test域有一台打印机P,test域中的用户A和B需要有访问权,新建域本地组DL,给域本地组DL赋予访问打印机P的权限,把用户A和B加到域本地组DL即可。全局组成员范围......
  • delphi webbrowser屏蔽右键菜单 防止右键 防止ctrl N
    本文介绍了如何在Delphi中通过事件处理和消息过滤,阻止WebBrowser控件中的右键菜单以及防止用户使用Ctrl+N快捷键。通过`ProcessMsg`和`ApplicationEvents1Message`等方法实现对浏览器行为的控制。{关键字=webbrowser屏蔽右键菜单防止右键防止ctrlN采集软件=MKM-我的知识管理......
  • 网页WEB前端实现CAD图纸比较功能
    前言设计师在工作中需要对图纸进行多次改版或审核,图纸迭代后,修改的内容与之前内容之间需要比对,因此mxcad 提供给了CAD图纸比对功能,用户使用该功能能够快速识别图纸改版前后的具体差异,另外我们为用户提供了图纸比对相关的的API,用户可根据自身需求对该功能进行深入的二次开发。图......
  • C++实现web token加密生成验证
    代码 #include"jwt-cpp/traits/boost-json/traits.h"#include<boost/json/src.hpp>//Youmayrequirethisifyouarenotbuildingitelsewhere#include<iostream>#include<sstream>voidtestToken(){ usingsec=std::chrono::......
  • 软件测试-web端测试-代码起步
    记录学习笔记第一步、导包web自动化测试常用selenium,这是必要的。fromseleniumimportwebdriver 第二步、确定要使用的浏览器浏览器有很多,常用Chrome,这里看你下载的webdriver是谁的,我用的是edge。用谷歌,那就把Edge改为Chrome,用火狐就改为Firefoxdriver=webdriver.Ed......
  • 软件测试-web自动化测试-前期环境搭建
    记录学习笔记web端自动化测试也就是网页自动化测试。主要在PyCharm软件里编写代码,前期需要准备python+selenium的基础环境搭建。1、下载安装python,下载最新版检查环境:在cmd里python -v和pip -v可以正常出现。√2、PyCharm安装,下载社区免费版直接next安装即可,打开软......
  • 短视频生成与AI的结合应用,Web/App RPA 智能化应用
    在这个日新月异的时代,人工智能(AI)与自动化技术的融合正以前所未有的速度重塑着各行各业。你是否梦想过,在信息的海洋中自动筛选出精华,用创意点亮每一篇内容,同时让繁琐的工作流程变得轻松高效?我们诚邀您参加即将开启的“AI自动化应用开发”公开课第3期,一同探索如何用好AI与自动化,让您......
  • WebDriver API剖析----元素、鼠标、键盘的操作
    一、元素的操作1、清除元素的内容clear()方法用于清除元素中已有的内容。fromseleniumimportwebdriverfromtimeimportsleepfromselenium.webdriver.common.byimportBydriver=webdriver.Firefox()driver.get("https://www.baidu.com")driver.find_element(......