FRP 搭建详细教程
引言
FRP(Fast Reverse Proxy)是一个高性能的反向代理工具,用于实现内网穿透,允许您从外部网络访问内网服务。它通过客户端-服务器架构工作,服务器端部署在具有公网 IP 的机器上,客户端部署在内网环境中。本教程将详细介绍如何搭建 FRP,包括服务器端和客户端的配置步骤。
前提条件
在开始之前,请确保您具备以下条件:
- 一台具有公网 IP 的服务器(例如云服务器),用于运行 FRP 服务器端(frps)。
- 一台内网机器(例如本地电脑或树莓派),用于运行 FRP 客户端(frpc)。
- 基本的命令行操作知识。
- 下载 FRP 最新版本,可从 GitHub 发布页面 获取适合您操作系统的压缩包(如 Linux 64 位选择
frp_*_linux_amd64.tar.gz)。
步骤一:服务器端搭建
1. 下载并解压 FRP
在服务器上,使用以下命令下载并解压 FRP:
wget https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_amd64.tar.gz
tar -zxvf frp_0.51.3_linux_amd64.tar.gz
cd frp_0.51.3_linux_amd64
2. 配置服务器端
编辑服务器端配置文件 frps.toml(如果使用 TOML 格式)或 frps.ini(如果使用 INI 格式),示例使用 TOML 格式:
bindPort = 7000
auth.method = "token"
auth.token = "your_secure_token"
bindPort:FRP 服务器监听端口,默认为 7000。auth.token:认证令牌,用于客户端连接时验证,请替换为强密码。
3. 启动服务器端
运行以下命令启动服务器端:
./frps -c ./frps.toml
为了在后台运行,可以使用 nohup 或 systemd 服务。例如,使用 systemd 创建服务文件 /etc/systemd/system/frps.service:
[Unit]
Description=FRP Server
After=network.target
[Service]
Type=simple
ExecStart=/path/to/frps -c /path/to/frps.toml
Restart=on-failure
[Install]
WantedBy=multi-user.target
然后启用并启动服务:
sudo systemctl enable frps
sudo systemctl start frps
步骤二:客户端搭建
1. 下载并解压 FRP
在内网机器上,下载并解压 FRP 客户端包,步骤与服务器端类似。确保选择适合客户端操作系统的版本。
2. 配置客户端
编辑客户端配置文件 frpc.toml 或 frpc.ini。示例使用 TOML 格式:
serverAddr = "your_server_ip"
serverPort = 7000
auth.method = "token"
auth.token = "your_secure_token"
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
serverAddr:服务器公网 IP 地址。serverPort:与服务器端bindPort一致。auth.token:与服务器端设置的令牌相同。proxies:定义代理规则,此示例将内网 SSH 服务(端口 22)暴露到服务器的 6000 端口。
3. 启动客户端
运行以下命令启动客户端:
./frpc -c ./frpc.toml
类似地,可以为客户端设置后台服务。例如,在 Linux 上使用 systemd:
[Unit]
Description=FRP Client
After=network.target
[Service]
Type=simple
ExecStart=/path/to/frpc -c /path/to/frpc.toml
Restart=on-failure
[Install]
WantedBy=multi-user.target
然后启用并启动服务:
sudo systemctl enable frpc
sudo systemctl start frpc
配置示例
以下是一个更复杂的配置示例,用于暴露 Web 服务:
在客户端 frpc.toml 中添加:
[[proxies]]
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 80
customDomains = ["example.yourdomain.com"]
在服务器端,如果需要 HTTP 代理,可配置 vhostHTTPPort:
bindPort = 7000
auth.method = "token"
auth.token = "your_secure_token"
vhostHTTPPort = 8080
然后,将域名 example.yourdomain.com 的 DNS 解析指向服务器公网 IP,并通过服务器 8080 端口访问内网 Web 服务。
启动和测试
- 检查服务状态:确保服务器端和客户端服务正常运行。使用命令如
systemctl status frps或systemctl status frpc。 - 测试连接:从外部网络,使用 SSH 测试示例中的代理:
ssh -p 6000 username@your_server_ip如果配置正确,应能连接到内网机器的 SSH 服务。
- 查看日志:如有问题,检查服务日志:
sudo journalctl -u frps sudo journalctl -u frpc
常见问题
1. 连接失败
- 确保服务器防火墙开放了相关端口(如 7000、6000、8080)。例如,在 Linux 上使用
ufw:sudo ufw allow 7000/tcp sudo ufw allow 6000/tcp - 验证服务器端和客户端的令牌配置是否一致。
2. 服务无法启动
- 检查配置文件路径和语法是否正确。FRP 支持 TOML 和 INI 格式,确保使用正确格式。
- 确认有足够的权限运行可执行文件,可使用
chmod +x frps frpc添加执行权限。
3. 性能问题
- 对于高流量场景,可调整
frps.toml中的参数,如maxPoolCount来优化连接池。 - 考虑使用更高效的代理类型,如
kcp代替tcp,以提升速度。
总结
通过本教程,您学会了如何搭建 FRP 以实现内网穿透。关键步骤包括:在公网服务器上配置并运行 FRP 服务器端,在内网机器上配置并运行 FRP 客户端,并通过代理规则暴露内网服务。FRP 灵活且强大,支持多种代理类型(如 TCP、HTTP、HTTPS),可根据需求扩展配置。建议参考官方文档以获取更多高级功能和安全设置。
