50、网络故障排查工具与方法

网络故障排查工具与方法

1. 使用 ngrep 进行高级数据包嗅探

1.1 ngrep 基本使用

ngrep 是一个强大的数据包嗅探工具,可用于深入分析网络数据包。以下是一些常见的使用示例:
- 查找特定数据 :通过在数据有效负载中找到独特的内容,可以进行精细的搜索。例如,查找包含“1234”的 ICMP 数据包:

# ngrep -qpd eth0 '1234' icmp

此命令的参数解释如下:
| 参数 | 含义 |
| ---- | ---- |
| -q | 安静输出,显示头部和有效负载,省略分隔每个数据包的哈希标记 |
| -p | 关闭混杂模式,因为在数据包交换网络中该模式通常不起作用 |
| -d | 指定设备或网络接口,在多宿主系统中,默认使用编号最低的设备 |
| -i | 不区分大小写 |
| -S | 指定显示的字节数 |
| -v | 不匹配指定内容 |

1.2 查看部分数据包

默认情况下,ngrep 会显示整个数据包,最大大小为 65,536 字节。可以使用 -S 开关查看较少的字节数。例如,捕获 HTTP 头部并仅查看前 156 字节:

# ngrep -qpd -S 156 '' tcp port 80

1.3 排除特定内容

ngrep 具有经典的 grep 反转匹配功能 -v,用于排除特定内容。例如,排除 Asterisk 服务器上的任何会话发起协议(SIP)INVITES 请求:

# ngrep -qpd eth0 -vi invites port 5060

还可以使用 not 语句排除协议和主机:

# ngrep -qpd eth0 \(not port 22\)
# ngrep -qpd eth0 \(not host irc.ircserver1.org\)

注意,括号必须进行转义,否则 Bash shell 会尝试解释它们。

1.4 ngrep 使用流程

graph LR
    A[开始] --> B[指定网络接口和过滤条件]
    B --> C{是否需要特定匹配内容}
    C -- 是 --> D[设置匹配内容]
    C -- 否 --> E[继续]
    D --> E
    E --> F{是否需要限制显示字节数}
    F -- 是 --> G[使用 -S 开关设置字节数]
    F -- 否 --> H[继续]
    G --> H
    H --> I{是否需要排除特定内容}
    I -- 是 --> J[使用 -v 或 not 语句排除]
    I -- 否 --> K[执行 ngrep 命令]
    J --> K
    K --> L[查看结果]
    L --> M[结束]

2. 使用 ntop 进行彩色快速网络监控

2.1 问题提出

tcpdump 和 Wireshark 虽然功能强大,但不易阅读,且无法提供网络活动的直观可视化快照。是否有一个程序可以监控和收集网络流量数据,聚合统计信息,并生成漂亮的彩色图表,让我们一目了然地了解网络的运行情况呢?

2.2 解决方案

ntop 是一个混合数据包分析器,它可以监控网络协议,并创建漂亮的 HTML 图表和图形。不同系统的安装方法如下:
- Debian 用户

# aptitude install ntop rrdtool graphviz
  • Fedora 用户 :需要找到 RPM 包(可以尝试 http://rpm.pbone.net/),或者从源代码进行编译安装。安装前必须确保已安装 libpcap 和 GDBM,以及某种 HTTP 服务器(如 Lighttpd)。此外,还应安装以下软件:
    • RRDTool
    • Graphviz
    • OpenSSL
    • ZLib
    • GDChart
    • GDLib
    • LibPNG
    • Ettercap

2.3 启动和配置 ntop

安装完成后,使用以下命令启动 ntop:

# /etc/init.d/ntop start

启动时会要求输入管理员用户的密码。然后,打开 Web 浏览器,访问 http://localhost:3000。等待几分钟让它收集一些数据,也可以通过检查电子邮件和浏览网页来加速数据收集。页面会自动刷新。
所有配置都可以通过 Web 界面进行。首先访问 Admin ➝Configure ➝Startup Options,配置要监控的内容,如仅监控本地机器、本地子网或多个子网。禁用混杂模式。还有其他配置选项卡,可以根据需要进行设置。

2.4 ntop 的优势

ntop 虽然不如一些重型网络监控工具强大和可定制,但它可以快速启动并生成网络活动的快照。特别是 IP Local 选项卡非常有用,可以帮助我们发现隐藏的无线接入点,并一目了然地查看使用的端口。例如,如果在期望仅使用端口 995(POP3s)时看到端口 110(POP3)有活动,就知道存在未加密的邮件客户端在运行。

3. 排查 DNS 服务器故障

3.1 问题描述

遇到大量“未知主机”错误、超时、邮件退回或其他 DNS 问题,能够使用 IP 地址连接,但无法使用主机名连接。如何排查问题呢?

3.2 解决方案

使用 dig 和 host 命令查看 DNS 服务器的响应。不要使用 nslookup,因为它早已被弃用,且并非总是能正常工作。

3.2.1 使用 host 命令

首先,运行 host 命令检查主机名和 IP 地址的解析是否正确:

$ host uberpc
$ host 192.168.1.76

如果输出显示地址正确且反向指针配置正确,则说明基本解析正常。

3.2.2 使用 dig 命令

运行 dig 命令查看正在查询的服务器:

$ dig uberpc

如果看到请求的私有主机名被发送到互联网,说明私有名称服务器配置错误。可以直接查询找到的远程名称服务器进行双重检查:

$ dig @ns57.domaincontrol.com alrac.net
3.2.3 查询特定 DNS 记录类型

dig 可以通过以下选项检索大多数 DNS 记录类型:a, any, mx, ns, soa, hinfo, axfr, txt, cname, naptr, rp, 和 srv。使用 -t 开关查询特定记录类型,例如查询 SRV 记录:

$ dig -t srv oreilly.com
3.2.4 查看整个委派路径

使用 +trace 选项查看整个委派路径:

$ dig -t oreilly.com +trace

这应该是从权威根服务器到权威服务器的短路径,如果看到其他权威服务器,需要进行调查。

3.3 DNS 故障排查流程

graph LR
    A[开始] --> B[使用 host 命令检查主机名和 IP 地址解析]
    B --> C{解析是否正常}
    C -- 是 --> D[使用 dig 命令查看查询服务器]
    C -- 否 --> E[检查 DNS 配置]
    D --> F{是否有私有主机名泄漏到互联网}
    F -- 是 --> G[检查私有名称服务器配置]
    F -- 否 --> H{是否需要查询特定记录类型}
    G --> H
    H -- 是 --> I[使用 -t 开关查询特定记录类型]
    H -- 否 --> J{是否需要查看委派路径}
    I --> J
    J -- 是 --> K[使用 +trace 选项查看委派路径]
    J -- 否 --> L[结束]
    K --> L
    E --> L

4. 排查 DNS 客户端故障

4.1 问题提出

在 Linux 上配置 DNS 涉及多个看似随机的配置文件。如何确保客户端配置正确呢?

4.2 解决方案

不同系统和配置方式的客户端配置方法如下:
- Debian DHCP 客户端 :只需在 /etc/network/interfaces 中进行配置,不要编辑 /etc/resolv.conf。可以在 /etc/hosts 中输入重要主机作为 DNS 服务器故障时的备用,但要确保配置正确,因为 /etc/hosts 的优先级高于 DNS 服务器。
- Fedora DHCP 客户端 :每个接口都有自己的配置文件 /etc/sysconfig/network-scripts/ifcfg- ,同样不要编辑 /etc/resolv.conf,可使用 /etc/hosts 作为备用。
-
静态配置接口 :必须在 /etc/resolv.conf 中配置名称服务器,并在接口配置文件中配置正确的网关。也可以使用 /etc/hosts 作为备用。
-
Windows 和 Mac 客户端 *:同样的原则适用,不要在 DHCP 客户端上配置冲突的静态信息,在静态配置客户端上,手动配置正确的网关和 DNS 服务器。可以像 Linux DHCP 客户端一样,从 DHCP 服务器获取所有配置。

4.3 简化配置建议

使用 DHCP 服务器分配动态和静态地址,提供网络网关和服务器的地址,并分配静态路由。这样,客户端只需要进行常规的 DHCP 配置。

5. 排查 SMTP 服务器故障

5.1 问题描述

如何直接在 SMTP 服务器上运行测试,以确定其是否正常工作?希望尽可能消除变量,直接与服务器通信。

5.2 解决方案

使用 telnet、mailx 包和 Netstat 进行测试。

5.2.1 使用 telnet 测试

首先,运行 telnet 命令与 SMTP 服务器通信并发送测试消息:

$ telnet localhost 25
220 xena.alrac.net ESMTP Postfix (Ubuntu)
ehlo xena
mail from: carla@testing.net
rcpt to: carla@xena
data
Date: July 4, 2007
From: testcarla
Reply-to: testcarla@testing.net
Message-ID: one
Subject: SMTP testing
Hi Carla,
If you can read this, the SMTP server works.
.
quit

然后,运行 mail 命令读取消息:

$ mail
5.2.2 检查服务器状态

如果 telnet 无法连接到服务器,说明服务器未运行,可以使用 Netstat 进行确认:

# netstat -pant|grep :25

如果输出为空,则 SMTP 服务器未运行。

5.2.3 配置服务器监听 LAN 接口

如果服务器仅监听本地主机,需要在 main.cf 中添加以下两行配置:

mynetworks = 127.0.0.0/8, 192.168.1.0/24
inet_interfaces = 127.0.0.1, 192.168.1.10

重启 Postfix 后,再次使用 Netstat 检查:

# netstat -pant|grep :25

5.3 SMTP 服务器故障排查流程

graph LR
    A[开始] --> B[使用 telnet 连接 SMTP 服务器]
    B --> C{是否连接成功}
    C -- 是 --> D[发送测试消息并读取消息]
    C -- 否 --> E[使用 Netstat 检查服务器状态]
    E --> F{服务器是否运行}
    F -- 是 --> G[检查服务器监听配置]
    F -- 否 --> H[启动服务器]
    G --> I{是否仅监听本地主机}
    I -- 是 --> J[配置服务器监听 LAN 接口]
    I -- 否 --> K[结束]
    J --> K
    D --> K
    H --> B

6. 排查 POP3、POP3s 或 IMAP 服务器故障

6.1 问题描述

如何直接在 POP3、POP3s 或 IMAP 服务器上运行测试,以确定其是否正常工作?希望尽可能消除变量,直接与服务器通信。

6.2 解决方案

使用 telnet 和 Netstat 进行测试。

6.2.1 使用 Netstat 检查服务器状态

使用 Netstat 检查服务器是否运行并监听正确的端口和地址。例如,检查 Dovecot 的 POP3 服务:

# netstat -plunt | grep :110

如果需要限制服务器仅接受 LAN 连接,需要修改配置。

6.2.2 使用 telnet 测试 POP3 服务器

使用 telnet 测试 POP3 服务器,需要在服务器上已经设置了用户账户:

$ telnet localhost 110
+OK Hello there.
user carla
pass password
stat
list
6.2.3 使用 s_client 测试 POP3s

使用 OpenSSL 的 s_client 命令测试 POP3s:

$ openssl s_client -connect localhost:995
6.2.4 测试 IMAP 服务器

IMAP 服务器也可以使用 telnet 和 openssl s_client 进行测试:

$ telnet localhost 143
$ openssl s_client -connect localhost:993

6.3 测试过程中的注意事项

在测试过程中,可以使用 tcpdump 跟踪网络流量:

# tcpdump -pi eth0 port 110

并始终检查日志文件。如果需要提前退出 telnet 会话,按下 Ctrl-],然后输入 Q。使用 telnet 可以直接与服务器通信,快速确定服务器是否正常运行,绕过中间环节是很好的第一步。

7. 综合网络故障排查要点总结

7.1 工具使用总结

工具名称 主要用途 使用示例
ngrep 高级数据包嗅探,可进行精细搜索和排除特定内容 # ngrep -qpd eth0 '1234' icmp
ntop 彩色快速网络监控,生成 HTML 图表和图形 安装后启动 /etc/init.d/ntop start ,访问 http://localhost:3000
dig 查询 DNS 服务器响应,可获取多种记录类型和委派路径 $ dig uberpc $ dig -t srv oreilly.com $ dig -t oreilly.com +trace
host 检查主机名和 IP 地址的解析是否正确 $ host uberpc $ host 192.168.1.76
telnet 直接与服务器通信,测试 SMTP、POP3、POP3s、IMAP 服务器 $ telnet localhost 25 $ telnet localhost 110 $ telnet localhost 143
Netstat 检查服务器是否运行并监听正确的端口和地址 # netstat -pant|grep :25 # netstat -plunt | grep :110
tcpdump 跟踪网络流量 # tcpdump -pi eth0 port 25 # tcpdump -pi eth0 port 110

7.2 配置文件注意事项

  • DNS 客户端 :不同系统和配置方式下,要注意配置文件的使用。如 Debian 和 Fedora 的 DHCP 客户端不要编辑 /etc/resolv.conf ,静态配置接口要在 /etc/resolv.conf 中配置名称服务器。
  • SMTP 服务器 :若服务器仅监听本地主机,需在 main.cf 中配置监听 LAN 接口。
  • 通用原则 :可使用 /etc/hosts 作为备用,但要确保配置正确,因为其优先级高于 DNS 服务器。

7.3 故障排查流程总结

graph LR
    A[网络故障出现] --> B{故障类型}
    B -- DNS 故障 --> C[使用 host 和 dig 命令排查]
    B -- 服务器故障 --> D{服务器类型}
    D -- SMTP 服务器 --> E[使用 telnet 和 Netstat 测试]
    D -- POP3/POP3s/IMAP 服务器 --> F[使用 telnet、Netstat 和 s_client 测试]
    B -- 网络流量监控 --> G[使用 ntop 监控]
    B -- 数据包分析 --> H[使用 ngrep 嗅探]
    C --> I[根据结果调整 DNS 配置]
    E --> J[根据结果调整 SMTP 服务器配置]
    F --> K[根据结果调整 POP3/POP3s/IMAP 服务器配置]
    G --> L[根据监控结果优化网络]
    H --> M[根据分析结果排查问题]
    I --> N[故障解决]
    J --> N
    K --> N
    L --> N
    M --> N

8. 实际案例分析

8.1 DNS 故障案例

8.1.1 问题现象

用户反馈无法通过主机名访问内部服务器,但可以使用 IP 地址访问。

8.1.2 排查过程
  • 使用 host 命令检查主机名和 IP 地址解析:
$ host internal_server

发现解析结果正常。
- 使用 dig 命令查看查询服务器:

$ dig internal_server

发现请求的私有主机名被发送到了互联网,说明私有名称服务器配置错误。
- 直接查询远程名称服务器进行双重检查:

$ dig @ns57.domaincontrol.com internal_domain

确认私有域名存在泄漏问题。

8.1.3 解决方法

检查并调整私有名称服务器的配置,确保私有域名不会泄漏到互联网。

8.2 SMTP 服务器故障案例

8.2.1 问题现象

本地客户端无法向 SMTP 服务器发送邮件。

8.2.2 排查过程
  • 使用 telnet 命令连接 SMTP 服务器:
$ telnet localhost 25

发现无法连接。
- 使用 Netstat 检查服务器状态:

# netstat -pant|grep :25

输出为空,说明服务器未运行。

8.2.3 解决方法

启动 SMTP 服务器,并检查其监听配置,确保可以接受来自 LAN 的连接。

8.3 POP3 服务器故障案例

8.3.1 问题现象

用户无法通过 POP3 协议收取邮件。

8.3.2 排查过程
  • 使用 Netstat 检查服务器状态:
# netstat -plunt | grep :110

发现服务器未监听正确的端口。
- 使用 telnet 测试 POP3 服务器:

$ telnet localhost 110

无法连接。

8.3.3 解决方法

修改 POP3 服务器的配置,确保其监听正确的端口和地址,并重新启动服务器。

9. 总结与建议

9.1 总结

网络故障排查是一个复杂的过程,需要综合使用多种工具和方法。通过使用 ngrep 进行数据包嗅探、 ntop 进行网络监控、 dig host 排查 DNS 故障、 telnet Netstat 测试服务器状态等,可以有效地定位和解决网络故障。同时,要注意配置文件的正确使用和服务器的安全设置。

9.2 建议

  • 定期监控 :使用 ntop 等工具定期监控网络流量,及时发现潜在的问题。
  • 备份配置文件 :定期备份 DNS 客户端、服务器等的配置文件,以便在出现问题时可以快速恢复。
  • 加强安全设置 :对于 SMTP、POP3、IMAP 等服务器,要加强访问控制和防火墙设置,防止被恶意利用。
  • 学习和更新 :网络技术不断发展,要持续学习新的工具和方法,以应对不断变化的网络环境。

通过以上的总结和建议,希望能够帮助读者更好地进行网络故障排查和管理,确保网络的稳定运行。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值