用frp实现内网穿透的完整指南:告别花生壳,自由穿透不是梦
用frp实现内网穿透的完整指南:告别花生壳,自由穿透不是梦
在开发和测试过程中,我们经常需要将内网的服务暴露到公网,以便进行远程访问或调试。传统的解决方案如花生壳虽然能实现基本功能,但往往存在功能受限、收费高昂等问题。今天,我将为大家介绍一款开源、免费且功能强大的内网穿透工具——frp,让你彻底告别传统工具的束缚,享受自由穿透的乐趣。
一、为什么选择frp?
1.1 传统工具的痛点
相信很多开发者都遇到过类似的问题:
- 功能受限:像花生壳这样的商业工具,往往只提供有限的端口映射,想要暴露更多服务需要额外付费。
- 配置复杂:每次新增服务都需要复杂的配置过程,使用起来不够便捷。
- 性能一般:由于需要经过多层中转,访问速度往往不尽如人意。
1.2 frp的优势
frp(Fast Reverse Proxy)是一款高性能的反向代理应用,专门用于解决内网穿透问题。它具有以下优势:
- 完全免费开源:基于MIT许可证,可以自由使用和修改。
- 功能丰富:支持TCP、UDP、HTTP、HTTPS等多种协议。
- 配置简单:通过简单的配置文件即可完成复杂的服务暴露。
- 性能优秀:直接连接,减少中转环节,提升访问速度。
- 扩展性强:支持负载均衡、访问控制等高级功能。
二、frp工作原理
frp采用客户端-服务端(C/S)架构,通过在公网服务器部署服务端,在内网机器部署客户端,实现内网服务的外网访问。
2.1 核心组件
- frps(服务端):部署在具有公网IP的服务器上,负责监听来自客户端的连接请求,并将请求转发到对应的内网服务。
- frpc(客户端):部署在内网机器上,负责将本地服务通过安全隧道转发到frps服务端。
2.2 工作流程
- frpc启动后主动连接到frps,建立长连接
- 外网用户访问frps监听的端口
- frps根据配置将请求转发给对应的frpc
- frpc将请求转发给本地服务
- 本地服务处理请求后,通过原路返回响应
三、安装与配置
3.1 环境准备
要使用frp,你需要准备以下资源:
- 一台具有公网IP的服务器(作为frps服务端)
- 一台或多台内网机器(作为frpc客户端)
- 确保服务器相关端口已开放
3.2 下载frp
访问frp的GitHub发布页面(https://github.com/fatedier/frp/releases),根据你的操作系统选择合适的版本下载。
以Linux系统为例:
# 下载最新版本(请根据实际情况调整版本号)
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz
# 解压
tar -zxvf frp_0.61.0_linux_amd64.tar.gz
# 进入目录
cd frp_0.61.0_linux_amd64
3.3 配置frps(服务端)
创建或编辑frps.ini文件:
[common]
# 监听地址,默认为0.0.0.0
bind_addr = 0.0.0.0
# frps服务端监听端口,用于接收frpc连接
bind_port = 7000
# 用于KCP协议的监听端口
kcp_bind_port = 7000
# HTTP服务监听端口(可选)
vhost_http_port = 8080
# HTTPS服务监听端口(可选)
vhost_https_port = 8443
# 控制台UI界面监听端口(可选)
dashboard_port = 7500
# 控制台UI界面用户名密码(可选)
dashboard_user = admin
dashboard_pwd = admin
# 鉴权token,客户端需要配置相同的值
token = your_token_here
# 日志文件路径
log_file = ./frps.log
# 日志级别
log_level = info
# 日志轮转天数
log_max_days = 3
3.4 配置frpc(客户端)
创建或编辑frpc.ini文件:
[common]
# frps服务端IP地址
server_addr = x.x.x.x
# frps服务端监听端口
server_port = 7000
# 鉴权token,需要与服务端保持一致
token = your_token_here
# 日志文件路径
log_file = ./frpc.log
# 日志级别
log_level = info
# 日志轮转天数
log_max_days = 3
# 示例1:SSH服务穿透
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
# 示例2:Web服务穿透
[web]
type = http
local_port = 80
custom_domains = yourdomain.com
# 示例3:MySQL服务穿透
[mysql]
type = tcp
local_ip = 127.0.0.1
local_port = 3306
remote_port = 3306
3.5 启动服务
在服务端启动frps:
./frps -c ./frps.ini
在客户端启动frpc:
./frpc -c ./frpc.ini
四、常见配置示例
4.1 穿透SSH服务
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
配置完成后,可以通过ssh -p 6000 user@server_ip连接到内网机器。
4.2 穿透Web服务
[web]
type = http
local_port = 80
custom_domains = yourdomain.com
通过配置域名,可以直接通过域名访问内网的Web服务。
4.3 穿透HTTPS服务
[web_https]
type = https
local_port = 443
custom_domains = yourdomain.com
4.4 穿透数据库服务
[mysql]
type = tcp
local_ip = 127.0.0.1
local_port = 3306
remote_port = 3306
五、高级功能
5.1 启用TLS加密
为了提高安全性,可以在frpc.ini中启用TLS加密:
[common]
# 启用TLS加密
tls_enable = true
5.2 负载均衡
frp支持多个客户端同时连接到同一个代理名称,实现负载均衡:
[web]
type = http
local_port = 80
custom_domains = yourdomain.com
load_balancer_group = web_group
5.3 访问控制
可以通过配置白名单限制访问来源:
[web]
type = http
local_port = 80
custom_domains = yourdomain.com
# 限制访问来源IP
allow_users = user1,user2
六、部署为系统服务
为了确保frp在系统重启后能自动启动,可以将其配置为系统服务。
6.1 systemd配置(Linux)
创建服务文件:
sudo vim /etc/systemd/system/frps.service
添加以下内容:
[Unit]
Description=FRP Server
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/path/to/frps -c /path/to/frps.ini
[Install]
WantedBy=multi-user.target
启动并设置开机自启:
sudo systemctl start frps
sudo systemctl enable frps
七、常见问题与解决方案
7.1 连接失败
- 检查服务端端口是否开放
- 确认配置文件中的IP和端口是否正确
- 检查防火墙设置
7.2 访问速度慢
- 选择网络质量较好的公网服务器
- 启用KCP协议提升传输效率
- 检查服务器带宽限制
7.3 安全性问题
- 设置强密码和token
- 启用TLS加密
- 限制访问来源IP
八、总结
frp作为一款开源、免费且功能强大的内网穿透工具,为我们提供了极大的便利。相比传统的商业工具,它不仅功能更丰富,配置更灵活,而且完全免费。通过本文的介绍,相信你已经掌握了frp的基本使用方法。
在实际使用中,建议根据具体需求进行配置调整,并注意安全性设置。随着你对frp的深入了解,你会发现它还有更多强大的功能等待你去探索。
告别花生壳,拥抱frp,让内网穿透变得简单自由!
标题:用frp实现内网穿透的完整指南:告别花生壳,自由穿透不是梦
作者:jiangyi
地址:http://www.jiangyi.space/articles/2025/12/21/1766304281795.html
- 一、为什么选择frp?
- 1.1 传统工具的痛点
- 1.2 frp的优势
- 二、frp工作原理
- 2.1 核心组件
- 2.2 工作流程
- 三、安装与配置
- 3.1 环境准备
- 3.2 下载frp
- 3.3 配置frps(服务端)
- 3.4 配置frpc(客户端)
- 3.5 启动服务
- 四、常见配置示例
- 4.1 穿透SSH服务
- 4.2 穿透Web服务
- 4.3 穿透HTTPS服务
- 4.4 穿透数据库服务
- 五、高级功能
- 5.1 启用TLS加密
- 5.2 负载均衡
- 5.3 访问控制
- 六、部署为系统服务
- 6.1 systemd配置(Linux)
- 七、常见问题与解决方案
- 7.1 连接失败
- 7.2 访问速度慢
- 7.3 安全性问题
- 八、总结