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. 部署顺序
- 首先在公网服务器上部署FRPS
- 然后在内网机器上部署FRPC
- 配置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
安全建议
- 修改默认端口:避免使用默认的7000端口
- 使用强密码:修改
privilege_token
为复杂密码 - 启用HTTPS:配置SSL证书,启用HTTPS访问
- 防火墙配置:只开放必要的端口
- 定期更新:及时更新FRP版本以获得安全补丁
故障排查
常见问题
-
连接失败
- 检查防火墙设置
- 确认端口是否正确开放
- 验证token是否一致
-
服务无法启动
- 检查配置文件语法
- 查看系统日志
- 确认端口未被占用
-
访问缓慢
- 启用gzip压缩
- 检查网络带宽
- 优化代理配置
提示:建议在生产环境中使用最新版本的FRP,并定期备份配置文件。
评论区