FRP
A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
- github: https://github.com/fatedier/frp
frp(Fast Reverse Proxy)。它是一个开源、高性能的反向代理应用程序,用于内网穿透场景。
主要功能
内网穿透
将本地服务暴露到公网上,无需公网 IP。例如,将本地的 HTTP 服务通过公网访问。支持多种协议
支持 TCP、UDP、HTTP、HTTPS,以及基于 WebSocket 的代理。自定义域名和子域名
支持绑定自定义域名或使用子域名来访问服务。访问控制
提供令牌验证功能,确保代理服务的安全。跨平台支持
支持 Windows、Linux、macOS 等多种操作系统。负载均衡
内置了负载均衡功能,可对流量进行均衡分发。插件扩展
支持通过插件扩展功能,例如实现认证、数据统计等需求。
使用场景
- 内网开发测试时,将服务暴露给远程的开发者或测试团队。
- 远程访问家用设备(如 NAS)。
- 快速搭建临时的服务发布平台。
- 为 Docker 容器或 Kubernetes 集群中的应用提供反向代理支持。
场景实例
使用 frp 将内网机器 B 的 ssh 端口 通过可以被外网访问的机器 A 映射到外网
相关配置
- 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页面
- github: https://github.com/fatedier/frp