自学内容网 自学内容网

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 可以通过域名在公网中安全地访问。


原文地址:https://blog.csdn.net/m0_58648890/article/details/143807673

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!