frp 内网穿透的安全用法
发布时间:2025-10-31 10:26       
更新时间:2025-11-01 06:24
frp 用几行配置就能把内网服务挂到公网,可配置不当时,挂上去的可能不止你想暴露的那个服务。这篇按"能跑通"到"跑得安全"的顺序,把要点过一遍。frp 是常用的开源内网穿透工具,分服务端 frps 和客户端 frpc,公网机器跑服务端,内网机器跑客户端。
## 准备条件
一台有公网 IP 的云服务器跑 frps,内网设备跑 frpc,两端下载同一版本的 frp;云服务器的安全组和系统防火墙都要有配置权限。国内机器穿透 Web 服务同样涉及域名备案问题,赶时间可以选香港节点的机器。
## 第一步:服务端配置
frps 的配置文件 frps.toml 关键几行:
```
bindPort = 7000
auth.token = "换成足够长的随机串"
webServer.port = 7500
```
token 是客户端接入的凭证,用 openssl rand -hex 32 生成,别用默认值。7500 是管理面板端口,只该自己看,下一步的防火墙会处理它。
## 第二步:客户端配置
frpc.toml 里启用加密并声明要暴露的端口:
```
serverAddr = "1.2.3.4"
serverPort = 7000
auth.token = "与服务端一致"
transport.tls.enable = true
[[proxies]]
name = "nas-web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 5000
remotePort = 15000
```
transport.tls.enable 打开后连接走 TLS 加密,token 不会在公网明文传输。原则只有一条:要暴露哪个服务就加哪条代理,remotePort 一个个开,不要图省事放整段端口。
## 第三步:云服务器侧收紧
防火墙只放行三样:frp 的 7000、面板 7500 限自己的 IP、业务要用的 remotePort。以 firewalld 为例:
```
firewall-cmd --permanent --add-port=7000/tcp
firewall-cmd --permanent --add-port=15000/tcp
firewall-cmd --reload
```
云控制台的安全组同步收紧,两边保持一致。面板端口不常用的话干脆不放开,要看状态就 SSH 上去本地访问。
## 常见报错与处理
连不上先看 frpc 日志里的 login 环节,token 不匹配和两端版本不一致占大头;能登录但访问超时,九成是安全组没放行 remotePort;穿透 Web 服务后证书报错,区分是 TCP 直连还是走了 vhost(按域名转发的 HTTP 穿透),配置思路不同。最后提醒一句:内网穿透等于给内网开了扇门,门后服务的弱密码和已知漏洞同样会被人顺着摸进来,该打的补丁一个都别省。