Linux上端口不通排查

前言

服务器端口已开放(监听中),但 telnet 该端口却不通

这种情况通常不是端口本身的问题,而是网络连通性或防火墙拦截导致的。

本文端口测试的是3000

排查步骤(按优先级)

1. 确认端口真的在监听

在服务器上执行:

1
2
3
netstat -tulnp | grep 3000
# 或
ss -tulnp | grep 3000

确认是 LISTEN 状态,且监听在 0.0.0.0 或你 telnet 的 IP 上(不是 127.0.0.1)。

2. 确认本机 telnet 的 IP 和端口是否正确

  • 确保你 telnet 的是服务器的外网 IP 或内网 IP(取决于你在哪个网络环境)。
  • 不要 telnet 127.0.0.1,那是本机回环地址。

查看本地IP

1
ifconfig

测试本地是否通

1
telnet 192.168.1.12 3000

3. 检查防火墙(服务器端)

Linux(iptables/firewalld):

1
2
3
4
# 查看是否放行该端口
sudo iptables -L -n | grep 3000
# 或
sudo firewall-cmd --list-all

如果没放行,添加规则:

1
2
3
# firewalld 示例
sudo firewall-cmd --add-port=3000/tcp --permanent
sudo firewall-cmd --reload

Windows Server:

打开“Windows Defender 防火墙” → 入站规则 → 添加端口规则。

4. 检查云服务商安全组

即使服务器防火墙放行了,云服务商的安全组也可能拦截。

  • 登录云控制台 → 安全组 → 添加入站规则 → 允许 TCP 3000。

5. 确认本机网络是否可达

从本机执行:

1
ping <服务器IP>

  • 如果 ping 不通,可能是网络不通或 ICMP 被禁。
  • 如果 ping 通但 telnet 不通,继续看下一步

6. 测试端口连通性

使用 nc 或 nmap 测试端口连通性

比 telnet 更明确:

1
2
3
nc -vz <服务器IP> 3000
# 或
nmap -p 3000 <服务器IP>