Linux网络运维经验总结_常见问题处理解析【指导】

12次阅读

ping不通但端口能通,大概率是防火墙或ICMP策略限制:云安全组默认禁ICMP、iptables丢弃icmp包、rp_filter反向路径校验失败等导致ICMP被拦截,而TCP端口通信正常。

Linux网络运维经验总结_常见问题处理解析【指导】

ping不通但端口能通,大概率是防火墙或ICMP策略限制

linux主机能 telnetcurl 通目标端口,但 ping 返回“Network is unreachable”或直接超时,不是网络层断开,而是ICMP被主动拦截。常见于云厂商安全组默认禁用ICMP、企业内网策略限制、或本地 iptables/nftables 规则丢弃了 icmp 类型包。

  • 检查当前 iptables 是否有显式 DROPREJECT icmp 规则:
    sudo iptables -L INPUT -v -n | grep icmp
  • 临时放行(仅调试):
    sudo iptables -I INPUT -p icmp --icmp-type echo-request -j ACCEPT
  • 云服务器务必同步检查控制台安全组——很多用户只调系统防火墙,忘了安全组才是第一道关卡
  • systemd-networkdNetworkManager 管理的接口可能启用 rp_filter,导致反向路径校验失败,可查:
    sysctl net.ipv4.conf.all.rp_filter

    ,值为 1路由不对称时会静默丢弃ICMP响应

netstat显示大量TIME_WaiT,别急着调优

netstat -ant | grep TIME_WAIT | wc -l 高达几千甚至上万,不代表服务异常。TIME_WAIT 是 TCP 正常关闭的必经状态,持续 2MSL(通常 60 秒),用于防止旧报文干扰新连接。盲目改 net.ipv4.tcp_tw_reusenet.ipv4.tcp_tw_recycle 可能引发连接复位、时钟漂移问题,尤其在 NAT 环境下。

  • 先确认是否真影响业务:看 ss -stotal 连接数 vs timewait 占比,以及 netstat -s | grep "segments retransmited" 是否突增
  • 若确为短连接密集型服务(如http客户端轮询),优先从应用侧优化:复用连接(Connection: keep-alive)、加连接池、避免频繁新建socket
  • 仅当确认无NAT且时间敏感时,才考虑启用 tcp_tw_reuse(需同时开启 net.ipv4.tcp_timestamps=1),tcp_tw_recycle 已在 Linux 4.12+ 移除,切勿配置

route命令显示default via却无法上网,重点查metric和多网卡冲突

执行 ip route show default 显示存在 default via 192.168.1.1 dev eth0,但 curl https://www.baidu.com 超时,往往不是网关宕机,而是路由优先级(metric)或出方向接口选择错误。

  • 运行 ip route get 8.8.8.8,看实际走哪个 devvia —— 它反映内核真实选路结果,比 ip route show 更准
  • 多个默认路由共存时(如eth0和docker0都配了default),metric小的生效;用 ip route replace default via 192.168.1.1 dev eth0 metric 100 显式覆盖
  • 容器或K8s环境常见问题:宿主机路由正常,但容器内 ip route get 指向 169.254.1.1(AWS VPC元数据地址)或 10.0.0.1(CNI网关),需检查容器网络插件配置及 iptables NAT 规则是否劫持了流量

ss -tuln监听端口不全?可能是进程权限或监听地址限制

ss -tuln 查不到本该运行的 nginxredis 监听行,但 ps aux | grep 显示进程在跑,说明监听行为未成功绑定到预期地址/端口。

  • 检查是否绑定了 127.0.0.1:8080 而非 0.0.0.0:8080 —— ss -tuln 默认只列 0.0.0.0::,需加 -a 查全部:
    ss -tulna | grep :8080
  • 普通用户进程无法监听 1-1023 端口,若配置文件写 listen 80 但以非root启动,nginx会静默降级到随机高端口,日志里提示 bind() to 0.0.0.0:80 failed (13: Permission denied)
  • SELinux启用时,即使端口开放,http_port_t 上下文未赋给进程也会拒绝绑定,可用 ausearch -m avc -ts recent | grep nginx 查拒否记录

实际排障中,最耗时间的往往不是命令不会敲,而是没意识到 ip route getip route show 更接近真实路径,或者把 tcp_tw_recycle 当成万能开关硬塞进生产配置。

text=ZqhQzanResources