用frp实现内网穿透的完整指南:告别花生壳,自由穿透不是梦

用frp实现内网穿透的完整指南:告别花生壳,自由穿透不是梦

在开发和测试过程中,我们经常需要将内网的服务暴露到公网,以便进行远程访问或调试。传统的解决方案如花生壳虽然能实现基本功能,但往往存在功能受限、收费高昂等问题。今天,我将为大家介绍一款开源、免费且功能强大的内网穿透工具——frp,让你彻底告别传统工具的束缚,享受自由穿透的乐趣。

一、为什么选择frp?

1.1 传统工具的痛点

相信很多开发者都遇到过类似的问题:

  • 功能受限:像花生壳这样的商业工具,往往只提供有限的端口映射,想要暴露更多服务需要额外付费。
  • 配置复杂:每次新增服务都需要复杂的配置过程,使用起来不够便捷。
  • 性能一般:由于需要经过多层中转,访问速度往往不尽如人意。

1.2 frp的优势

frp(Fast Reverse Proxy)是一款高性能的反向代理应用,专门用于解决内网穿透问题。它具有以下优势:

  1. 完全免费开源:基于MIT许可证,可以自由使用和修改。
  2. 功能丰富:支持TCP、UDP、HTTP、HTTPS等多种协议。
  3. 配置简单:通过简单的配置文件即可完成复杂的服务暴露。
  4. 性能优秀:直接连接,减少中转环节,提升访问速度。
  5. 扩展性强:支持负载均衡、访问控制等高级功能。

二、frp工作原理

frp采用客户端-服务端(C/S)架构,通过在公网服务器部署服务端,在内网机器部署客户端,实现内网服务的外网访问。

2.1 核心组件

  • frps(服务端):部署在具有公网IP的服务器上,负责监听来自客户端的连接请求,并将请求转发到对应的内网服务。
  • frpc(客户端):部署在内网机器上,负责将本地服务通过安全隧道转发到frps服务端。

2.2 工作流程

  1. frpc启动后主动连接到frps,建立长连接
  2. 外网用户访问frps监听的端口
  3. frps根据配置将请求转发给对应的frpc
  4. frpc将请求转发给本地服务
  5. 本地服务处理请求后,通过原路返回响应

三、安装与配置

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 连接失败

  1. 检查服务端端口是否开放
  2. 确认配置文件中的IP和端口是否正确
  3. 检查防火墙设置

7.2 访问速度慢

  1. 选择网络质量较好的公网服务器
  2. 启用KCP协议提升传输效率
  3. 检查服务器带宽限制

7.3 安全性问题

  1. 设置强密码和token
  2. 启用TLS加密
  3. 限制访问来源IP

八、总结

frp作为一款开源、免费且功能强大的内网穿透工具,为我们提供了极大的便利。相比传统的商业工具,它不仅功能更丰富,配置更灵活,而且完全免费。通过本文的介绍,相信你已经掌握了frp的基本使用方法。

在实际使用中,建议根据具体需求进行配置调整,并注意安全性设置。随着你对frp的深入了解,你会发现它还有更多强大的功能等待你去探索。

告别花生壳,拥抱frp,让内网穿透变得简单自由!


标题:用frp实现内网穿透的完整指南:告别花生壳,自由穿透不是梦
作者:jiangyi
地址:http://jiangyi.space/articles/2025/12/21/1766304281795.html

    0 评论
avatar