在 CentOS7 上好不容易装好了 VNC,输入 IP 和端口,点击连接,结果屏幕上跳出 “connection refused”—— 这串英文看得新手心里直发慌。做设计的小王就遇到过,他远程连接公司的 CentOS7 服务器,连续三次都提示这个错误,换了同事的电脑试也不行,差点以为服务器坏了。其实啊,“connection refused”(连接被拒绝)不是大问题,多半是端口没开、服务没启动,或者防火墙拦着了,很少是服务器本身的毛病。今天就从端口、服务、防火墙三个维度,一步步教你排查,再附不同客户端的兼容性测试,新手跟着做,不用求助 IT 也能解决,一起往下看吧!
先搞懂:“connection refused” 到底啥意思?不是命令错了
其实啊,这提示就像你去敲门,屋里没人应 —— 可能屋里没人(服务没启动),可能门牌号错了(端口不对),也可能门被锁了(防火墙拦截)。小王后来才知道,他的问题出在端口上,输成了 5900,其实应该用 5901。
有些朋友会问:“是不是 VNC 软件装错了?” 大概率不是,只要你能启动 VNC 服务,说明软件没问题,重点在 “连接” 的环节,不在 “安装” 的环节。小王卸了三次 VNC 重装,问题还是没解决,就是因为没找到根本原因。
排查 1:端口是不是错了?门牌号不对,肯定没人应
VNC 的端口是 “5900 + 桌面编号”,比如桌面编号是:1,端口就是 5901;编号是:2,端口就是 5902。小王一开始不知道,不管啥编号都用 5900,不被拒绝才怪。
步骤:
- 先确认桌面编号:登录 CentOS7,输 “vncserver -list”,会显示 “:1”“:2” 这样的编号,记好;
- 算端口号:编号:1→5901,:2→5902,小王的编号是:1,端口就该用 5901;
- 客户端连接时,地址栏输 “IP: 端口”(比如 192.168.1.10:5901),别漏了端口,也别用错。
常见错:
- 把端口输成桌面编号(比如用:1 当端口,其实该用 5901);
- 多用户登录时,几个人用同一个端口,导致冲突,小王的同事就犯过这错。
排查 2:VNC 服务启动了吗?服务没开,端口再对也没用
服务就像 “屋里的人”,没启动的话,再对的端口也没人响应。小王查了自己的服务器,发现 VNC 服务居然没启动,输 “vncserver” 启动后,立马就连上了。
步骤:
- 登录 CentOS7,输 “systemctl status vncserver@:1.service”(:1 换成你的桌面编号);
- 看结果:如果显示 “active (running)”,说明服务正常;如果是 “inactive (dead)”,就是没启动;
- 没启动的话,输 “systemctl start vncserver@:1.service” 启动,再设开机自启 “systemctl enable vncserver@:1.service”,小王现在每天上班前都会检查服务状态,怕它自己停了。
为啥服务会停?
- 服务器重启后没设自启,服务跟着停了;
- 内存不够时,系统会自动关掉一些服务,小王的服务器就因为内存满了,VNC 服务被关掉过。
排查 3:防火墙是不是拦着了?端口开了也得让防火墙放行
就算端口对、服务开,防火墙要是没放行,连接还是会被拒。小王的公司防火墙默认拦截所有外部端口,他开放 5901 后,立马就连上了。
步骤:
- 查防火墙是否开放端口:输 “firewall-cmd –query-port=5901/tcp”(5901 换成你的端口);
- 显示 “yes” 说明开放了,显示 “no” 就得手动开:“firewall-cmd –add-port=5901/tcp –permanent”;
- 输 “firewall-cmd –reload” 让设置生效,小王第一次忘了这步,开放后还是连不上,重新加载才好。
注意:
- 多用户登录时,每个端口都得开(比如 5901、5902 都要开放);
- 服务器重启后,防火墙设置可能失效,记得加 “–permanent” 参数,小王吃过这亏,重启后又得重开端口。
三维排查对比表:哪步出问题,一看就知道
排查维度 | 可能原因 | 检查命令 | 解决命令 | 小王的问题 |
---|---|---|---|---|
端口 | 端口号输错或被占用 | netstat -tuln | grep 5901 | 换正确端口(如 5901) | 是 |
服务 | VNC 服务未启动或崩溃 | systemctl status vncserver@:1 | systemctl start vncserver@:1 | 否 |
防火墙 | 端口未开放或被拦截 | firewall-cmd –query-port=5901/tcp | firewall-cmd –add-port=5901/tcp –permanent | 是 |
小王对照这张表,10 分钟就找到了两个问题:端口输错、防火墙没开,改完后连接一次成功,他说 “早有这表,就不用瞎折腾了”。
客户端兼容性测试:不同设备连接,可能出的小问题
有时候,服务器和端口都没问题,换个客户端就成功了,这是客户端不兼容导致的。小王用自己的 MacBook 连不上,换了 Windows 电脑就好,就是这个原因。
(1)Windows 客户端(VNC Viewer)
- 常见问题:提示 “connection refused”,但端口服务都对;
- 解决:在客户端设置里,把 “Encryption” 设为 “Prefer off”,小王的同事这么设后就连上了。
(2)Mac 客户端(RealVNC)
- 常见问题:连接后立马断开,提示 “无法建立加密连接”;
- 解决:在 CentOS7 里输 “vncserver –localhost no”,允许非本地连接,小王亲测有效。
(3)手机客户端(VNC Viewer)
- 常见问题:连接超时,其实是手机网络不稳定;
- 解决:切换到 Wi-Fi,别用流量,小王用 4G 连总失败,换 Wi-Fi 一次成功。
还解决不了?终极 3 招,小王最后用了第 2 招
(1)重启服务器,简单粗暴但有效
有时候服务或端口卡住了,重启服务器能解决。输 “reboot” 重启,等 5 分钟再试,小王说这招救过他好几次。
(2)换个桌面编号,避开冲突
如果当前编号(:1)总出问题,输 “vncserver -kill :1” 关掉,再 “vncserver :2” 用新编号,端口用 5902,小王用这招避开了端口冲突。
(3)检查服务器 IP,别连错机器
小王有次连的是测试服务器,不是目标服务器,IP 输错了自然被拒。输 “ifconfig” 查 CentOS7 的 IP,确认和客户端输的一致。
小编的心里话
“connection refused” 看着吓人,其实就是端口、服务、防火墙这三个地方的问题,按步骤排查,90% 都能解决。客户端兼容性问题也别忽略,换个设备试试,可能有意想不到的效果。
小王现在总结出经验:遇到这提示,先查端口对不对,再看服务启没启,最后检查防火墙,三步下来基本能搞定。他说 “新手别怕英文提示,把它当成线索,顺着找问题,比瞎猜强多了”。其实啊,远程连接的问题,耐心比技术重要,你说对吧?