昨天帮一个朋友排查服务器问题,就碰到了端口开放却连不上的情况,明明安全组和防火墙都显示端口开着,就是死活连不上,折腾了快半小时才找到问题。其实这种情况我碰到好多次了,今天就把常见的几个原因捋一捋,碰到了顺着查就行,省得像我那朋友一样瞎折腾。

很多人都知道要在服务器操作系统里开防火墙端口,但容易漏了云服务商后台的安全组或者网络ACL,对吧?我那个朋友就是,他在CentOS里开了firewalld的8080端口,但是忘了去云控制台给安全组加放行规则,那外网肯定进不来啊。还有一种情况,就是操作系统里的防火墙规则配错了,比如只允许了特定源IP,你自己用的IP刚好没在列表里,或者加规则的时候方向搞反了,入方向没放行,那就白搭。还有些朋友用了云服务器之后,会开双重防火墙,比如既开了系统防火墙又开了面板的防火墙,两边规则没同步,这边开了那边关,那不连不上才怪。
端口开放只是说防火墙这边放行了,但你的服务有没有真的在这个端口上监听啊?很多人容易忽略这一步。比如你搭了个网站,配置Nginx的时候把监听端口写错了,写成了8081,但你开的是8080端口,那当然连不上啊。还有就是监听地址的问题,很多服务默认只监听127.0.0.1,也就是只允许本地访问,这种情况你外网肯定访问不到啊,得改成监听0.0.0.0才对。怎么查?用netstat -ntlp或者ss -tulpn命令就能看到,看看对应的端口是不是显示LISTEN,监听地址对不对。要是没在LISTEN状态,那就是服务没起来,或者配置错了,你端口开得再对也没用啊,对不对?我之前还碰到过一个,服务启动的时候端口被别的进程占用了,导致服务起不来,自然就没监听,那肯定连不上。这种情况查一下端口占用就知道了。
有时候防火墙和服务都没问题,那就要看看链路通不通了。比如你服务器是放在内网的,你用公网IP去连,那肯定连不上啊,运营商那边是不是把这个端口封了?比如很多家庭宽带会封80、443、8080这些常用端口,你就算在自己家里搭了服务器,端口开对了,运营商不给你通,外网还是进不来。还有就是路由问题,比如服务器有多网卡,不同网段的路由没配置对,请求到不了服务器,自然连不上。还有一种情况就是你本地网络的问题,比如你自己这边的运营商把目标端口封了,或者你用了公司内网,公司防火墙把出站端口给禁了,你换个网络试试说不定就好了?我之前就碰到过,我在公司连自己服务器的22端口死活连不上,换了手机热点就ok了,原来是公司网管封了出站的22端口,我还折腾了大半天,说出来都是泪啊。
哦对,还有很多时候是连接的人自己搞错了。比如端口号输错了,少输了一位多输了一位,那肯定连不上啊。还有就是用错了协议,比如你服务开的是TCP端口,你用UDP去连,那当然没反应啊。或者反过来,你用HTTP去连HTTPS的端口,地址不对,那肯定打不开啊。还有一种情况,你连的IP不对,比如服务器换了IP,你还在用旧IP连,那不就是连错地方了嘛?还有些朋友用了CDN,CDN没配置对,回源端口错了,那用户访问也会连不上,这个也算客户端或者中间层的问题吧?哦对,还有就是本地的端口冲突?不对,本地是发起连接,一般不会冲突,除非你本地也开了那个端口被占用了?很少见,但也不是不可能。
还有一些奇奇怪怪的问题,都是我实际碰到过的,比如SELinux限制,哦对,CentOS默认开着SELinux,你开了端口,服务也监听了,SELinux不让服务对外访问,那也会连不上。这个很多新手不知道,查半天查不出来,把SELinux临时关了试试就知道了。还有就是NAT转发的问题,比如你用了内网穿透,或者端口映射,映射的端口不对,或者内网地址错了,那外面也连不进来。还有就是服务本身的问题,比如服务虽然起来了,但是本身出了bug,处理不了连接请求,这种情况你看服务日志就能发现问题。还有哦,有些服务器厂商会有默认的端口屏蔽,比如有些虚拟主机会默认屏蔽掉一些不常用的高端口,你就算开了,厂商那边不给过,也没用,这个就得看厂商的规则了,以服务商或官方页面说明为准嘛。
其实碰到端口开放却连不上的问题,顺着这个顺序排查下来,大多能找到问题,不用上来就瞎改配置越搞越乱。先查安全组和防火墙,再查服务监听,再查网络链路,最后看客户端配置,一步步来,大部分问题都能搞定。要是碰到那种查了一圈都没问题的,那大概率就是运营商或者服务商那边的限制了,找服务商核对一下基本就能解决,不用自己闷头瞎猜。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!