FRP 实现内网穿透
如何通过 FRP 实现内网穿透:群晖 NAS 的 Gitea 和 GitLab 访问配置指南
在自建服务的过程中,经常会遇到内网访问受限的问题。本文将介绍如何利用 FRP(Fast Reverse Proxy)来实现内网穿透,以便在外网访问群晖 NAS 上的 Gitea 和 GitLab 服务。
一、配置目标与实现方案
本文的目标是通过 FRP 和 Nginx 将群晖 NAS 上的 Gitea 和 GitLab 服务公开在互联网上,实现以下功能:
- 通过自定义域名访问服务:用户可以直接通过域名访问服务而不需输入端口号。
- 确保连接的安全性:通过 Token 认证和反向代理配置,提高服务的安全性。
二、阿里云服务器配置 FRP 服务端
首先需要在阿里云服务器上安装并配置 FRP 服务端,它将接收来自群晖 NAS 上 FRP 客户端的连接请求,并将请求通过隧道转发到相应的端口。
1. 安装 FRP 服务端
-
下载 FRP:选择适合的版本并下载,以下为示例:
wget https://github.com/fatedier/frp/releases/download/v0.37.0/frp_0.37.0_linux_amd64.tar.gz
-
解压文件:
tar -zxvf frp_0.37.0_linux_amd64.tar.gz cd frp_0.37.0_linux_amd64
-
将文件移至指定目录:
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 服务端配置为系统服务,确保服务器重启后服务自动运行。
-
创建服务文件:
sudo nano /etc/systemd/system/frps.service
-
填入以下内容:
[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
-
启动并启用服务:
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 # 阿里云上的访问端口
- serverAddr 和 serverPort: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技术的又一重要里程碑。值得注意的是,…...

【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>() }如上代码,第一行赋值语句是OK的,第二行赋值语句在编辑器上直接就报错…...

第三百二十五节 Java线程教程 - Java Fork/Join框架
Java线程教程 - Java Fork/Join框架 fork/join框架通过利用机器上的多个处理器或多个内核来解决问题。 该框架有助于解决涉及并行性的问题。 fork/join框架创建一个线程池来执行子任务。 当线程在子任务上等待完成时,框架使用该线程来执行其他线程的其他未决子任…...
网络游戏安全现状及相关应对方案
中国网络游戏历经十余年的飞速发展,取得了显著成就,但与此同时,也陷入了诸多安全问题的泥沼。 一、中国网络游戏发展中的安全困境 (一)灰色产业链滋生 外挂、私服、盗号、打金工作室以及网络信息诈骗等灰色产业链在…...
uniapp h5地址前端重定向跳转
简单说下功能,就是在地址输入http://localhost:8080/home 会自行跳转到http://localhost:8080/pages/home/index,如果有带参数的话也会携带上去。 ps:只能在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的运行日志,这次使用--log-file,因为它可以配置日志的级别、格式和每行日志的生成时间。 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,可以按照以下步骤操作: 安装NuGet包: 安装MiniProfiler.AspNetCore.Mvc包以集成MiniProfiler。安装MiniProfiler.EntityFrameworkCore包以监…...

视频会议接入GB28181视频指挥调度,语音对讲方案
传统的视频会议指挥调度系统目前主流的互联网会议大部分都是私有协议,功能都很独立。目前主流的视频监控国标都最GB平台,新的需求要求融合平台要接入监控等设备,并能实现观看监控接入会议,实时语音设备指挥现场工作人员办公实施。…...
深度学习和图像处理
看来你对深度学习和图像处理很感兴趣呢,让我来一一解答你的疑惑吧。 深度学习高纬度特征 首先,我猜你是想问“深度学习中的高维特征”吧。在深度学习中,随着网络层数的加深,网络的感受野逐渐变大,语义表达能力也随之增…...

〔 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表中建立属性列: 列名称,类型在后 n…...
云安全之云计算基础
0x00 前言 本文主要是针对云计算相关的基础梳理和整理。 云计算 NIST 800-145ISO/IEC 17788ISO/IEC 17789云安全 NIST 500-299 云安全ISO / IEC FDIS 27017 云安全0x01 云计算基础 什么是云计算: 一种新的运作模式和一组用于管理计算资源共享池的技术。云计算是一种颠覆性的…...

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

《ElementPlus 与 ElementUI 差异集合》Icon 图标 More 差异说明
参考 《element plus 使用 icon 图标(两种方式)》使用 icon 升级 Vue2 升级 Vue3 项目时,遇到命名时的实心与空心点差异! ElementUI: 实心是 el-icon-more空心是 el-icon-more-outline ElementPlus: 实心是 el-icon-more-fill…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...