常用的linux网络debug工具

658人浏览   2024-06-11 16:27:48


网络配置和故障排除是系统管理员需要经常执行的关键任务。其中一些任务可能具有挑战性。然而,当处理连接问题时,使用正确的工具将帮助您以更快和一致的方式实现结果。

ip命令

ip命令是一个全能的实用程序,用于显示和操作Linux系统上的网络对象,包括IP地址、路由和ARP表。它是一个有用的工具,用于配置网络,以及解决网络连接问题。

ip命令替换了旧的net-tools软件包提供的许多命令的功能,如ifconfig、route和arp,但它添加了许多其他功能。

在其最基本的形式中,您只需运行ip并提供要操作的网络对象,例如地址、链接或路由,以及一个子命令来执行操作。如果您没有给出子命令,许多对象默认为show子命令以显示与该对象相关的信息。

以下是基本语法:

ip <对象> [命令]

例如,要查看所有网络设备的链接状态,运行ip link show:

ip link show

这将显示所有可用网络接口及其状态的列表。

要更改接口的IP地址,可以使用以下命令:

ip addr add <IP_ADDRESS>/<CIDR> dev <INTERFACE>

例如,要将接口eth0的IP地址设置为192.168.1.100/24,可以运行:

ip addr add 192.168.1.100/24 dev eth0

要添加新的默认网关,可以使用以下命令:

ip route add default via <GATEWAY_IP_ADDRESS>

例如,要将默认网关设置为192.168.1.1,可以运行:

ip route add default via 192.168.1.1

ip命令也可用于解决网络连接问题。例如,要检查主机是否可达,可以使用ping命令:

ping <HOST>

例如,要ping主机google.com,可以运行:

ping google.com

您还可以使用ip命令显示路由表:

ip route show

这将显示路由表,包括默认网关和任何其他配置的路由。

总的来说,ip命令是Linux系统上网络配置和故障排除的强大而多功能的工具。

nmcli工具

Network Manager是一个网络配置应用程序,许多Linux发行版(包括RHEL和Fedora)都默认安装了它。Network Manager作为一个守护进程运行,其目标是提供一个更高级别的接口,使网络配置更容易和更自动化。

桌面Linux用户或具有图形界面的服务器的用户通常使用Network Manager GUI客户端来配置网络。对于仅有shell界面的服务器或者想要通过shell脚本自动配置的情况,nmcli工具是很方便的。

Network Manager和nmcli是一对多才多艺的组合,可以验证和配置许多网络选项。 nmcli的基本语法是:

nmcli <OBJECT> [COMMAND] [ARGUMENTS]

最常见的对象包括:

  • general-显示网络管理器状态和权限
  • networking-显示,启用和禁用网络
  • radio-显示,启用和禁用WiFi和WWAN
  • device-显示和操作网络设备的状态
  • connection-管理网络管理器连接配置文件

不可能在一篇博客文章中涵盖所有选项。让我们查看一些使用nmcli进行常见网络配置任务的示例。有关更多示例,请参阅官方的nmcli-examples页面或使用man nmcli-examples查看手册页。

检查网络设备的状态:

$ nmcli device status
DEVICE TYPE STATE CONNECTION

enp1s0 ethernet connected enp1s0

enp7s0 ethernet disconnected --

lo loopback unmanaged --

显示所有连接配置文件:

$ nmcli con show
NAME UUID TYPE DEVICE

enp1s0 1bb35a4a-ad02-4cad-978a-4a97ea9527cb ethernet enp1s0

显示特定连接的详细信息(例如enp1s0):

$ nmcli connection show enp1s0

从连接中检索特定参数(例如IP地址和DNS):

$ nmcli -g ip4.address,ip4.dns connection show enp1s0
192.168.122.169/24

192.168.122.1

修改连接参数,例如从DHCP切换到手动连接:

$ sudo nmcli con mod enp1s0 ipv4.method manual ipv4.addresses 192.168.122.169/24 ipv4.dns 192.168.122.1 ipv4.gateway 192.168.122.1

重新启动连接以启用新选项:

$ sudo nmcli con down enp1s0
$ sudo nmcli con up enp1s0

添加新的连接配置文件:

$ sudo nmcli connection add con-name enp7s0 ifname enp7s0 type ethernet ip4 192.168.64.88/24

nmcli还允许您交互式地编辑连接配置文件。此界面通过Tab键提供帮助和自动完成,引导您完成可用的许多选项。使用nmcli connection edit CONNECTION-NAME激活编辑器:

$ sudo nmcli connection edit enp7s0
  ===| nmcli interactive connection editor |===
    Editing existing '802-3-ethernet' connection: 'enp7s0'
Type 'help' or '?' for available commands.
Type 'print' to show all the connection properties.
Type 'describe [<setting>.<prop>]' for detailed property description.

您可以使用set命令定义特定的参数。使用Tab键自动完成以查看所有可用选项:

nmcli> set ipv4.<PRESS TAB>
  addresses dhcp-hostname dhcp-timeout dns-search may-fail routes
  dad-timeout dhcp-hostname-flags dns gateway method route-table
  dhcp-client-id dhcp-iaid dns-options ignore-auto-dns never-default routing-rules
  dhcp-fqdn dhcp-send-hostname dns-priority ignore-auto-routes route-metric
nmcli> set ipv4.addresses 192.168.64.90/24

然后,您可以打印当前值:

nmcli> print ipv4.addresses
ipv4.addresses: 192.168.64.88/24, 192.168.64.90/24

完成更改后,将其保存到连接并退出以完成操作:

nmcli> save
Connection 'enp7s0' (94170029-5620-4f90-ad78-704b21480b1a) successfully updated.
nmcli> quit

最后,重新启动连接以使更改生效。

Network Manager和nmcli是网络配置的完整解决方案。如果您以前从未使用过它,请从一些基本命令开始,逐渐转移到更复杂的设置。请参阅手册页和示例以执行特定任务。

接下来,让我们回顾一些命令,这些命令可以帮助您进行网络故障排除,从名称解析开始。

nslookup命令

在管理连通性问题时,DNS名称解析经常是头痛的源头。nslookup实用程序可帮助您检查和排除DNS名称解析问题。

此命令在RHEL8和Fedora系统上通过bind-utils软件包提供。使用dnf安装:

$ sudo dnf install -y bind-utils

要快速检查特定主机的名称解析,请将主机名作为参数使用nslookup。该命令使用名称解析的默认DNS配置:

$ nslookup redhat.com
Server: 192.168.122.1

Address: 192.168.122.1#53

Non-authoritative answer:

Name: redhat.com

Address: 209.132.183.105

如果名称解析失败,您可以通过将其地址作为第三个参数来提供替代名称服务器以进行解析:

$ nslookup redhat.com 192.168.0.9
Server: 192.168.0.9

Address: 192.168.0.9#53

Non-authoritative answer:

Name: redhat.com

Address: 209.132.183.105

此信息对于故障排除非常有用,因为它有助于确定问题是由特定服务器引起的本地问题,还是更广泛的问题。

您还可以使用它通过提供IP地址而不是主机名来运行反向DNS查询:

$ nslookup 209.132.183.105
105.183.132.209.in-addr.arpa name = redirect.redhat.com.

nslookup实用程序是一个有用的工具,可帮助排除与DNS名称解析相关的网络问题。接下来,让我们看一下故障排除本地网络套接字。

ss实用程序

在排除网络连接问题时,另一个常见任务是确定连接是否建立或特定服务器上的特定服务是否可用。

ss命令是一个方便的工具,用于显示网络套接字信息。它是netstat的现代替代品,提供类似的功能,但包括一些额外的功能。

使用不带选项的ss来查看所有已建立的网络套接字的完整列表,包括TCP、UDP和UNIX套接字类型。

$ ss

Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port

u_str ESTAB 0 0 * 25812 * 25811

u_str ESTAB 0 0 /run/systemd/journal/stdout 23604 * 23603

... TRUNCATED OUTPUT

u_str ESTAB 0 0 * 22566 * 22171

icmp6 UNCONN 0 0 *:ipv6-icmp *:*

icmp6 UNCONN 0 0 *:ipv6-icmp *:*


tcp ESTAB 0 0 192.168.122.169:ssh 192.168.122.1:45626

由于默认命令显示所有已建立的网络连接,因此在繁忙的机器上,条目可能会很多,超过一千个。为了帮助您进行故障排除,ss提供了几个过滤选项。

您可以使用以下命令行参数显示特定套接字类型的套接字信息:-t表示TCP,-u表示UDP,-x表示UNIX。

例如,使用ss -t显示TCP套接字信息:

$ ss -t
State Recv-Q Send-Q Local Address:Port Peer Address:Port

ESTAB 0 0 192.168.122.169:ssh 192.168.122.1:45626

您还可以通过源或目标主机名或IP地址过滤列表。例如,这里是一个针对目标IP地址192.168.122.1的已建立连接列表:

$ ss dst 192.168.122.1

Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port

tcp ESTAB 0 0 192.168.122.169:ssh 192.168.122.1:45626

这些命令通常用于排除网络连接问题,无论是通用的还是特定主机之间的问题。 ss的另一个实用应用是验证网络服务是否在本地机器上以正确的地址和端口侦听。要验证侦听套接字,请使用选项-l:

$ ss -l

Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port

nl UNCONN 0 0 rtnl:NetworkManager/909 *

nl UNCONN 0 0 rtnl:systemd-resolve/1122 *

... TRUNCATED OUTPUT

udp UNCONN 0 0 0.0.0.0:hostmon 0.0.0.0:*

udp UNCONN 0 0 127.0.0.53%lo:domain 0.0.0.0:

udp UNCONN 0 0 127.0.0.1:323 0.0.0.0:*

udp UNCONN 0 0 [::]:hostmon [::]:*

udp UNCONN 0 0 [::1]:323 [::]:*

tcp LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:*

tcp LISTEN 0 128 0.0.0.0:hostmon 0.0.0.0:*

tcp LISTEN 0 128 [::]:ssh [::]:*

tcp LISTEN 0 128 [::]:hostmon [::]:*

您可以使用上面描述的相同过滤选项来过滤特定的套接字类型。例如,要列出所有正在侦听的TCP套接字,请输入:

$ ss -lt

State Recv-Q Send-Q Local Address:Port Peer Address:Port

LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:*

LISTEN 0 128 0.0.0.0:hostmon 0.0.0.0:

LISTEN 0 128 [::]:ssh [::]:

LISTEN 0 128 [::]:hostmon [::]:

而不是显示服务名称(如ssh或hostmon),ss可以通过使用-n选项来显示端口号:

$ ss -ltn

State Recv-Q Send-Q Local Address:Port Peer Address:Port

LISTEN 0 128 0.0.0.0:22 0.0.0.0:

LISTEN 0 128 0.0.0.0:5355 0.0.0.0:

LISTEN 0 128 [::]:22 [::]:

LISTEN 0 128 [::]:5355 [::]:

最后,另一个有用的选项是-p,用于显示与进程相关的信息,例如用户名和进程ID(PID)。某些服务可能需要通过sudo或作为root获得提升的权限来列出进程信息:

$ sudo ss -tnlp

State Recv-Q Send-Q Local Address:Port Peer Address:Port

LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=919,fd=5))

LISTEN 0 128 0.0.0.0:5355 0.0.0.0:* users:(("systemd-resolve",pid=1122,fd=13))

LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=919,fd=7))

LISTEN 0 128 [::]:5355 [::]:* users:(("systemd-resolve",pid=1122,fd=15))

ss工具是系统管理员工具箱中用于网络故障排除任务的基本命令。接下来,让我们看一下tracepath,以跟踪主机之间的网络连接。

tracepath命令是一种网络故障排除工具

它显示本地主机和远程主机之间的网络连接路径,标识用于路由流量的所有路由器。

如果您无法连接到远程主机上的网络服务,tracepath将帮助您确定问题所在。

tracepath是traceroute的替代品,提供类似的功能。主要区别在于,tracepath使用随机UDP端口而不是ICMP协议进行跟踪,因此不需要提升的特权来运行。

对于基本用法,请提供目标主机的主机名或IP地址。您还可以提供选项-n以显示路由器的IP地址,而不是它们的名称:

$ tracepath -n sat65server

1?: [LOCALHOST] pmtu 1500

1: 192.168.122.1 0.415ms

1: 192.168.122.1 0.299ms

2: 192.168.10.10 0.904ms

3: 192.168.88.1 1.127ms

4: 192.168.0.95 2.020ms

Resume: pmtu 1500

如果tracepath无法连接到网络跳跃,它将显示无回复。默认情况下,它尝试的最大跳数为30,这通常足够。您可以使用选项-m更改跳数。

假设在特定跳跃后未收到任何回复。这是一个很好的指示器,可以帮助您进行故障排除。tracepath信息并不是确定性的,因为流量可能出于多种原因而被阻止。但是,它可以帮助您缩小问题范围并集中解决问题的努力。

由于安全原因,Internet上的许多路由器都会阻止流量,因此tracepath可能无法用于跟踪与Internet服务的连接性。但它仍然对本地网络故障排除非常有用。

相关推荐