当前位置: 首页 > news >正文

FRP 实现内网穿透

如何通过 FRP 实现内网穿透:群晖 NAS 的 Gitea 和 GitLab 访问配置指南

在自建服务的过程中,经常会遇到内网访问受限的问题。本文将介绍如何利用 FRP(Fast Reverse Proxy)来实现内网穿透,以便在外网访问群晖 NAS 上的 Gitea 和 GitLab 服务。

一、配置目标与实现方案

本文的目标是通过 FRP 和 Nginx 将群晖 NAS 上的 Gitea 和 GitLab 服务公开在互联网上,实现以下功能:

  • 通过自定义域名访问服务:用户可以直接通过域名访问服务而不需输入端口号。
  • 确保连接的安全性:通过 Token 认证和反向代理配置,提高服务的安全性。

二、阿里云服务器配置 FRP 服务端

首先需要在阿里云服务器上安装并配置 FRP 服务端,它将接收来自群晖 NAS 上 FRP 客户端的连接请求,并将请求通过隧道转发到相应的端口。

1. 安装 FRP 服务端

  1. 下载 FRP:选择适合的版本并下载,以下为示例:

    wget https://github.com/fatedier/frp/releases/download/v0.37.0/frp_0.37.0_linux_amd64.tar.gz
    
  2. 解压文件

    tar -zxvf frp_0.37.0_linux_amd64.tar.gz
    cd frp_0.37.0_linux_amd64
    
  3. 将文件移至指定目录

    sudo mkdir /etc/frp
    sudo mv * /etc/frp
    cd /etc/frp
    

2. 配置 FRP 服务端(frps.ini

/etc/frp 目录中创建或编辑 frps.ini 文件,配置如下:

[common]
bind_port = 7000               # 用于客户端连接的端口
dashboard_port = 7500          # 仪表板端口,用于查看连接状态
dashboard_user = "admin"       # 仪表板用户名
dashboard_pwd = "password"     # 仪表板密码
auth.token = "你的token"        # 客户端和服务端认证的 token
  • bind_port:设置为 7000,FRP 服务端将通过该端口接收客户端连接。
  • dashboard_port:设置为 7500,通过该端口可以查看 FRP 的连接状态。
  • auth.token:用于客户端和服务端的身份验证,保证连接的安全性。

3. 启动 FRP 服务端

/etc/frp 目录下启动 FRP 服务端:

./frps -c frps.ini &

4. 配置 FRP 服务端为系统服务(可选)

可以将 FRP 服务端配置为系统服务,确保服务器重启后服务自动运行。

  1. 创建服务文件

    sudo nano /etc/systemd/system/frps.service
    
  2. 填入以下内容

    [Unit]
    Description=FRP Server
    After=network.target[Service]
    ExecStart=/etc/frp/frps -c /etc/frp/frps.ini
    Restart=on-failure[Install]
    WantedBy=multi-user.target
    
  3. 启动并启用服务

    sudo systemctl daemon-reload
    sudo systemctl start frps
    sudo systemctl enable frps
    

5. 配置阿里云安全组

在阿里云控制台中,确保 7000 和 7500 端口的入站规则已开放,以便客户端连接和仪表板访问。


三、群晖 NAS 配置 FRP 客户端

在群晖上配置 FRP 客户端,将 Gitea 和 GitLab 服务通过隧道转发到阿里云服务器上的指定端口。

1. 配置 FRP 客户端(frpc.toml

在群晖上创建 frpc.toml 文件,内容如下:

# 公共配置
serverAddr = "阿里云服务器公网IP"
serverPort = 7000
auth.method = "token"
auth.token = "你的token"# Gitea 服务转发
[[proxies]]
name = "Gitea"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3000            # Gitea 在群晖上的端口
remotePort = 3000           # 阿里云上的访问端口# GitLab 服务转发
[[proxies]]
name = "GitLab"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8888            # GitLab 在群晖上的端口
remotePort = 8888           # 阿里云上的访问端口
  • serverAddrserverPort:FRP 服务端的 IP 地址和端口。
  • proxies:定义每个服务的转发规则,将群晖上的服务端口映射到阿里云的对应端口。

2. 启动 FRP 客户端

使用以下命令启动 FRP 客户端:

./frpc -c /path/to/frpc.toml &

四、阿里云配置 Nginx 反向代理

在阿里云上配置 Nginx,使每个服务可以通过独立的域名访问。

1. Gitea 的 Nginx 配置

/etc/nginx/sites-available/gitea 中配置:

server {listen 80;server_name gitea.example.com;location / {proxy_pass http://127.0.0.1:3000;  # FRP 转发的 Gitea 端口proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_connect_timeout 60s;proxy_read_timeout 60s;proxy_send_timeout 60s;}
}

2. GitLab 的 Nginx 配置

/etc/nginx/sites-available/gitlab 中配置:

server {listen 80;server_name gitlab.example.com;location / {proxy_pass http://127.0.0.1:8888;  # FRP 转发的 GitLab 端口proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_connect_timeout 60s;proxy_read_timeout 60s;proxy_send_timeout 60s;}
}

3. 启用并重启 Nginx

sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

五、通过 1Panel 安装 FRP 服务端

1Panel 是新一代的 Linux 服务器运维管理面板
在这里插入图片描述如果系统是 Ubuntu 可以通过下面的命令安装:

curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

选择 frp 服务端安装即可,配置和上面文件上也差不多
在这里插入图片描述


六、总结

  • FRP 服务端:在阿里云上配置 FRP 服务端,使群晖的服务可以穿透内网,公开在公网端口。
  • FRP 客户端:在群晖上配置 FRP 客户端,将 Gitea 和 GitLab 服务转发到阿里云的相应端口。
  • Nginx 反向代理:通过 Nginx 配置反向代理,让服务可以通过独立域名访问。

通过以上步骤,即可实现对内网服务的外网访问,使 Gitea 和 GitLab 可以通过域名在公网中安全地访问。

相关文章:

FRP 实现内网穿透

如何通过 FRP 实现内网穿透:群晖 NAS 的 Gitea 和 GitLab 访问配置指南 在自建服务的过程中,经常会遇到内网访问受限的问题。本文将介绍如何利用 FRP(Fast Reverse Proxy)来实现内网穿透,以便在外网访问群晖 NAS 上的…...

数据结构笔记(其八)--一般树的存储及其遍历

1.知识总览 一般的树会有多个孩子,所以存储结构也会与二叉树略有不同。 一般树的遍历。 2.双亲表示法 双亲表示法,也是父亲表示法,即每个节点中都存储了其父节点的地址信息。 特性:可以轻易地找到父节点,但寻找孩子节…...

在spring boot工程中使用Filter时,@WebFilter 注解不生效的问题分析和解决方案

1. 问题描述 首先编写一个Filter类并通过Component放入spring容器中,通过实现jakarta.servlet中提供的Filter接口完成过滤器的创建,代码如下。 import jakarta.servlet.*; import jakarta.servlet.annotation.WebFilter; import org.springframework.st…...

浅谈“通感一体”

文章目录 5G_Advanced的关键技术通感一体的介绍通感一体应用通感一体面临的挑战 5G_Advanced的关键技术 2024年6月18日16点30分,在上海举行的3GPP RAN第104次会议上,R18标准正式冻结,标志着5G技术的又一重要里程碑。值得注意的是&#xff0c…...

【Linux】监控系统Zabbix的安装与配置

文章目录 一、前期准备1、安装LAMP2、配置SELinux与防火墙3、测试Apache4、配置数据库5、创建zabbix数据库及应用 二、server端安装配置1、软件包安装2、配置数据库3、zabbix访问测试4、配置web界面 三、Agent端安装配置1、安装zabbix-agent2、配置3、启动zabbix-agent4、配置防…...

Springboot定时任务

Component EnableScheduling public class SpringBootTestJob {Scheduled(cron "0/5 * * * * ?")public void testScheduled(){System.out.println("SpringBootTestJob test");} }这段代码使用了 Spring Boot 自带的定时任务机制。解释如下: …...

node.js知识点总结

1、Node.js Node. js是一个基于 Chrome v8引擎的服务器端 JavaScript运行环境;Node. js是一个事件驱动、非阻塞式I/O的模型,轻量而又高效;Node. js的包管理器npm是全球最大的开源库生态系统。 2、数据处理中的buffer: 具体…...

Kotlin中泛型的协变

interface Shapeclass Circle : Shapefun main() {val shapes1: List<Shape> listOf<Circle>()val shapes2: MutableList<Shape> mutableListOf<Circle>() }如上代码&#xff0c;第一行赋值语句是OK的&#xff0c;第二行赋值语句在编辑器上直接就报错…...

第三百二十五节 Java线程教程 - Java Fork/Join框架

Java线程教程 - Java Fork/Join框架 fork/join框架通过利用机器上的多个处理器或多个内核来解决问题。 该框架有助于解决涉及并行性的问题。 fork/join框架创建一个线程池来执行子任务。 当线程在子任务上等待完成时&#xff0c;框架使用该线程来执行其他线程的其他未决子任…...

网络游戏安全现状及相关应对方案

中国网络游戏历经十余年的飞速发展&#xff0c;取得了显著成就&#xff0c;但与此同时&#xff0c;也陷入了诸多安全问题的泥沼。 一、中国网络游戏发展中的安全困境 &#xff08;一&#xff09;灰色产业链滋生 外挂、私服、盗号、打金工作室以及网络信息诈骗等灰色产业链在…...

uniapp h5地址前端重定向跳转

简单说下功能&#xff0c;就是在地址输入http://localhost:8080/home 会自行跳转到http://localhost:8080/pages/home/index&#xff0c;如果有带参数的话也会携带上去。 ps&#xff1a;只能在h5中使用 首先需要用到query-string 安装query-string npm install query-string…...

uniapp隐藏自带的tabBar

uniapp隐藏自带的tabBar 场景: 微信小程序在使用自定义tabBar组件时, 隐藏uniapp自带的tabBar <template> <!-- index页面 --> </template> <script setup> import { onShow } from /utils/wxUtils onShow(() > {uni.hideTabBar() // 隐藏自带的tab…...

使用--log-file保存pytest的运行日志

前面使用了tee和重定向来保存pytest的运行日志&#xff0c;这次使用--log-file&#xff0c;因为它可以配置日志的级别、格式和每行日志的生成时间。 pytest -q -s -ra --count100 test_open_stream.py --alluredir./report/CXL --log-filepytest_log.txt 【pytest.ini】 使用…...

WebAPI性能监控-MiniProfiler与Swagger集成

Net8_WebAPI性能监控-MiniProfiler与Swagger集成 要在.NET Core项目中集成MiniProfiler和Swagger&#xff0c;可以按照以下步骤操作&#xff1a; 安装NuGet包&#xff1a; 安装MiniProfiler.AspNetCore.Mvc包以集成MiniProfiler。安装MiniProfiler.EntityFrameworkCore包以监…...

视频会议接入GB28181视频指挥调度,语音对讲方案

传统的视频会议指挥调度系统目前主流的互联网会议大部分都是私有协议&#xff0c;功能都很独立。目前主流的视频监控国标都最GB平台&#xff0c;新的需求要求融合平台要接入监控等设备&#xff0c;并能实现观看监控接入会议&#xff0c;实时语音设备指挥现场工作人员办公实施。…...

深度学习和图像处理

看来你对深度学习和图像处理很感兴趣呢&#xff0c;让我来一一解答你的疑惑吧。 深度学习高纬度特征 首先&#xff0c;我猜你是想问“深度学习中的高维特征”吧。在深度学习中&#xff0c;随着网络层数的加深&#xff0c;网络的感受野逐渐变大&#xff0c;语义表达能力也随之增…...

〔 MySQL 〕数据类型

目录 1.数据类型分类 2 数值类型 2.1 tinyint类型 2.2 bit类型 2.3 小数类型 2.3.1 float 2.3.2 decimal 3 字符串类型 3.1 char 3.2 varchar 3.3 char和varchar比较 4 日期和时间类型 5 enum和set mysql表中建立属性列&#xff1a; 列名称&#xff0c;类型在后 n…...

云安全之云计算基础

0x00 前言 本文主要是针对云计算相关的基础梳理和整理。 云计算 NIST 800-145ISO/IEC 17788ISO/IEC 17789云安全 NIST 500-299 云安全ISO / IEC FDIS 27017 云安全0x01 云计算基础 什么是云计算: 一种新的运作模式和一组用于管理计算资源共享池的技术。云计算是一种颠覆性的…...

PostgreSQL pg-xact(clog)目录文件缺失处理

一、 背景 前些天晚上突然收到业务反馈&#xff0c;查询DB中的一个表报错 Could not open file "pg-xact/005E": No such file or directory. 两眼一黑难道是文件损坏了...登录查看DB日志&#xff0c;还好没有其他报错&#xff0c;业务也反馈只有这一个表在从库查询报…...

《ElementPlus 与 ElementUI 差异集合》Icon 图标 More 差异说明

参考 《element plus 使用 icon 图标(两种方式)》使用 icon 升级 Vue2 升级 Vue3 项目时&#xff0c;遇到命名时的实心与空心点差异&#xff01; ElementUI&#xff1a; 实心是 el-icon-more空心是 el-icon-more-outline ElementPlus&#xff1a; 实心是 el-icon-more-fill…...

性能优化与profiling技术 - 打造极致性能

引言 性能优化是C语言编程的终极目标之一。作为最接近硬件的高级语言,C语言提供了丰富的优化手段。但盲目优化往往适得其反,科学的性能分析才是优化的前提。 本文将深入讲解性能分析方法、常见优化技巧、以及实用的profiling工具,帮助你写出高性能的C程序。 一、性能测量…...

STM32F103驱动ST7567 LCD屏:手把手教你移植U8g2库(SPI接口,附完整工程)

STM32F103驱动ST7567 LCD屏&#xff1a;从零开始移植U8g2库实战指南 当你第一次拿到一块ST7567驱动的LCD屏时&#xff0c;可能会被各种引脚定义和初始化代码搞得晕头转向。本文将带你从硬件连接到软件移植&#xff0c;一步步完成U8g2库在STM32F103上的适配过程。不同于简单的代…...

OpenClaw用户如何通过CLI子命令快速完成Taotoken接入配置

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 OpenClaw用户如何通过CLI子命令快速完成Taotoken接入配置 对于使用OpenClaw进行AI智能体开发的开发者而言&#xff0c;快速接入稳定…...

2025最新易支付模板源码 全开源 前台+用户中心+后台三合一

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 2025最新易支付模板源码 全开源 前台用户中心后台三合一 二、效果展示 1.部分代码 代码如下&#xff08;示例&#xff09;&#xff1a; case orderList:$sql" 11";if(isse…...

你的TP53基因在哪个数据库?一文搞懂Ensembl ID、Entrez ID、UniProt ID在生信分析中的实战选择

你的TP53基因在哪个数据库&#xff1f;一文搞懂Ensembl ID、Entrez ID、UniProt ID在生信分析中的实战选择 在基因组学研究中&#xff0c;一个基因就像一位国际旅行者&#xff0c;每到一个国家&#xff08;数据库&#xff09;就会获得一个新的护照号码&#xff08;基因ID&#…...

前端工程化18:前端单元测试Jest实战,保障项目代码稳定性

前端工程化18:前端单元测试Jest实战,保障项目代码稳定性 文章目录 前端工程化18:前端单元测试Jest实战,保障项目代码稳定性 前言 一、单元测试核心概念 1. 什么是单元测试 2. 单元测试优势 3. 适用测试场景 二、Jest环境快速搭建 1. 安装依赖 2. 新增测试运行脚本 3. 目录规…...

Claude Code + Windows 桌面消息通知配置指南

Claude Code Windows 桌面通知配置指南 让 Claude Code 在完成任务后自动弹出 Windows 桌面通知&#xff0c;不用一直盯着屏幕等。 前置条件 Windows 10 或 Windows 11Claude Code CLI 已安装并能正常使用 安装步骤 第一步&#xff1a;创建通知脚本 创建目录 %USERPROFILE%\.cl…...

PX4开环控制避坑指南:为什么你的仿真无人机转圈总失败?从`setpoint_raw`话题到模式切换的深度解析

PX4开环控制避坑指南&#xff1a;为什么你的仿真无人机转圈总失败&#xff1f;从setpoint_raw话题到模式切换的深度解析 当你在Gazebo中启动PX4仿真环境&#xff0c;满怀期待地运行自己编写的开环控制代码&#xff0c;却发现无人机要么拒绝转圈&#xff0c;要么突然坠毁&#…...

初次接触Taotoken的新手从注册到成功发起第一次API调用的全过程记录

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 初次接触Taotoken的新手从注册到成功发起第一次API调用的全过程记录 作为一名刚开始接触大模型开发的工程师&#xff0c;我最近在寻…...

别再只下载不固化!紫光同创FPGA/CPLD烧录到Flash的保姆级避坑指南

紫光同创FPGA/CPLD烧录实战&#xff1a;从临时下载到永久固化的全流程精解 第一次成功将程序下载到紫光同创FPGA开发板时的兴奋&#xff0c;很快被一个残酷现实浇灭——断电重启后&#xff0c;所有心血归零。这个场景对许多初学者来说再熟悉不过。JTAG下载只是起点&#xff0c;…...