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 | NM是NetworkManager的简写,此网卡是否接受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