网络故障排查和tcpdump抓包

网络故障排查:

  1. ping一台服务器不通,你如何排查
    1. 检查本机ip地址设置  网关和dns服务器是否设置正确 或者ip地址冲突
    2. 能否上网 看路由器是否有问题 ping
    3. 服务器是否运行
    4. 服务器禁止ping   防火墙设置 iptables -A INPUT -P ICMP -j DROP
    5. iptables -D INPUT -P ICMP -j DROP
  2. 用户不能访问服务器 怎么排查
      1. 检查用户网络连接
      2. 检查服务器是否运行(数据库 端口nc)
      3. app是否运行 数据库运行等 防火墙
      4. 机房 运营商
  3. 如何知道服务器开启了哪些端口
    1. nc  nmap  nerstat ss lsof
      1. #!/bin/bash
      2. for  i in {0..65535}
      3. do
      4.         (if  ping -c 1 -w 1  192.168.205.141 $i  &>/dev/null ;then
      5.                 echo  $i is used |tee -a ip_use.txt
      6.         else
      7.                 echo  $i is not used|tee -a ip_nouse.txt
      8.         
      9.         fi)&(在后台启动一个子进程)
      10.         wait(父进程执行完代码等待子进程也执行在退出)
      11. done
      12. tee: command |tee 文件名 将输出写入到文件
        1. -a 追加到末尾 不覆盖内容 不写a会覆盖
    2. [root@k8s-master-1 kernel]# lsof -i:22
    3. COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    4. sshd      988 root    3u  IPv4  27937      0t0  TCP *:ssh (LISTEN)
    5. sshd      988 root    4u  IPv6  27939      0t0  TCP *:ssh (LISTEN)
  4. 如何知道一个局域网里有哪些ip地址在使用
    1. 遍历ping -c -w 1
    2. fping -g 192.168.1.1-254
    3. 或者for循环
      1. #!/bin/bash
      2. for  i in {1..254}
      3. do
      4.         (if  ping -c 1 -w 1  192.168.205.$i  &>/dev/null ;then
      5.                 echo  192.168.205.$i is used |tee -a ip_use.txt
      6.         else
      7.                 echo  192.168.205.$i is not used|tee -a ip_nouse.txt
      8.         
      9.         fi)&(在后台启动一个子进程)
      10.         wait(父进程执行完代码等待子进程也执行在退出)
      11.         
      12. done

5.如何知道基于王里某个ip是否有冲突

查看输出结果中是否出现了该IP地址,如果有多个条目对应同一个IP地址,则可能存在IP地址冲突。

[root@k8s-master-1 add]# arping -I ens33 192.168.159.136

ARPING 192.168.159.136 from 192.168.159.144 ens33

Unicast reply from 192.168.159.136 [00:0C:29:51:46:32]  1.601ms

Unicast reply from 192.168.159.136 [00:0C:29:51:46:32]  0.957ms

Unicast reply from 192.168.159.136 [00:0C:29:51:46:32]  1.011ms

Unicast reply from 192.168.159.136 [00:0C:29:51:46:32]  1.022ms

Unicast reply from 192.168.159.136 [00:0C:29:51:46:32]  0.986ms

Unicast reply from 192.168.159.136 [00:0C:29:51:46:32]  0.991ms

Unicast reply from 192.168.159.136 [00:0C:29:51:46:32]  1.020ms

^CSent 7 probes (1 broadcast(s))

Received 7 response(s)

如何知道目前的网络是否稳定或者速度是否快

ping www.baidu.com  观察ping命令的响应时间和丢包率

[root@k8s-master-1 add]# ping www.baidu.com

PING www.a.shifen.com (183.2.172.185) 56(84) bytes of data.

64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=1 ttl=128 time=23.7 ms

64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=2 ttl=128 time=24.6 ms

64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=3 ttl=128 time=28.3 ms

服务器的性能问题

       如何知道目前的服务器各种指标的情况?服务器是否繁忙(load average)?

cpu 网络io  磁盘io(df 挂载  lsblk几块磁盘 iostat) 内存

top  htop  默认基于cpu使用率排序

P(processor处理器)  M  (基于内存排序)

[root@k8s-master-1 ~]# top

top - 15:09:18 up  5:37,  2 users,  load average: 0.84, 1.34, 1.51

Tasks: 166 total,   1 running, 165 sleeping,   0 stopped,   0 zombie

%Cpu(s):  3.4 us,  3.4 sy,  0.0 ni, 89.7 id,  0.0 wa,  0.0 hi,  3.4 si,  0.0 st

KiB Mem :  3861300 total,   395440 free,  1161244 used,  2304616 buff/cache

KiB Swap:        0 total,        0 free,        0 used.  2447520 avail Mem

PR 进程的优先级 20- -19  默认都为20

NI  -》nice  值 可通过修改ni 修改PR 默认0 值越小优先级越高

us --》user processes  用户态进程消耗的cpu的资源的比例

sy --》system processes(内核态的进程消耗的cpu的资源的比例)

id  -->idle  空闲

hi  --》hard interrupt   --》硬件导致的程序中断

si  --》soft interrupt   --》软件导致的程序中断

shift+>    top命令翻页

nice -n -10 vim feng.txt  启动新进程设置nice

renice -5 -p(进程号) 1234  每次拿20加减数字 重新调整以运行的进程的优先级

CFS 完全公平调度算法  2516

时间片cd /proc/sys/kernel/sched_rr_timeslice_ms  100ms

按f可以调出可供选择的字段(列)field

有*会显示出来   上下方向键选中后 敲空格就会加上*  然后可top看到

P  last used cpu                   

h  获得帮助 help  k 杀进程 r 重定义nice值

load average:0.25 1.64 2.35

过去一分钟 五分钟 十五分钟 系统平均负载 有多少进程在cpu run

系统平均负载是处于可运行状态或不可中断状态的 正在等待的进程的平均数量

是按照1个cpu核心算的   一般一到五 都还不是很忙 最大值 核心数*5

cache : disk—cache-memory 读

buffer:memory-buffer-disk  写

util:繁忙度  一秒中有多少百分比的时间用于I/O操作。     

[root@k8s-master-1 kernel]# iostat -x   监控系统 I/O 设备负载以及 CPU 使用情况

  • -c: 显示CPU使用情况。
  • -d: 显示磁盘I/O统计信息。
  • -x: 显示详细的磁盘I/O统计信息。
  • -k: 以KB为单位显示I/O信息。
  • -m: 以MB为单位显示I/O信息。
  • -t: 显示系统负载平均值。

Linux 3.10.0-1160.119.1.el7.x86_64 (k8s-master-1)        2024年09月07日        _x86_64_ (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           4.03    0.00    5.44    0.06    0.00   90.48

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util

scd0              0.00     0.00    0.00    0.00     0.20     0.00   114.22     0.00    2.22    2.22    0.00   1.83   0.00

sda               0.01     0.09   18.94    7.29  1000.90   104.88    84.30     0.05    2.12    2.66    0.72   0.33   0.86

dm-0              0.00     0.00   18.67    7.38   994.28   104.08    84.33     0.06    2.14    2.69    0.74   0.33   0.85

dm-1              0.00     0.00    0.02    0.00     0.41     0.00    48.19     0.00    0.31    0.31    0.00   0.19   0.00

dm-2              0.00     0.00    0.03    0.00     0.22     0.40    45.66     0.00    0.41    0.28    4.75   0.29   0.00

qps 每秒钟的查询次数

tps 每秒钟传输次数

rrqm/s   wrqm/s 每秒合并的读写请求数量

r/s     w/s 每秒完成的读写操作数

glances 全能查看各项指标

看机器内存 free -h

[root@k8s-master-1 kernel]# nc -z(端口扫描 只发送请求不发送给数据) -w(超时时间s) 1 120.24.223.108 443

Connection to 120.24.223.108 443 port [tcp/https] succeeded!

-p 指定监听端口

  1. 如何禁止别人访问我们的web服务或者数据库服务?
    1. iptables
  2. 如何禁止某个ip地址或者某个网段的ip访问服务器

如何抓包分析?

tcpdump

tcpdump -i ens33 -nn host 192.168.159.144 and port 22

tcpdump -i ens33 -nn src host 192.168.159.144 and dst port 22

tcpdump -i ens33 -nn src host 192.168.159.144 and \(dst port 22 or sst port 80 \) -vv

tcpdump -i ens33 tcp and dst port 22 and src net 192.168.159.0/24

tcpdump -i ens33  -p icmp -nn

-I interface指定抓包的接口

-n 以数字形式显示 不显示域名 number 不进行dns解析

-nn 不进行任何形式的名称解析

-vv显示更加详细信息

-F 清除规则 默认规则不会改

-v 显示匹配

-s 指定源ip  -d 指定目的ip

host <hostname_or_ip>: 捕获与指定主机名或IP地址相关的数据包。

net <network>: 捕获与指定网络相关的数据包。

port <portnum>: 捕获与指定端口相关的数据包。

src <hostname_or_ip>: 捕获源地址是指定主机名或IP地址的数据包。

dst <hostname_or_ip>: 捕获目的地址是指定主机名或IP地址的数据包。

-i 数据进入的接口 -o 数据出去的接口

ipvs有规则链chain(对数据包进行过滤处理): input,output,forward(处理转发数据包),postrouting(在进行路由选择后处理数据包),prerouting  不指定的话默认所有链

filter表的INPUT、OUTPUT、FORWARD链;

       nat表的PREROUTING、POSTROUTING链

如果转发数据(充当路由器),路径为prerouting->forword->postrouting

     规则表:raw表,mangle表,nat表(网络地址转换),filter表(数据过滤 默认) 表存放链,链放规则

哈希函数:任意个字符的输入经过哈希函数处理后得到固定长度长度字符串的输出

          输出的字符串称呼hash值(摘要值),ipvs采用了所以支持大规模,查找速度快

iptables  [-t 表名默认filter]  管理选项  [链名]  [条件匹配]  [-j 目标动作或跳转] -A INPUT

[root@localhost ~]# iptables -t filter -A(在末尾加apppend) INPUT -p(协议) tcp -j(jump跳转) ACCEPT (放行)DROP(丢弃数据包)REJECT(拒绝)LOG

[root@localhost ~]# iptables -I(insert在第一条插入) INPUT -p udp -j ACCEPT

[root@localhost ~]# iptables -I INPUT 2 -p icmp -j ACCEPT

[root@localhost ~]# iptables -P(policy指定规则链默认策略) INPUT DROP

iptables -L -n -v 看全部详细

-N 创建自定义链 -X 删除自定义链

[root@localhost ~]# iptables -L(list) INPUT --line-numbers(--line显示编号)-v

Chain INPUT (policy DROP)

num  target     prot opt source               destination

1    ACCEPT     udp  --  anywhere             anywhere

2    ACCEPT     icmp --  anywhere             anywhere

3    ACCEPT     tcp  --  anywhere             anywhere

 -F 清除filter表所有规则  

-i(在开始insert) INPUT  --dport --sport

[root@localhost ~]# iptables -A INPUT -i eth0 -p icmp --icmp-type Echo-Request -j DROP

[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT

端口匹配

使用“--sport 源端口”、“--dport 目标端口”的形式

采用“端口1:端口2”的形式可以指定一个范围的端口

只允许访问本机80  443 22 3306端口 其他的禁止访问

[root@web-3 ~]# cat sc.sh

#!/bin/bas

/usr/sbin/iptables   -F -t filter

/usr/sbin/iptables  -A  INPUT  -p icmp  -j SANCHUANG

/usr/sbin/iptables  -A  INPUT  -p tcp  -j SANCHUANG

#在SANCHUANG自定义链里添加规则

/usr/sbin/iptables  -A  SANCHUANG  -p icmp  -j LOG

/usr/sbin/iptables  -A  SANCHUANG  -p icmp  -j DROP

/usr/sbin/iptables  -A  SANCHUANG  -p tcp  --dport 80  -j ACCEPT

/usr/sbin/iptables  -A  SANCHUANG  -p tcp  --dport 443  -j ACCEPT

/usr/sbin/iptables  -A  SANCHUANG  -p tcp  --dport 3306  -j ACCEPT

/usr/sbin/iptables  -A  SANCHUANG  -p tcp  --dport 22  -j ACCEPT

/usr/sbin/iptables  -A  SANCHUANG  -p tcp  --dport 6443  -j ACCEPT

/usr/sbin/iptables -P INPUT  DROP

 自定义链是如何使用的:docker和k8s的时候 背后都会自动取创建相关的自定义和规则

[root@web-1 ~]# iptables -A INPUT -p icmp -j SANCHUANG

[root@web-1 ~]# iptables -A INPUT -p tcp -j SANCHUANG

  • 27
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值