在 Linux 系统上搭 frp 内网穿透服务器时,你是不是也遇到过这些情况:输入启动命令后一片红叉报错,客户端死活连不上服务器,明明配置没错却提示 “connection refused”?别愁,这些问题其实很多人都遇见过。今天小编就把这些常见错误整理出来,附上详细的修复方法,一起往下看吧!
一、配置文件语法错误:启动就报错?先查这几点
刚写完 frps.ini 配置文件,一启动就提示 “invalid config”,是不是头都大了?这多半是配置文件的语法出了问题。
常见现象:
- 启动命令执行后,终端显示 “parse config file failed: …”
- 具体错误可能指向某一行,比如 “invalid section name”
错误原因 & 修复步骤:
错误类型 | 原因分析 | 修复方法 |
---|---|---|
括号不匹配 | 配置文件里的 [section] 括号漏了右括号,比如写成 [common | 检查所有 section(如 [common]、[ssh]),确保左右括号成对出现 |
参数拼写错误 | 把 “bind_port” 写成 “bindport”,少了下划线 | 对照 frp 官方文档,逐个检查参数拼写,重点看 “_” 是否遗漏 |
数值格式错 | 端口号写成字母,比如 “bind_port = abc” | 端口号必须是数字(1-65535 之间),替换成正确数值 |
小编提醒:改完配置文件后,最好用 cat 命令再看一遍,比如 “cat frps.ini”,有时候肉眼漏看的错误,终端里能明显发现。
二、端口被占用:提示 “address already in use” 该咋办?
启动 frp 服务器时,终端突然弹出 “bind: address already in use”,这说明你设置的端口被其他程序占了。
为啥会这样?
Linux 系统里,每个端口同一时间只能被一个程序占用。比如你把 frp 的 bind_port 设为 80,而系统里的 nginx 已经在用 80 端口,就会冲突。
修复步骤:
- 先找出占用端口的程序:输入 “lsof -i: 端口号”,比如 “lsof -i:7000”,终端会显示占用该端口的进程 ID(PID)。
- 结束占用进程:如果是没用的程序,输入 “kill -9 PID”(PID 替换成实际数字)。
- 换个端口:要是进程有用不能关,就改 frps.ini 里的 bind_port,比如换成 7001,记得客户端配置也要同步修改。
小编之前就犯过这错,把端口设成了 22(SSH 默认端口),结果一启动就冲突,换个端口立马好了。
三、权限不足:“permission denied” 咋解决?
执行启动命令时,提示 “./frps: permission denied”,这是因为当前用户没有执行 frps 文件的权限。
现象:
- 点击 frps 文件没反应,终端输入命令后直接报错。
- 用 ls -l 命令查看,文件权限那一栏没有 “x”(执行权限)。
修复方法:
在终端里进入 frp 文件夹,输入 “chmod +x frps”,给文件加上执行权限。如果还不行,试试用 sudo 命令启动:“sudo ./frps -c frps.ini”,不过最好还是搞清楚权限问题,别总依赖 sudo。
四、防火墙拦截:端口通了却连不上?
服务器和客户端配置都对,可就是连不上,大概率是防火墙把端口挡住了。
怎么检查?
输入 “firewall-cmd –list-ports”(CentOS 系统)或 “ufw status”(Ubuntu 系统),看看 frp 用的 bind_port(比如 7000)有没有在开放列表里。
修复步骤:
- CentOS 系统:输入 “firewall-cmd –zone=public –add-port=7000/tcp –permanent”,然后 “firewall-cmd –reload”。
- Ubuntu 系统:输入 “sudo ufw allow 7000/tcp”,再 “sudo ufw reload”。
- 要是用的云服务器,还得去控制台的安全组里开放对应端口,不然服务器防火墙放行了,云厂商那边还拦着。
小编提示:别嫌麻烦,每次改端口都要同步更新防火墙设置,不然前面的功夫全白费。
五、版本不兼容:客户端和服务器 “说不到一块”
客户端启动后提示 “version mismatch”,这是因为服务器和客户端的 frp 版本不一样。
现象:
- 客户端日志里出现 “server version is x.x.x, client version is y.y.y”
- 连接成功但数据传不出去,或者频繁断开。
修复方法:
去 frp 官网下载同一版本的服务器端和客户端,比如都用 0.48.0 版本。卸载旧版本,把新版本解压后替换掉原来的文件,配置文件可以保留,但最好重新核对一遍。
六、token 验证失败:“authentication failed”
连接时提示 “token is not correct”,说明客户端和服务器的 token 不一致。
为啥会这样?
- 配置文件里 server 和 client 的 token 拼写不一样,比如一个是 “123456”,一个是 “12345”。
- 复制粘贴时多了空格,比如 “token = 123456”(后面有空格)。
修复方法:
打开服务器的 frps.ini 和客户端的 frpc.ini,仔细对比 token 参数,确保完全一致,包括大小写和空格。建议直接复制粘贴,别手动输入。
七、日志文件缺失:出了错没记录?
想查错误原因,却发现没有日志文件,这是因为没在配置文件里设置日志路径。
该怎么办?
在 frps.ini 的 [common] 里加两行:
log_file = ./frps.log
log_level = info
这样启动后就会生成日志文件,出问题时打开 frps.log,里面会详细记录错误时间和原因,比终端提示清楚多了。
八、自启动配置错误:重启后 frp 没启动
设置了自启动,可服务器重启后 frp 没跑起来,多半是 systemd 服务文件写错了。
常见错误:
- 服务文件里的 ExecStart 路径不对,比如写成 “/home/frp/frps”,实际文件在 “/home/user/frp/frps”。
- 没加 “Restart=always”,导致程序崩溃后不会自动重启。
修复步骤:
打开服务文件(比如 /etc/systemd/system/frps.service),检查 ExecStart 的路径是否正确,确保能找到 frps 和配置文件。改完后输入 “systemctl daemon-reload”,再 “systemctl restart frps”,最后用 “systemctl status frps” 看看状态。
九、域名解析失败:用域名连接时提示 “unknown host”
配置里填的是域名,却提示 “could not resolve server address”,这是域名解析的问题。
原因:
- 域名没正确解析到服务器 IP,或者解析还没生效。
- 服务器 DNS 设置有问题,解析不了域名。
修复方法:
先用 ping 命令测试域名:“ping 你的域名”,看是否能解析到正确 IP。如果解析不对,去域名控制台检查解析记录;如果解析对了还不行,在服务器的 /etc/resolv.conf 里加个公共 DNS,比如 “nameserver 114.114.114.114”。
十、启动后立马退出:没日志没提示?
执行启动命令后,终端闪了一下就回到命令行,没任何提示,这可能是配置文件路径错了。
现象:
- 输入 “./frps -c frps.ini” 后,没反应,也不报错。
- 用 ps -ef | grep frps 命令查看,没有 frp 进程。
修复方法:
检查配置文件名称是不是 “frps.ini”,有没有写成 “frps.txt”。或者试试用绝对路径启动:“./frps -c /home/user/frp/frps.ini”,确保能准确找到配置文件。