Skip to content
On this page

FRP

A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.

frp(Fast Reverse Proxy)。它是一个开源、高性能的反向代理应用程序,用于内网穿透场景。

主要功能

  1. 内网穿透
    将本地服务暴露到公网上,无需公网 IP。例如,将本地的 HTTP 服务通过公网访问。

  2. 支持多种协议
    支持 TCP、UDP、HTTP、HTTPS,以及基于 WebSocket 的代理。

  3. 自定义域名和子域名
    支持绑定自定义域名或使用子域名来访问服务。

  4. 访问控制
    提供令牌验证功能,确保代理服务的安全。

  5. 跨平台支持
    支持 Windows、Linux、macOS 等多种操作系统。

  6. 负载均衡
    内置了负载均衡功能,可对流量进行均衡分发。

  7. 插件扩展
    支持通过插件扩展功能,例如实现认证、数据统计等需求。

使用场景

  • 内网开发测试时,将服务暴露给远程的开发者或测试团队。
  • 远程访问家用设备(如 NAS)。
  • 快速搭建临时的服务发布平台。
  • 为 Docker 容器或 Kubernetes 集群中的应用提供反向代理支持。

场景实例

使用 frp 将内网机器 B 的 ssh 端口 通过可以被外网访问的机器 A 映射到外网

frp_1

相关配置

  • A 服务器(可以与外网互相访问)
toml
# frps.toml
bindPort = 17000
token = xxx             -> 考虑设置一个token 校验
  • B 服务器(无法通过外网访问,但可以访问服务器A)
toml
# frpc.toml
serverAddr = "x.x.x.x"   -> A服务器的外网地址
serverPort = 17000
token = xxx              -> 匹配 frps 的 token

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22          -> 需要映射的本地端口
remotePort = 6000       -> 期望映射到A服务器的端口号

附 systemd 配置

[Unit]
Description = frp client
After = network.target network-online.target syslog.target
Wants = network-online.target

[Service]
Type = simple
Restart=always
RestartSec=5
ExecStartPre = /bin/sleep 15
ExecStart = /home/xxx/frpc -c /home/xxx/frpc.ini
LimitNOFILE=1048576

[Install]
WantedBy = multi-user.target

更多详细用例可以参考 frp-github页面

Released under the MIT License.