技术记录 · 可复用方法
FRP 远程访问配置与安全边界
远程访问不能只看“能不能连上”,还要同时控制端口暴露、认证强度、访问来源、日志留存和故障回退。
适用场景
FRP 适合把内网 Web 管理页、临时业务系统、NAS 页面或特定 TCP 服务通过公网服务器转发出来。它的优势是部署轻、穿透能力强,但也意味着公网暴露面会扩大,所以必须把“访问便利”和“安全边界”一起设计。
核心目标只暴露必要端口,减少可扫描面。
关键风险弱口令、默认端口、日志缺失、内网服务权限过大。
验收标准可访问、可审计、可关闭、可回退。
推荐配置思路
1
公网服务器只作为入口
FRPS 放在公网服务器上,安全组仅开放 FRP 控制端口和必要访问端口,不要把管理端口、数据库端口直接暴露到互联网。
2
内网客户端主动连接
FRPC 从内网主动连出,避免在内网边界设备上大量做端口映射。每个服务单独命名,便于日志追踪和临时关闭。
3
按用途分层授权
管理类服务优先限制访问来源 IP;临时服务设置独立端口和有效期;长期服务增加二次认证或 VPN 入口。
配置样例
以下是示意配置,实际部署时需要替换域名、端口和密钥,并避免使用弱口令。
# frps.toml - 公网服务端示例
bindPort = 7000
transport.tcpMux = true
# 认证密钥需要足够复杂,且不要和其他系统共用
auth.method = "token"
auth.token = "replace_with_a_long_random_token"
# 建议限制可开放端口范围,避免客户端随意暴露服务
allowPorts = [
{ start = 20000, end = 20100 }
]
# frpc.toml - 内网客户端示例
serverAddr = "your-server.example.com"
serverPort = 7000
auth.method = "token"
auth.token = "replace_with_a_long_random_token"
[[proxies]]
name = "internal-web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8080
remotePort = 20080
安全检查清单
- 公网服务器安全组只开放必要端口,并定期复查。
- FRP token 使用长随机字符串,避免沿用简单密码。
- 远程桌面、数据库、摄像头后台不建议直接暴露到公网。
- 管理入口应增加 IP 白名单、VPN、反向代理认证或二次验证。
- 保留 FRPS / FRPC 日志,异常连接可以追溯来源和时间。
- 每个映射有负责人、有用途、有关闭时间,避免临时端口长期遗留。
排障顺序
| 检查项 | 判断方法 | 常见原因 |
|---|---|---|
| 客户端是否连上 FRPS | 看 frpc 日志是否出现 login success | serverAddr、端口、token 错误 |
| 公网端口是否开放 | 公网 telnet / nc 测试 remotePort | 安全组未放行、防火墙拦截 |
| 本地服务是否正常 | 在内网机器访问 127.0.0.1:localPort | 服务未启动、端口填错 |
| 访问是否被源站拒绝 | 查看本地服务日志和反代日志 | Host 绑定、权限策略、证书不匹配 |