目 录CONTENT

文章目录

【工具】FRP内网穿透配置指南

EulerBlind
2025-07-17 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

FRP内网穿透配置指南

FRP(Fast Reverse Proxy)是一个高性能的反向代理应用,可以帮助您将内网服务暴露到公网。本指南将详细介绍如何配置FRP服务端(frps)和客户端(frpc)。

架构概述

FRP采用C/S架构:

  • FRPS(服务端):部署在具有公网IP的服务器上
  • FRPC(客户端):部署在内网环境中,需要暴露服务的机器上

服务端配置(FRPS)

安装和配置脚本

以下脚本将自动下载、安装并配置FRP服务端:

#!/bin/bash
# 下载FRP
wget https://github.com/fatedier/frp/releases/download/v0.31.1/frp_0.31.1_linux_amd64.tar.gz
tar -zxvf frp_0.31.1_linux_amd64.tar.gz
rm -rf frp_0.31.1_linux_amd64.tar.gz
cd frp_0.31.1_linux_amd64

# 复制二进制文件到系统目录
cp ./frps /usr/bin/

# 创建配置目录
mkdir /etc/frp
cp ./frps.ini /etc/frp/

# 生成服务端配置文件
cat>/etc/frp/frps.ini<<EOF
[common]
# 服务器端端口
bind_port = 7000
# 客户端连接凭证
privilege_token = euler_blind
# 最大连接数
max_pool_count = 5
# 客户端映射的端口
vhost_http_port = 7001
subdomain_host = elvisiky.com

[gitlab]
type=http
auth_token=euler_blind
subdomain=gitlab

[nextcloud]
type=http
auth_token=euler_blind
subdomain=nextcloud

[ghost]
type=http
auth_token=euler_blind
subdomain=blog

[jenkins]
type=http
auth_token=euler_blind
subdomain=jenkins

# 服务器看板的访问端口(可选)
# dashboard_port = 7500
# 服务器看板账户
# dashboard_user = admin
# dashboard_pwd = fxl123
EOF

# 创建systemd服务文件
cat>/etc/systemd/system/frps.service<<EOF
[Unit]
Description=frps daemon
After=syslog.target network.target
Wants=network.target

[Service]
Type=simple
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini
Restart=always
RestartSec=1min

[Install]
WantedBy=multi-user.target
EOF

# 启动并设置开机自启
systemctl start frps
systemctl enable frps
systemctl status frps

服务端配置文件详解(frps.ini)

[common]
# 服务器端监听端口,客户端连接此端口
bind_port = 7000
# 客户端连接凭证,确保安全性
privilege_token = euler_blind
# 最大连接池数量
max_pool_count = 5
# HTTP虚拟主机端口
vhost_http_port = 7001
# 子域名主机
subdomain_host = elvisiky.com

# 各个服务的配置
[gitlab]
type=http
auth_token=euler_blind
subdomain=gitlab

[nextcloud]
type=http
auth_token=euler_blind
subdomain=nextcloud

[ghost]
type=http
auth_token=euler_blind
subdomain=blog

[jenkins]
type=http
auth_token=euler_blind
subdomain=jenkins

# Web管理面板配置(可选)
# dashboard_port = 7500
# dashboard_user = admin
# dashboard_pwd = fxl123

客户端配置(FRPC)

安装和配置脚本

在内网机器上运行以下脚本:

#!/bin/bash
# 下载FRP
wget https://github.com/fatedier/frp/releases/download/v0.31.1/frp_0.31.1_linux_amd64.tar.gz
tar -zxvf frp_0.31.1_linux_amd64.tar.gz
rm frp_0.31.1_linux_amd64.tar.gz
cd frp_0.31.1_linux_amd64

# 复制二进制文件到系统目录
cp ./frpc /usr/bin/

# 创建配置目录
mkdir /etc/frp
cp ./frpc.ini /etc/frp/

# 生成客户端配置文件
cat>/etc/frp/frpc.ini<<EOF
[common]
# 服务器地址(公网服务器IP或域名)
server_addr = elvisiky.com
# 服务器通信端口
server_port = 7000
# 服务器连接凭证(需与服务端一致)
privilege_token = euler_blind

[gitlab]
type = http
# 本地服务端口
local_port = 80
use_gzip = true
subdomain = gitlab

[nextcloud]
type = http
local_port = 7080
use_gzip = true
subdomain = nextcloud

[ghost]
type=http
local_port = 7368
use_gzip = true
subdomain=blog

[jenkins]
type=http
local_port = 5080
use_gzip = true
subdomain=jenkins
EOF

# 创建systemd服务文件
cat>/etc/systemd/system/frpc.service<<EOF
[Unit]
Description=frpc daemon
After=syslog.target network.target
Wants=network.target

[Service]
Type=simple
ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini
Restart=always
RestartSec=1min

[Install]
WantedBy=multi-user.target
EOF

# 启动并设置开机自启
systemctl start frpc
systemctl enable frpc
systemctl status frpc

客户端配置文件详解(frpc.ini)

[common]
# 服务器地址(公网服务器的IP或域名)
server_addr = elvisiky.com
# 服务器通信端口(需与服务端bind_port一致)
server_port = 7000
# 连接凭证(需与服务端privilege_token一致)
privilege_token = euler_blind

# 各个服务的映射配置
[gitlab]
type = http
# 本地服务的端口
local_port = 80
# 启用压缩传输
use_gzip = true
# 子域名
subdomain = gitlab

[nextcloud]
type = http
local_port = 7080
use_gzip = true
subdomain = nextcloud

[ghost]
type=http
local_port = 7368
use_gzip = true
subdomain=blog

[jenkins]
type=http
local_port = 5080
use_gzip = true
subdomain=jenkins

Nginx反向代理配置

在公网服务器上配置Nginx,将请求转发到FRP:

server {
    listen 80;
    # 配置多个子域名
    server_name gitlab.* nextcloud.* rancher.* jenkins.* blog.* love.*;

    location / {
        # 设置最大上传文件大小
        client_max_body_size 1000m;
      
        # 代理到FRP的HTTP端口
        proxy_pass http://127.0.0.1:7001;
        proxy_redirect off;
      
        # 设置代理头信息
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
    }
  
    # 防爬虫配置
    if ($http_user_agent ~* "360Spider|JikeSpider|Spider|spider|bot|Bot|2345Explorer|curl|wget|webZIP|qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot|NSPlayer|bingbot"){
        return 403;
    }
}

使用说明

1. 部署顺序

  1. 首先在公网服务器上部署FRPS
  2. 然后在内网机器上部署FRPC
  3. 配置Nginx反向代理(如需要)

2. 访问方式

配置完成后,可以通过以下方式访问内网服务:

  • GitLab: http://gitlab.elvisiky.com
  • Nextcloud: http://nextcloud.elvisiky.com
  • Blog: http://blog.elvisiky.com
  • Jenkins: http://jenkins.elvisiky.com

3. 常用管理命令

# 查看服务状态
systemctl status frps  # 服务端
systemctl status frpc  # 客户端

# 重启服务
systemctl restart frps
systemctl restart frpc

# 查看日志
journalctl -u frps -f
journalctl -u frpc -f

# 停止服务
systemctl stop frps
systemctl stop frpc

安全建议

  1. 修改默认端口:避免使用默认的7000端口
  2. 使用强密码:修改 privilege_token为复杂密码
  3. 启用HTTPS:配置SSL证书,启用HTTPS访问
  4. 防火墙配置:只开放必要的端口
  5. 定期更新:及时更新FRP版本以获得安全补丁

故障排查

常见问题

  1. 连接失败

    • 检查防火墙设置
    • 确认端口是否正确开放
    • 验证token是否一致
  2. 服务无法启动

    • 检查配置文件语法
    • 查看系统日志
    • 确认端口未被占用
  3. 访问缓慢

    • 启用gzip压缩
    • 检查网络带宽
    • 优化代理配置

提示:建议在生产环境中使用最新版本的FRP,并定期备份配置文件。

0

评论区