linux 网络管理


目录

  •  修改系统网卡名
  • 常用网络配置命令---ifconfig
  • 常用网络配置命令---route
  • 常用网络配置命令---netstat
  • 常用网络配置命令---ip
  • 常用网络配置命令---ss
  • 网络配置工具---------nmcli
  • 网络抓包工具---------tcpdunp
  • 进程带宽查看工具---nethogs
  • 实时流量查看工具---iftop
  • 网络配置文件
  • 多网卡bonding
  • unubtu网络配置

修改网卡名

编辑/etc/default/grub,在 GRUB_CMDLINE_LINUX 末尾添加 net.ifnames=0 biosdevname=0

GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet net.ifnames=0 biosdevname=0

生成配置文件

grub2-mkconfig -o /etc/grub2.cfg

重启

reboot

修改网卡名之后发现ip有了变化,并且网络配置文件不生效,处理办法:

mv /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-eth0
vim /etc/sysconfig/network-scripts/ifcfg-eth0
...
NAME="eth0"
DEVICE="eth0"
grub2-mkconfig -o /etc/grub2.cfg   # 再次生成配置文件
reboot                             # 重启

ifconfig 

常用选项

查看网卡地址

ifconfig eth0

查看所有网卡信息

ifconfig -a

启用或禁用指定网卡

ifconfig eth1 [up|down]

修改指定网卡的ip地址

ifconfig eth1 1.1.1.1 netmask 255.255.255.0

清除指定网卡的ip地址

ifconfig eth1 0.0.0.0

给网卡eth1增加一个地址

ifconfig eth1:1 192.168.137.188/24

显示网卡接口统计数据

ifconfig -s

route

常用选项

查看路由表

route
route -n

添加路由

route add [-net|-host|default] target [netmask Nm] [gw GW] [[dev] If]
route add -net 0.0.0.0 gw 192.168.137.2 dev eth0

删除路由

route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]
route del -net 0.0.0.0 gw 192.168.137.2 dev eth0

netstat

常用选项

-t:   tcp协议相关
-u:   udp协议相关
-w:   raw socket相关
-l:   处于监听状态
-a:   所有状态
-n:   以数字显示IP和端口
-e:  扩展格式
-p:   显示相关进程及PID

显示网卡接口统计数据

netstat -i
netstat -I=eth0

ip

命令格式:

ip [ OPTIONS ] OBJECT { COMMAND | help }

常用选项

禁用启用网卡

ip link set eth1 [ up|down ]

网卡改名,改名之前必须先禁用

ip link set eth1 name eth666

网卡添加删除别名(ip地址)

ip addr add 172.16.100.100/16 dev eth1 label eth1:1
ip addr del 172.16.100.100/16 dev eth1 label eth1:1

清除ip地址

ip addr flush dev eth1

添加ip地址

ip address add 192.168.137.151/24 dev eth1

ss

常用选项

-t: tcp协议相关
-u: udp协议相关
-w: 裸套接字相关
-x:unix sock相关
-l: listen状态的连接
-a: 所有
-n: 数字格式
-p: 相关的程序及PID
-e: 扩展的信息
-m:内存用量
-o:计时器信息

常见用法

显示本地打开的所有端口

ss -l

显示每个进程具体打开的socket

ss -pl

显示所有的tcp socket

ss -t -a

显示所有的udp socket

ss -t -a

显示所有已建立的ssh链接

ss -o state established '( dport = :ssh or sport = :ssh )'

显示所有已建立的http链接

ss -o state established '( dport = :http or sport = :http )'

 nmcli

修改配置文件执行生效

nmcli con reload
nmcli con up con-name

查看帮助

nmcli conn add help

显示所有活动连接

nmcli conn show --active

显示设备状态

nmcli dev status

显示网络接口属性

nmcli dev show ens33

 添加,删除,修改网卡IP地址

# 创建新连接default,IP自动通过dhcp获取
nmcli con add con-name default type Ethernet ifname eth0

# 删除创建的default链接
nmcli con del default

# 创建新连接static ,指定静态IP,不自动连接
nmcti con add con-name static ifname eth0 autoconnect no type Ethernet ipv4.addresses 172.25.X.10/24 ipv4.gateway 172.25.X.254

# 启用static连接配置 nmcli con up
static
# 启用default连接配置 nmcli con up
default
# 修改连接设置 nmcli con mod “
static” connection.autoconnect no nmcli con mod “static” ipv4.dns 172.25.X.254 nmcli con mod “static” +ipv4.dns 8.8.8.8 nmcli con mod “static” -ipv4.dns 8.8.8.8 nmcli con mod “static” ipv4.addresses “172.16.X.10/24 172.16.X.254” nmcli con mod “static” +ipv4.addresses 10.10.10.10/16
# DNS设置存放在
/etc/resolv.conf,PEERDNS=no 表示当IP通过dhcp自动获取时,dns仍是手动设置,不自动获取等价于下面命令 nmcli con mod “system eth0” ipv4.ignore-auto-dns yes

nmcli实现bonding

# 添加bonding接口
nmcli con add type bond con-name mybond0 ifname bond0 mode active-backup
ipv4.method manual ipv4.addresses 10.0.0.100/24

# 添加从属接口 nmcli con add type bond
-slave ifname ens7 master bond0 nmcli con add type bond-slave ifname ens3 master bond0
# 注:如无为从属接口提供连接名,则该名称是接口名称加类型构成 # 要启动绑定,则必须首先启动从属接口 nmcli con up bond
-slave-eth0 nmcli con up bond-slave-eth1
# 启动绑定 nmcli con up mybond0

tcpdump

常用选项

查看网卡

tcpdump -D

监听某一块网卡

tcpdump -i ens33

监听特定主机

tcpdump host 192.168.137.200

监听特定来源主机

tcpdump src host 192.168.137.200

监听特定目标主机

tcpdump dst host 192.168.137.200

监听特定端口

tcpdump port 80

监听 特定协议

tcpdump tcp

来源主机+端口+TCP,监听来自主机10.0.0.100在端口22上的TCP数据包

tcpdump tcp port 22 and src host 10.0.0.100

 监听特定主机之间的通信

tcpdump ip host 10.0.0.101 and 10.0.0.102

10.0.0.101和除了10.0.0.1之外的主机之间的通信

tcpdump ip host 10.0.0.101 and ! 10.0.0.1

 限制抓包数量,如抓到1000,自动退出

tcpdump -c 1000

抓包实例

tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
(2)-i eth1 : 只抓经过接口eth1的包
(3)-t : 不显示时间戳
(4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
(5)-c 100 : 只抓取100个数据包
(6)dst port ! 22 : 不抓取目标端口是22的数据包
(7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
(8)-w ./target.cap : 保存成cap文件,方便用wireshark分析

nethogs

安装

yum install -y nethogs

 参数

nethogs       # 直接进入监控页面
nethogs -h    # 查看帮助
nethogs -V    # 查看版本
nethogs -d    # 修改刷新频率,默认是1s刷新一次
nethogs -v    # 修改显示流量的单位(0 = KB/s, 1 = total KB, 2 = total B, 3 = total MB)
nethogs -c    # 指定刷新的次数
nethogs -s    # 排序显示

 nethogs 运行时,交互按键

q    # 退出
s    # 按发送流量排序
r    # 按接收流量排序
m    # 在不同的单位之间切换 

iftop 

安装

yum install -y iftop

iftop 运行时,常用交互按键

h    # 查看帮助
n    # 显示主机名或ip地址
b    # 开启或关闭流量图形条
B    # 切换计算2s或10s或40s内的平均流量
q    # 退出

S    # 显示本机端口
D    # 显示远程主机端口
T    # 显示每个连接的总流量

实例:按流量排序

  • L 显示进度条
  • T 切换显示 总流量
  • 3 通过第三列排序
  • t 发送和接受转为一行
  • B 分别查看2s 10s 40s的统计
  • l 筛选IP地址

网络配置文件

通过命令修改网络配置只能临时生效,如果需要永久生效,就需要修改网络配置文件

vim /etc/sysconfig/network-scripts/ifcfg-eth0

参数选项说明:

TYPE 接口类型;常见有的Ethernet, Bridge
NAME 此配置文件应用到的设备
DEVICE 设备名
HWADDR 对应的设备的MAC地址
UUID 设备的惟一标识
BOOTPROTO 激活此设备时使用的地址配置协议,常用的dhcp, static, none, bootp
IPADDR 指明IP地址
NETMASK 子网掩码,:255.255.255.0
PREFIX 网络ID的位数, :24
GATEWAY 默认网关
DNS1 第一个DNS服务器地址
DNS2 第二个DNS服务器地址
DOMAIN 主机不完整时,自动搜索的域名后缀
ONBOOT 在系统引导时是否激活此设备
USERCTL 普通用户是否可控制此设备
PEERDNS 如果BOOTPROTO的值为“dhcp”YES将允许dhcp server分配的dns服务
器信息直接覆盖至/etc/resolv.conf文件,NO不允许修改resolv.conf
NM_CONTROLLED NMNetworkManager的简写,此网卡是否接受NM控制

主机名配置文件

vim /etc/hostname

host文件

cat /etc/hosts

 dns域名解析文件

cat /etc/resolv.conf

修改/etc/hosts和dns优先级

vim /etc/nsswitch.conf
...
hosts: files dns myhostname

用配置文件给网卡配置别名(加IP),配置完成之后重启网络服务

vim ifcfg-eth0:1   # 给网卡eth0生成别名配置
DEVICE=eth0:1   
IPADDR=10.0.0.100    # ip必须使用静态地址
PREFIX=8

多网卡bonding

将多块网卡绑定成一块,实现负载均衡或高可用,绑定之后所有网卡都被修改为相同mac地址

bond聚合链路模式共7种模式:0-6 Mode,常用的模式为 0,1,3,6

其中 mode 1、5、6 不需要交换机设置,mode 0、2、3、4需要交换机设置
active-backup、balance-tlb 和 balance-alb 模式不需要交换机的任何特殊配置。其他绑定模式需要配置交换机以便整合链接。
如:Cisco 交换机需要在模式 0、2 和 3 中使用 EtherChannel,但在模式4中需要 LACP和 EtherChannel

mod=0 ,即:(balance-rr) Round-robin policy(轮询)聚合口数据报文按包轮询从物理接口转发。

负载均衡—所有链路处于负载均衡状态,轮询方式往每条链路发送报文这模式的特点增加了带宽,
同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。
性能问题—一个连接或者会话的数据包如果从不同的接口发出的话,中途再经过不同的链路,在客
户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络
的吞吐量就会下降。Bond0在大压力的网络传输下,性能增长的并不是很理想。需要交换机进行端口绑定

mod=1,即: (active-backup) Active-backup policy(主-备份策略)只有Active状态的物理接口才转发数据报文。

容错能力—只有一个slave是激活的(active)。也就是说同一时刻只有一个网卡处于工作状态,其他
的slave都处于备份状态,只有在当前激活的slave故障后才有可能会变为激活的(active)。
无负载均衡—此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个
接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N。

mod=2,即:(balance-xor) XOR policy(平衡策略)聚合口数据报文按源目MAC、源目IP、源目端口进行异或HASH运算得到一个值,根据该值查找接口转发数据报文

负载均衡—基于指定的传输HASH策略传输数据包。
容错能力—这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。
性能问题—该模式将限定流量,以保证到达特定对端的流量总是从同一个接口上发出。既然目的地
是通过MAC地址来决定的,因此该模式在“本地”网络配置下可以工作得很好。如果所有流量是通过
单个路由器,由于只有一个网关,源和目标mac都固定了,那么这个算法算出的线路就一直是同一
条,那么这种模式就没有多少意义了。需要交换机配置为port channel

mod=3,即:broadcast(广播策略)这种模式的特点是一个报文会复制两份往bond下的两个接口分别发送出去

当有对端交换机失效,感觉不到任何downtime,但此法过于浪费资源;不过这种模式有很好的容
错机制。此模式适用于金融行业,因为他们需要高可靠性的网络,不允许出现任何问题。
mod=4,即:(802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE 802.3ad 动态链接聚合)
在动态聚合模式下,聚合组内的成员端口上均启用LACP(链路汇聚控制协议)协议,其端口状态通过该协议自动进行维护。
负载均衡—基于指定的传输HASH策略传输数据包。默认算法与blance-xor一样。
容错能力—这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常
的链路上。对比blance-xor,这种模式定期发送LACPDU报文维护链路聚合状态,保证链路质量。
需要交换机支持LACP协议

mod=5,即:(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡)

在每个物理接口上根据当前的负载(根据速度计算)分配外出流量。如果正在接收数据的物理接口
口出故障了,另一个物理接口接管该故障物理口的MAC地址。需要ethtool支持获取每个slave的速率

 mod=6,即:(balance-alb) Adaptive load balancing(适配器适应性负载均衡)

该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡,而且不需要任何
switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP
应答,并把源硬件地址改写为bond中某个物理接口的唯一硬件地址,从而使得不同的对端使用不
同的硬件地址进行通信。

实验:将eth0和eth1两张网卡bounding,模式为mode-1

修改eth0配置文件

/etc/sysconfig/network-scripts/ifcfg-eth0
NAME=eth0
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes

修改eth1配置文件

NAME=eth1
DEVICE=eth1
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes

创建bonding设备文件

/etc/sysconfig/network-scripts/ifcfg-bond0
NAME=bond0
TYPE=bond
DEVICE=bond0
BOOTPROTO=none
IPADDR=10.0.0.100
PREFIX=8
# miimon指定链路监测时间间隔。如果miimon=100,那么系统每100ms 监测一次链路连接状态,如果有一条线路不通就转入另一条线路
BONDING_OPTS="mode=1 miimon=100 fail_over_mac=1"

查看bond0的状态

/proc/net/bonding/bond0

删除bond0

ifconfig bond0 down
rmmod bonding