<返回更多

Linux环境下网络管理、排障和调试,这几个工具足够了「收藏版」

2020-07-17    
加入收藏

 

Linux环境下网络管理、排障和调试,这几个工具足够了「收藏版」

 

一、前言

linux系统是大多数软件运行的首选操作系统。作为Linux系统管理员,日常工作的一大部分时间都是在对数据中心或者机房里的服务器进行配置、维护、问题排查,管理这些服务器和网络。在Linux系统中自带了大量的工具能够帮助我们实现管理的目的。

在这篇文章中,我们主要来介绍几个在网络管理方面用的最多的命令行工具,他们分别用于不同的用途,也会介绍一些通用的使用样例,这些工具会让你在Linux下管理网络更加容易。大家觉得有用可以收藏或转发给其他的朋友。

二、网络配置、排障和调试工具

1、ifconfig命令

ifconfig是用于网络接口配置的命令行工具,也用于在系统启动时初始化网络接口。一旦服务器启动并运行,就使用ifconfig命令为接口分配IP地址,并根据需要启用或禁用该接口。

ifconfig还可以用于查看当前活动接口的IP地址、硬件/mac地址以及MTU(Maximum Transmission Unit,最大传输单元)大小。因此,ifconfig对于调试或执行系统调优非常有用。

下面的例子用于显示所有活动网络接口的状态。

$ ifconfig

enp1s0    Link encap:Ethernet  HWaddr 28:d2:44:eb:bd:98  
          inet addr:192.168.0.103  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::8f0c:7825:8057:5eec/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:169854 errors:0 dropped:0 overruns:0 frame:0
          TX packets:125995 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:174146270 (174.1 MB)  TX bytes:21062129 (21.0 MB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:15793 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15793 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:2898946 (2.8 MB)  TX bytes:2898946 (2.8 MB)

如果要显示所有的网络接口,包含在线(up)的或下线(down)的,使用-a 选项。

$ ifconfig -a   

如果要给一个网络接口分配一个IP地址,使用下面的命令

$ sudo ifconfig eth0 192.168.56.5 netmask 255.255.255.0

如果要启用一个网络接口,使用下面命令

$ sudo ifconfig up eth0

如果要禁用一个网络接口,使用下面命令

$ sudo ifconfig down eth0

注意:虽然ifconfig是一个很不错的工具,但是现在过时了,有一个更好用的工具就是ip命令。

 

2、ip命令

ip命令是另一个用于显示和维护路由,网络设备,接口的非常有用的命令行工具。能够代替ifconfig和其他网络命令。

下面的命令显示了网络接口的IP地址和其他相关信息。

$ ip addr show
​
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 28:d2:44:eb:bd:98 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.103/24 brd 192.168.0.255 scope global dynamic enp1s0
       valid_lft 5772sec preferred_lft 5772sec
    inet6 fe80::8f0c:7825:8057:5eec/64 scope link 
       valid_lft forever preferred_lft forever
3: wlp2s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 38:b1:db:7c:78:c7 brd ff:ff:ff:ff:ff:ff
...

如果要给一个网络接口(eth0)分配一个IP地址,使用如下命令:

$ sudo ip addr add 192.168.56.1 dev eth0

如果要从网络接口(eth0)移除一个IP地址,使用如下命令:

$ sudo ip addr del 192.168.56.15/24 dev eth0

如果要显示内核中的相邻表,使用如下命令:

$ ip neigh
​
192.168.0.1 dev enp1s0 lladdr 10:fe:ed:3d:f3:82 REACHABLE

3、ifup,ifdown命令

ifup命令用于激活一个网络接口,使得可以接收或传输数据。

$ sudo ifup eth0

ifdown命令可以禁用一个网络接口,禁掉后就不能传输和接收数据了。

$ sudo ifdown eth0

4、ethtool命令

ethtool命令是一个用于查询和修改网络接口控制器参数和设备驱动程序的工具。下面的示例显示了ethtool的用法和查看网络接口参数的命令。

$ sudo ethtool enp0s3
​
Settings for enp0s3:
    Supported ports: [ TP ]
    Supported link modes:   10baseT/Half 10baseT/Full 
                            100baseT/Half 100baseT/Full 
                            1000baseT/Full 
    Supported pause frame use: No
    Supports auto-negotiation: Yes
    Advertised link modes:  10baseT/Half 10baseT/Full 
                            100baseT/Half 100baseT/Full 
                            1000baseT/Full 
    Advertised pause frame use: No
    Advertised auto-negotiation: Yes
    Speed: 1000Mb/s
    Duplex: Full
    Port: Twisted Pair
    PHYAD: 0
    Transceiver: internal
    Auto-negotiation: on
    MDI-X: off (auto)
    Supports Wake-on: umbg
    Wake-on: d
    Current message level: 0x00000007 (7)
                   drv probe link
    Link detected: yes

5、ping命令

ping(Packet INternet Groper)是一个用于测试位于一个网络LAN(Local Area Network)和WAN(Wide Area Network)的两个系统的连通性的工具。使用ICMP(Internet Control Message Protocol)进行通信。

为了测试到另一个节点的连通性,可以提供IP或hostname,例如:

$ ping 192.168.0.103
​
PING 192.168.0.103 (192.168.0.103) 56(84) bytes of data.
64 bytes from 192.168.0.103: icmp_seq=1 ttl=64 time=0.191 ms
64 bytes from 192.168.0.103: icmp_seq=2 ttl=64 time=0.156 ms
64 bytes from 192.168.0.103: icmp_seq=3 ttl=64 time=0.179 ms
64 bytes from 192.168.0.103: icmp_seq=4 ttl=64 time=0.182 ms
64 bytes from 192.168.0.103: icmp_seq=5 ttl=64 time=0.207 ms
64 bytes from 192.168.0.103: icmp_seq=6 ttl=64 time=0.157 ms
^C
--- 192.168.0.103 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5099ms
rtt min/avg/max/mdev = 0.156/0.178/0.207/0.023 ms

可以指定发送特定数量的ECHO_REQUEST包后退出,使用-c选项:

$ ping -c 4 192.168.0.103
​
PING 192.168.0.103 (192.168.0.103) 56(84) bytes of data.
64 bytes from 192.168.0.103: icmp_seq=1 ttl=64 time=1.09 ms
64 bytes from 192.168.0.103: icmp_seq=2 ttl=64 time=0.157 ms
64 bytes from 192.168.0.103: icmp_seq=3 ttl=64 time=0.163 ms
64 bytes from 192.168.0.103: icmp_seq=4 ttl=64 time=0.190 ms
​
--- 192.168.0.103 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3029ms
rtt min/avg/max/mdev = 0.157/0.402/1.098/0.402 ms

6、traceroute命令

traceroute是一个命令行工具,用于跟踪从本地系统到另一个网络系统的完整路径。他会打印到达终端服务器的路径中的跳数,它是另一个易于使用的网络故障排除使用工具。

下面的例子,是跟踪从本地系统到baidu的域名的路由包信息。

$ traceroute www.baidu.com
traceroute to www.baidu.com (182.61.200.7), 30 hops max, 60 byte packets
 1  gateway (192.168.159.2)  0.290 ms  0.091 ms  6.320 ms
 2  * * *
​

7、mtr网络诊断工具

mtr是一个现代的命令行网络诊断工具,将ping和traceroute的功能结合到一个诊断工具中。默认情况下,输出是实时更新的,直到按q退出程序。

最简单的方式就是执行mtr,然后提供一个hostname或者IP地址作为参数,如下:

$ mtr baidu.com
​
localhost.localdomain (0.0.0.0)                                                                                                                                                           Thu Jul 16 22:16:20 2020
Keys:  Help   Display mode   Restart statistics   Order of fields   quit
                                                                                                                                                                          Packets               Pings
 Host                                                                                                                                                                   Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. 192.168.159.2                                                                                                                                                        0.0%    72    0.4   2.8   0.2  38.3   6.2
 2. 192.168.1.1                                                                                                                                                          0.0%    72   10.9   4.4   1.2  24.8   4.2
 3. 115.183.128.1                                                                                                                                                        0.0%    72    8.1  10.3   2.7 126.7  16.5
 4. 218.241.253.153                                                                                                                                                      0.0%    72   24.3   8.3   2.0  59.9  10.7
 5. 218.241.253.161

8、route命令

route是一个用于显示和维护Linux系统中IP路由表的命令行工具,主要用于通过网口配置静态路由到特定主机或网络。

可以通过如下命令查看内核IP路由表:

$ route
​
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    100    0        0 enp0s3
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 enp0s3
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

添加默认gateway到一个路由表:

$ sudo route add default gw <gateway-ip>

添加一个网络路由到一个路由表:

$ sudo route add -net <network ip/cidr> gw <gateway ip> <interface>

从路由表中删除特定的路由项:

$ sudo route del -net <network ip/cidr>

9、nmcli命令

nmcli是一个易用的、脚本化的命令行工具,用于报告网络状态,管理网络连接,以及控制NetworkManager。

查看所有网络设备的状态:

$ nmcli dev status
​
DEVICE      TYPE      STATE      CONNECTION         
virbr0      bridge    connected  virbr0             
enp0s3      ethernet  connected  Wired connection 1 

只显示已连接的网络

$ nmcli con show
​
Wired connection 1  bc3638ff-205a-3bbb-8845-5a4b0f7eef91  802-3-ethernet  enp0s3 
virbr0              00f5d53e-fd51-41d3-b069-bdfd2dde062b  bridge          virbr0 
Linux环境下网络管理、排障和调试,这几个工具足够了「收藏版」

 

三、网络扫描和性能分析工具

1、netstat命令

netstat是一个命令行工具,用于显示如网络连接,路由表,端口统计等信息,对网络排障和性能分析很有帮助。

另外,netstat也是一个基本的网络服务调试工具,用于检测哪个应用监听哪个端口。例如,下面的命令显示了所有的TCP端口,已经哪个应用在监听他们。

$ sudo netstat -tnlp
​
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN      1257/master         
tcp        0      0 127.0.0.1:5003          0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN      1015/dovecot        
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN      1015/dovecot        
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd   

netstat也可以查看内核路由表,使用-r选项,和上面的route命令一样的效果。

$ netstat -r
​
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         gateway         0.0.0.0         UG        0 0          0 enp0s3
192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0 enp0s3
192.168.122.0   0.0.0.0         255.255.255.0   U         0 0          0 virbr0

虽然netstat是一个比较好的工具,但也过时了,可以使用ss命令代替它。

2、ss命令

ss(socket statistics)是一个强大的命令行工具,用于检测套接字。dump套接字统计信息并进行显示,与netstat类型。另外,与其他类似程序相比,它显示了更多的TCP和状态信息。

$ ss -ta
​
State      Recv-Q Send-Q                       Local Address:Port    Peer Address:Port                
LISTEN     0      100                                                       *:submission                                                              *:*                    
LISTEN     0      128                                               127.0.0.1:fmpro-internal                                                          *:*                    
LISTEN     0      100                                                       *:pop3                                                                    *:*                    
LISTEN     0      100                                                       *:imap                                                                    *:*                    
LISTEN     0      128                                                       *:sunrpc                                                                  *:*                    
LISTEN     0      100                                                       *:urd   

如果要显示所有活动的TCP连接以及计时器,运行以下命令:

$ ss -to

3、nc命令

nc(NetCat)也被称为“网络瑞士军刀”,是一个非常强大的工具,用于与TCP,UDP,UNIX域套接字的几乎任何任务。可以打开TCP连接,监听任意的TCP和UDP端口,执行端口扫描等。

也可以将它作为一个简单的TCP代理,用于网络守护进程测试,检查远程端口是否可达等等。此外,还可以使用nc和pv命令在两台计算机之间传输文件。

下面的例子,可以显示如何扫描一个端口列表:

$ nc -zv server2.tecmint.lan 21 22 80 443 3000

也可以指定一个端口范围:

$ nc -zv server2.tecmint.lan 20-90

下面使用nc在源端口3000与server2.tecmint.lan的5000端口之间建立一个TCP连接:

$ nc -p 3000 -w 10 server2.tecmint.lan 5000 

4、nmap命令

nmap(Network MApper)是一个为Linux系统和网络管理员准备的一个功能强大、广泛的工具。用于收集有关单个主机的信息或者浏览整个网络。nmap也可以用于执行安全扫描,网络审核和查找远程主机上的开放端口等等。

可以使用hostname或IP地址来扫描主机:

$ nmap baidu.com
​
Starting Nmap 6.40 ( http://nmap.org ) at 2020-07-17 06:55 CST
Nmap scan report for baidu.com (220.181.38.148)
Host is up (0.00067s latency).
Other addresses for baidu.com (not scanned): 39.156.69.79
Not shown: 998 filtered ports
PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  https
​
Nmap done: 1 IP address (1 host up) scanned in 63.76 seconds
​

四、DNS查找工具

1、host命令

host命令是一个用于DNS查找的简单实用的工具。他可以将hostname转换为IP地址,或者反过来。

$ host baidu.com
baidu.com has address 220.181.38.148
baidu.com has address 39.156.69.79
baidu.com mail is handled by 10 mx.maillb.baidu.com.
baidu.com mail is handled by 20 mx50.baidu.com.
baidu.com mail is handled by 20 mx1.baidu.com.
baidu.com mail is handled by 20 jpmx.baidu.com.
baidu.com mail is handled by 15 mx.n.shifen.com.

2、dig命令

dig(domain information groper)是另一个用于DNS查找的实用工具。用于查找DNS相关的信息,如A Record, CNAME, MX Record 等

$ dig baidu.com
​
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16725
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 5, ADDITIONAL: 5
​
;; QUESTION SECTION:
;baidu.com.         IN  A
​
;; ANSWER SECTION:
baidu.com.      600 IN  A   220.181.38.148
baidu.com.      600 IN  A   39.156.69.79
​
;; AUTHORITY SECTION:
baidu.com.      82983   IN  NS  dns.baidu.com.
baidu.com.      82983   IN  NS  ns4.baidu.com.
baidu.com.      82983   IN  NS  ns3.baidu.com.
baidu.com.      82983   IN  NS  ns7.baidu.com.
baidu.com.      82983   IN  NS  ns2.baidu.com.
​
;; ADDITIONAL SECTION:
dns.baidu.com.      19431   IN  A   202.108.22.220
ns2.baidu.com.      9900    IN  A   220.181.33.31
ns3.baidu.com.      50234   IN  A   112.80.248.64
ns4.baidu.com.      16079   IN  A   14.215.178.80
ns7.baidu.com.      40791   IN  A   180.76.76.92
​
;; Query time: 7 msec
;; SERVER: 221.228.225.1#53(221.228.225.1)
;; WHEN: 五 7月 17 06:45:11 CST 2020
;; MSG SIZE  rcvd: 229
​

3、nslookup命令

nslookup也是一个常用的命令行实用工具,可以交互式和非交互式的查询DNS服务器。可以用于查询DNS资源记录,可以找到域的“A”记录(IP地址),如图所示:

$ nslookup baidu.com
Server:     221.228.225.1
Address:    221.228.225.1#53
​
Non-authoritative answer:
Name:   baidu.com
Address: 220.181.38.148
Name:   baidu.com
Address: 39.156.69.79
​

五、网络包分析工具

1、tcpdump命令

tcpdump命令是一个非常强大和广泛实用的命令行网络嗅探器,用于捕获和分析在特定接口上传输或接收的TCP/IP数据包。

要想捕获特定接口上的数据包,可以使用-i选项

$ tcpdump -i enp0s3
​
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes
09:35:40.287439 IP tecmint.com.ssh > 192.168.0.103.36398: Flags [P.], seq 4152360356:4152360552, ack 306922699, win 270, options [nop,nop,TS val 2211778668 ecr 2019055], length 196
09:35:40.287655 IP 192.168.0.103.36398 > tecmint.com.ssh: Flags [.], ack 196, win 5202, options [nop,nop,TS val 2019058 ecr 2211778668], length 0
09:35:40.288269 IP tecmint.com.54899 > gateway.domain: 43760+ PTR? 103.0.168.192.in-addr.arpa. (44)
09:35:40.333763 IP gateway.domain > tecmint.com.54899: 43760 NXDomain* 0/1/0 (94)

要想捕获特定数量的包,可以使用-c选项:

$ tcpdump -c 5 -i enp0s3

也可以将捕获的包存储到一个外部的文件用于后续的分析,可以使用-w选项指定输出文件。

$ tcpdump -w captured.pacs -i enp0s3
Linux环境下网络管理、排障和调试,这几个工具足够了「收藏版」

 

六、总结

对于一个Linux系统或网络管理员来说,在平时工作中对遇到的网络问题进行排障,调试,这些工具基本就够用了。这里只是简单的说明了几个示例,并没有做详细的介绍,后面如果有时间再做详细的介绍,等不急的小伙伴可以下来自己找相关的资料。如果您认为这些信息可以帮助到您,可以将它转发出去,让更多的朋友看到,收藏起来吧,早晚会用到!

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>