当前位置: 首页 > 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…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...