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