FRP内网穿透搭建详细教程


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.tomlfrpc.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 服务。

启动和测试

  1. 检查服务状态:确保服务器端和客户端服务正常运行。使用命令如 systemctl status frpssystemctl status frpc
  2. 测试连接:从外部网络,使用 SSH 测试示例中的代理:
    ssh -p 6000 username@your_server_ip

    如果配置正确,应能连接到内网机器的 SSH 服务。

  3. 查看日志:如有问题,检查服务日志:
    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),可根据需求扩展配置。建议参考官方文档以获取更多高级功能和安全设置。


文章目录


    -

    RustDesk通过API防止服务器被滥用 自动编译将服务器等信息内置客户端

    评 论