Linux—网络管理

发布时间 2024-01-02 15:46:39作者: 赵九思

Linux 网络管理

1 、网卡命名方式

1.1 网卡名称的组成格式

  • 前两个字母标识固件
    • 以太网以en开头
    • 无线网卡以wl开头
  • 后一个字母标识设备结构
    • o:主板上集成的设备的设备索引号
    • s:扩展槽的索引号
    • ps:基于拓扑的命名。如enp2s1,表示PCI总线上第2个总线的第1个插槽的设备索引号
    • x:基于MAC地址的命名

1.2 传统网卡命名方式

传统网卡命名方式:

以太网卡eth[0,1,2,...]

无线网卡wlan[0,1,2,...]

1.3 Redhat7网卡命名机制

  • 规则1:如果从BIOS中能够取到可用的,板载网卡的索引号,则使用这个索引号命名。例如:eno1
  • 规则2:如果从BIOS中能够取到可以用的,网卡所在的PCI-E热插拔插槽的索引号,则使用这个索引号命名。例如:ens1
  • 规则3:如果硬件接口的位置信息可用,则根据此信息进行命名。例如:enp2s0
  • 规则4:根据MAC地址命名,默认不开启。例如:enx2387a1dc56
  • 规则5:上述均不可用时,则使用传统命名机制。

注意:网卡的命名方式有dell的biosdevname和systemd的net.ifnames两种命名规范;在此主要使用systemd的net.ifnames方案。

1.4 回归传统网卡命名

//修改网卡配置文件
[root@zsl ~]# cd /etc/sysconfig/network-scripts/
[root@zsl network-scripts]# mv ifcfg-ens33 ifcfg-eth0
[root@zsl network-scripts]# vim ifcfg-eth0 
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
NAME=eth0                   //此处要把ens33改成eth0
UUID=03be31f5-a3c1-4f8d-88b3-aea6e85c869f
DEVICE=eth0                 //此处要把ens33改成eth0
ONBOOT=yes

//编辑/etc/default/grub配置文件,在以GRUB_CMDLINE_LINUX开头的行内rhgb的前面加上net.ifnames=0 biosdevname=0
[root@zsl ~]# vim /etc/default/grub 
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap net.ifnames=0 biosdevname=0 rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

//为grub2生成其配置文件
[root@zsl ~]# grub2-mkconfig -o /etc/grub2.cfg
Generating grub configuration file ...
done

//重启系统
[root@zsl ~]# reboot 

//仅查看eth0网卡状态
[root@zsl ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.111.130  netmask 255.255.255.0  broadcast 192.168.111.255
        inet6 fe80::4ad1:4789:8669:f655  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:05:d1:25  txqueuelen 1000  (Ethernet)
        RX packets 574  bytes 44153 (43.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 295  bytes 55101 (53.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2、网络管理常用命令

2.1 ifconfig命令

ifconfig命令,查看当前处于活动状态的所有网络接口(网卡)信息,也可以临时修改网络接口(网卡)的配置。

//查看当前处于活动状态的所有网络接口
[root@zsl ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.111.130  netmask 255.255.255.0  broadcast 192.168.111.255
        inet6 fe80::4ad1:4789:8669:f655  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:05:d1:25  txqueuelen 1000  (Ethernet)
        RX packets 60  bytes 7237 (7.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 60  bytes 9111 (8.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

//仅查看eth0网卡状态
[root@zsl ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.111.130  netmask 255.255.255.0  broadcast 192.168.111.255
        inet6 fe80::4ad1:4789:8669:f655  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:05:d1:25  txqueuelen 1000  (Ethernet)
        RX packets 123  bytes 11779 (11.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 91  bytes 13303 (12.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

//查看所有网卡状态信息, 包括禁用和启用
[root@zsl ~]# ifconfig -a
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.111.130  netmask 255.255.255.0  broadcast 192.168.111.255
        inet6 fe80::4ad1:4789:8669:f655  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:05:d1:25  txqueuelen 1000  (Ethernet)
        RX packets 147  bytes 13613 (13.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 105  bytes 15101 (14.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ifconfig输出结果

//第一行网卡基本信息:
<UP,BROADCAST,RUNNING,MULTICAST>
        UP                      表示接口已启用
        BROADCAST               表示支持广播
        RUNNING                 表示接口在工作中
        MULTICAST               表示支持组播
        MTU                     1500(最大传输单元):1500字节

//第二行IPv4地址信息:
inet 192.168.52.156             网卡的IP地址
netmask 255.255.255.0           IP地址掩码
broadcast 192.168.52.255        广播地址。

//第三行IPv6地址信息:
inet6 fe80::dbd:1db2:658d:30ab  网卡的IPv6地址。
prefixlen 64                    IPv6地址掩码长度。
scopeid 0x20<link>              作用域,link表示仅该接口有效。

//第四行mac地址信息:
ether 00:0c:29:ab:61:83         网卡接口的MAC地址。
txqueuelen 1000                 传输队列长度。
(Ethernet)                      接口类型为Ethernet。

//第五,六行接收报文信息:
RX packets 5834                 表示此接口正确接收数据包的个数。
bytes 484471 (473.1 KiB)        表示此接口正确接收数据包的总字节数。
RX errors 0                     接收时,产生错误的数据包的个数
dropped 0                       接收时,丢弃的数据包的个数。
overruns 0                      接收时,由于速度过快而丢失的数据包的个数。
frame 0                         接收时,发生frame错误而丢失的数据包的个数。

//第七,八行发送报文信息:
TX packets 9030                 表示此接口正确发送的数据包的个数。
bytes 1113649 (1.0 MiB)         表示此接口正确发送的数据包的总字节数。
TX errors 0                     发送时,产生错误的数据包的个数。
dropped 0                       发送时,丢弃的数据包的个数。
overruns 0                      发送时,由于速度过快而丢失的数据包的个数。
carrier 0                       发送时,发生carrier错误而丢失的数据包的个数。
collisions 0                    发送时,冲突的数据包的个数。

2.2 ip命令

ip命令,查看所有网络接口的信息,也可以临时修改网卡配置。

//语法:ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT:
    link   网络设备
    addr   协议地址(IPv4/IPv6)
    route  路由表

OPTIONS
-s         查看详细信息

COMMAND
show       显示信息
set        设置
add        添加
del        删除

ip link show

//查看网络接口所有地址
[root@zsl ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:05:d1:25 brd ff:ff:ff:ff:ff:ff

//显示报文统计信息
[root@zsl ~]# ip -s link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes  packets  errors  dropped overrun mcast   
    0          0        0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    0          0        0       0       0       0       
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:05:d1:25 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    33826      431      0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    26569      213      0       0       0       0 

ip link set 网卡名 {up|down}

//启用或禁用网络设备
[root@zsl ~]# ip link set lo down
[root@zsl ~]# ip link set lo up

ip addr show

//查看网络接口协议地址(IPv4/IPv6)信息
[root@zsl ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:05:d1:25 brd ff:ff:ff:ff:ff:ff
    inet 192.168.111.130/24 brd 192.168.111.255 scope global dynamic noprefixroute eth0
       valid_lft 1002sec preferred_lft 1002sec
    inet6 fe80::4ad1:4789:8669:f655/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

//ip addr show输出结果
<BROADCAST,MULTICAST,UP,LOWER_UP>
        BROADCAST                     表示该接口支持广播
        MULTICAST                     表示该接口支持多播
        UP                            表示该网络接口已启用
        LOWER_UP                      表示网络电缆已插入,设备已连接至网络
mtu 1500                              最大传输单位(数据包大小)1500字节
qdisc pfifo_fast                      用于数据包排队
state UP                              网络接口已启用
qlen 1000                             传输长度
link/ether 00:1e:4f:c8:43:fc          接口的MAC(硬件)地址
brd ff:ff:ff:ff:ff:ff                 MAC广播地址
inet 192.168.52.156/24                IPv4地址
brd 192.168.52.255                    IPv4广播地址
scope global                          允许所有人访问此ip地址
dynamic eth0                          地址是动态分配的
valid_lft forever(永久)              IPv4地址的有效使用期限
preferred_lft forever(永久)          IPv4地址的首选生存期
inet6 fe80::dbd:1db2:658d:30ab/64     IPv6地址
scope link                            仅在允许此设备上访问此ip地址
valid_lft forever(永久)              IPv6地址的有效使用期限
preferred_lft forever(永久)          IPv6地址的首选生存期

ip addr add IP地址 dev 网卡名

//给网卡添加IP地址
[root@zsl ~]# ip addr add 192.168.111.131/24 dev eth0
[root@zsl ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:05:d1:25 brd ff:ff:ff:ff:ff:ff
    inet 192.168.111.130/24 brd 192.168.111.255 scope global dynamic noprefixroute eth0
       valid_lft 1707sec preferred_lft 1707sec
    inet 192.168.111.131/24 scope global secondary eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::4ad1:4789:8669:f655/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

ip addr del IP地址 dev 网卡名

//删除网卡的IP地址
[root@zsl ~]# ip addr del 192.168.111.131/24 dev eth0
[root@zsl ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:05:d1:25 brd ff:ff:ff:ff:ff:ff
    inet 192.168.111.130/24 brd 192.168.111.255 scope global dynamic noprefixroute eth0
       valid_lft 1597sec preferred_lft 1597sec
    inet6 fe80::4ad1:4789:8669:f655/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

ip route show

[root@zsl ~]# ip route show
default via 192.168.111.2 dev eth0 proto dhcp metric 100 
192.168.111.0/24 dev eth0 proto kernel scope link src 192.168.111.130 metric 100 

//输出结果
default                   默认路由
via 192.168.52.2          下一跳
dev eth0                  网卡
proto static              路由的协议,kernel是指由内核判断自动设定
metric 100                度量值
scope link                有效范围本地,global全局,site站点

ip route add 目的地址 via 下一跳 dev 网卡名

[root@zsl ~]# ip route add 192.168.1.0/24 via 192.168.111.2 dev eth0
[root@zsl ~]# ip route show
default via 192.168.111.2 dev eth0 proto dhcp metric 100 
192.168.1.0/24 via 192.168.111.2 dev eth0 
192.168.111.0/24 dev eth0 proto kernel scope link src 192.168.111.130 metric 100 

ip route del 目的地址 dev 网卡名

[root@zsl ~]# ip route del 192.168.1.0/24 dev eth0
[root@zsl ~]# ip route show
default via 192.168.111.2 dev eth0 proto dhcp metric 100 
192.168.111.0/24 dev eth0 proto kernel scope link src 192.168.111.130 metric 100 

2.3 route命令

Linux主机之间是使用IP进行通信, 假设A主机和B主机同在一个网段内且网卡都处于激活状态, 则A具备和B直接通信的能力, 但如果A主机和B主机处于两个不同的网段, 则A必须通过路由器才能和B通信, 路由器属于IT设备的基础设施, 每一个网段都应该至少有一个网关

//查看当前路由表
[root@zsl ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         _gateway        0.0.0.0         UG    100    0        0 eth0
192.168.111.0   0.0.0.0         255.255.255.0   U     100    0        0 eth0

//以数字方式显示路由表
[root@zsl ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.111.2   0.0.0.0         UG    100    0        0 eth0
192.168.111.0   0.0.0.0         255.255.255.0   U     100    0        0 eth0

//输出结果
Flags标志说明:
    U         Up表示此路由启动状态
    H         Host,表示此网关为一主机
    G         Gateway,表示此网关为一路由器
    R         Reinstate Route,使用动态路由重新初始化的路由
    D         Dynamically,动态路由
    M         Modified,此路由已被修改
    !         表示此路由当前为关闭状态
Ref           该路由的引用数
Use           该路由被使用的次数
Iface         接口,也就是网卡

route命令添加或删除路由

route命令添加的路由是临时的,重启之后就会失效。

//语法:route add或del [-net或-host] 目的地址 gw 网关地址 dev 网卡名

-net          表示目的地址是一个网段
-host         表示目的地址是一个具体的ip

//增加网段路由
[root@zsl ~]# route add -net 192.168.1.0/24 gw 192.168.111.2 dev eth0
[root@zsl ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.111.2   0.0.0.0         UG    100    0        0 eth0
192.168.1.0     192.168.111.2   255.255.255.0   UG    0      0        0 eth0
192.168.111.0   0.0.0.0         255.255.255.0   U     100    0        0 eth0

//增加主机路由
[root@zsl ~]# route add -host 192.168.2.1 gw 192.168.111.2 dev eth0
[root@zsl ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.111.2   0.0.0.0         UG    100    0        0 eth0
192.168.1.0     192.168.111.2   255.255.255.0   UG    0      0        0 eth0
192.168.2.1     192.168.111.2   255.255.255.255 UGH   0      0        0 eth0
192.168.111.0   0.0.0.0         255.255.255.0   U     100    0        0 eth0

//删除路由
[root@zsl ~]# route del -net 192.168.1.0/24
[root@zsl ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.111.2   0.0.0.0         UG    100    0        0 eth0
192.168.2.1     192.168.111.2   255.255.255.255 UGH   0      0        0 eth0
192.168.111.0   0.0.0.0         255.255.255.0   U     100    0        0 eth0

3、网络相关配置文件

3.1 网卡配置文件

网卡(网络接口),其配置文件的路径是 /etc/sysconfig/network-scripts/ifcfg-INTERFACE_NAME。

[root@zsl ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 
TYPE=Ethernet
BOOTPROTO=dhcp
NAME=eth0
UUID=4fcf5e29-08f5-4014-b4aa-ed1e39350411
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.111.130
NETMASK=255.255.255.0
GATEWAY=192.168.111.2
DNS1=192.168.111.2
DNS2=8.8.8.8

////网卡配置说明
TYPE                        接口类型。常见的接口类型有:Ethernet,bond,team,Bridge。
BOOTPROTO=static            启动的协议,获取IP的方式。可选值有{static|none|dhcp|bootp}。如果要使用静态地址,使用static或none都可以。
NAME="eth0"                 连接名称
UUID                        设备的唯一标识,全局唯一的IEEE机器识别号,可以不写
DEVICE="eth0"               关联的设备名称,要与文件名的后半部"INTERFACE_NAME"保持一致
ONBOOT=yes                  在系统引导时是否自动激活此网络接口,可选值有{ yes | no }
IPADDR=192.168.52.156       固定IP地址
PREFIX=24                   子网掩码,生产环境中不建议用
NETMASK=255.255.255.0       子网掩码
GATEWAY=192.168.52.2        默认网关
DNS1=192.168.52.2           第一个DNS服务器指向
DNS2=8.8.8.8                第二个DNS服务器指向

HWADDR                      硬件地址(mac地址),要与硬件中的地址保持一致,可不写。
DEFROUTE={yes|no}           将接口设定为默认路由{yes|no}
USERCTL={yes|no}            是否允许普通用户控制此接口的启用与禁用
PEERDNS={yes|no}            是否在BOOTPROTO为dhcp时接受由dhcp服务器指定的DNS地址,此项设为yes时获得的DNS地址将直接覆盖至/etc/resolv.conf文件中
NM_CONTROLLED={yes|no}      NM是NetworkManager的简写,NM是由RHEL研发的在RHEL6中取代network脚本来实现网络管理、配置的服务脚本.可选值有{ yes | no },此项是设定此网卡是否接受NM控制。CentOS6建议设为“no”

3.2 路由配置文件

路由配置文件的路径是 /etc/sysconfig/network-scripts/route-INTERFACE_NAME ,该配置文件默认不存在。

//添加格式一:DEST via NEXTHOP
[root@zsl ~]# vi /etc/sysconfig/network-scripts/route-eth0
192.168.1.0/24 via 192.168.1.2
[root@zsl ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.111.2   0.0.0.0         UG    100    0        0 eth0
192.168.1.0     192.168.1.2     255.255.255.0   UG    100    0        0 eth0
192.168.1.2     0.0.0.0         255.255.255.255 UH    100    0        0 eth0
192.168.111.0   0.0.0.0         255.255.255.0   U     100    0        0 eth0
//添加格式二:三行为一条,序号不一样。
[root@zsl ~]# vi /etc/sysconfig/network-scripts/route-eth0
ADDRESS0=192.168.1.0
NETMASK0=255.255.255.0
GATEWAY0=192.168.1.2
[root@zsl ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.111.2   0.0.0.0         UG    100    0        0 eth0
192.168.1.0     192.168.1.2     255.255.255.0   UG    100    0        0 eth0
192.168.1.2     0.0.0.0         255.255.255.255 UH    100    0        0 eth0
192.168.111.0   0.0.0.0         255.255.255.0   U     100    0        0 eth0

3.3 DNS配置文件

DNS服务器配置文件的路径是 /etc/resolv.conf 。

[root@zsl ~]# vim /etc/resolv.conf 
# Generated by NetworkManager
search localdomain
nameserver 192.168.111.2
nameserver 8.8.8.8

4、NetworkManger管理网络

RHEL/CentOS7系统默认使用NetworkManager来提供网络服务,这是一种动态管理网络配置的守护进程,能够让网络设备保持连接状态。

NetworkManager提供的命令行和图形配置工具对网络进行设定, 设定保存的配置文件在/etc/sysconfig/network-scripts目录下, 工具有 nmcli, nmtui, nm-connection-editor

device物理设备, 例如 ens33,enp2s0,virbr0,team0
connection连接设置, 具体网络配置方案

NetworkManger管理连接(connection)的特点:

1.一个物理设备可以配置多种网络连接类型,但是同一时间只能应用其中某一个网络连接类型。

2.针对物理网络接口, 设定不同的网络连接, 在不同的使用环境中激活相应的网络连接,就可以实现网络配置信息的自动切换了

4.1 nmcli命令管理网卡配置信息

//查看设备状态
[root@zsl ~]# nmcli device
DEVICE  TYPE      STATE      CONNECTION 
eth0    ethernet  connected  eth0       
lo      loopback  unmanaged  -- 

//查看指定设备的详细状态
[root@zsl ~]# nmcli device show eth0
GENERAL.DEVICE:                         eth0
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:0C:29:05:D1:25
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     eth0
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnecti>
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.111.130/24
IP4.GATEWAY:                            192.168.111.2
IP4.ROUTE[1]:                           dst = 192.168.111.0/24, nh = 0.0.0.0, mt = 100
IP4.ROUTE[2]:                           dst = 192.168.1.2/32, nh = 0.0.0.0, mt = 100
IP4.ROUTE[3]:                           dst = 0.0.0.0/0, nh = 192.168.111.2, mt = 100
IP4.ROUTE[4]:                           dst = 192.168.1.0/24, nh = 192.168.1.2, mt = 1>
IP4.DNS[1]:                             192.168.111.2
IP4.DNS[2]:                             8.8.8.8
IP4.DOMAIN[1]:                          localdomain
IP6.ADDRESS[1]:                         fe80::20c:29ff:fe05:d125/64
IP6.GATEWAY:                            --

//查看网卡使用的配置文件
[root@zsl ~]# nmcli connection show
NAME  UUID                                  TYPE      DEVICE 
eth0  4fcf5e29-08f5-4014-b4aa-ed1e39350411  ethernet  eth0 

//查看指定网卡配置文件详细信息
[root@zsl ~]# nmcli connection show eth0
connection.id:                          eth0
connection.uuid:                        4fcf5e29-08f5-4014-b4aa-ed1e39350411
connection.stable-id:                   --
connection.type:                        802-3-ethernet
connection.interface-name:              eth0
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.autoconnect-retries:         -1 (default)
connection.multi-connect:               0 (default)
connection.auth-retries:                -1
connection.timestamp:                   1657612045
connection.read-only:                   no
connection.permissions:                 --
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1 (default)
connection.secondaries:                 --
connection.gateway-ping-timeout:        0
.......

4.2 聚合网卡配置

//链路聚合两种类型:bond,team
bond:最多支持2块网卡
team:最多支持8块网卡

bond:负载轮询模式bond0(balance-rr),主备模式bond1(active-backup)

//添加bond类型网卡,设置网卡模式工作于负载轮询模式,创建一个bond0的网卡设备,设置连接名称为con-bond0,设置ipv4地址为192.168.52.140/24,设置网关为192.168.52.2,设置dns为192.168.52.2,选择IP地址获取方式为手动获取,设置连接开机自启
nmcli connection add type bond mode balance-rr ifname bond0 con-name con-bond0 ipv4.addresses 192.168.52.140/24 ipv4.gateway 192.168.52.2 ipv4.dns 192.168.52.2 ipv4.method manual autoconnect yes

//添加一个类型为bond-slave的连接,连接名为bond-slave0,将设备eth0添加至bond0网卡
nmcli connection add type bond-slave con-name bond-slave0 ifname eth0 master bond0

//添加第二个类型为bond-slave的连接,连接名为bond-slave1,将设备eth1添加至bond0网卡
nmcli connection add type bond-slave con-name bond-slave1 ifname eth1 master bond0

//查看bond0状态
cat /proc/net/bonding/bond0

team:主备模式activebackup,负载轮询模式roundrobin,负载均衡loadbalance,广播容错broadcast,lacp 需要交换机支持lacp协议

//添加team类型网卡,创建一个team0的网卡设备,设置连接名称为con-team0,设置网卡模式工作于主备模式,设置ipv4地址为192.168.52.140/24,设置网关为192.168.52.2,设置dns为192.168.52.2,选择IP地址获取方式为手动获取,设置连接开机自启
nmcli connection add type team ifname team0 con-name con-team0 config '{"runner":{"name":"activebackup"}}' ipv4.addresses 192.168.52.140/24 ipv4.gateway 192.168.52.2 ipv4.dns 192.168.52.2 ipv4.method manual autoconnect yes

//添加一个类型为team-slave的连接,连接名为team0-port1,将设备eth0添加至team0网卡
nmcli connection add type team-slave con-name team0-port1 ifname eth0 master team0

//添加一个类型为team-slave的连接,连接名为team0-port2,将设备eth1添加至team0网卡
nmcli connection add type team-slave con-name team0-port2 ifname eth1 master team0

//查看team0网卡工作状态
teamdctl team0 state

5、网络监测工具与故障排查

5.1 ping命令

ping命令的目的在于测试另一台主机是否可达, 如果ping不到某台主机,就说明对方主机已经出现了问题, 但是不排除由于链路中的防火墙、ping被丢弃等原因造成ping不通的情况。

//ping命令常用选项:
    -c 指定ping的次数
    -i 指定ping包的发送间隔
    -w 指定ping的时间
    
//ping 3次后退出
[root@zsl ~]# ping -c 3 192.168.111.2
PING 192.168.111.2 (192.168.111.2) 56(84) bytes of data.
64 bytes from 192.168.111.2: icmp_seq=1 ttl=128 time=0.254 ms
64 bytes from 192.168.111.2: icmp_seq=2 ttl=128 time=0.456 ms
64 bytes from 192.168.111.2: icmp_seq=3 ttl=128 time=0.147 ms

--- 192.168.111.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2040ms
rtt min/avg/max/mdev = 0.147/0.285/0.456/0.129 ms

//每隔五秒ping一次,一共ping3次。
[root@zsl ~]# ping -c 3 -i 5 192.168.111.2
PING 192.168.111.2 (192.168.111.2) 56(84) bytes of data.
64 bytes from 192.168.111.2: icmp_seq=1 ttl=128 time=0.130 ms
64 bytes from 192.168.111.2: icmp_seq=2 ttl=128 time=0.233 ms
64 bytes from 192.168.111.2: icmp_seq=3 ttl=128 time=0.278 ms

--- 192.168.111.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 10439ms
rtt min/avg/max/mdev = 0.130/0.213/0.278/0.064 ms

//一共ping3秒,3秒后退出
[root@zsl ~]# ping -w 3 192.168.111.2
PING 192.168.111.2 (192.168.111.2) 56(84) bytes of data.
64 bytes from 192.168.111.2: icmp_seq=1 ttl=128 time=0.156 ms
64 bytes from 192.168.111.2: icmp_seq=2 ttl=128 time=0.193 ms
64 bytes from 192.168.111.2: icmp_seq=3 ttl=128 time=0.209 ms

--- 192.168.111.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2077ms
rtt min/avg/max/mdev = 0.156/0.186/0.209/0.022 ms

5.2 host与nslookup

host和nslookup命令用于查询DNS记录。

//host和nslookup命令需要安装
yum -y install bind-utils

//使用host命令查询看DNS解析记录
[root@zsl ~]# host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 36.152.44.95
www.a.shifen.com has address 36.152.44.96
www.a.shifen.com has IPv6 address ::1

//使用nslookup命令查询看DNS解析记录,nslookup命令可以看到查询DNS解析的流程
[root@zsl ~]# nslookup www.baidu.com
Server:		192.168.111.2
Address:	192.168.111.2#53

Non-authoritative answer:
www.baidu.com	canonical name = www.a.shifen.com.
Name:	www.a.shifen.com
Address: 36.152.44.96
Name:	www.a.shifen.com
Address: 36.152.44.95
Name:	www.a.shifen.com
Address: ::1

5.3 netstat命令

netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

//语法:netstat [options]
//常用的options:
    -a:所有连线中的Socket
    -r:显示路由表信息
    -n:数字格式
    -l:listen状态的连接
    -t:tcp协议连接
    -u:udp协议连接
    -p:相关的程序及pid
    
//显示路由表
[root@zsl ~]# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         _gateway        0.0.0.0         UG        0 0          0 ens33
192.168.111.0   0.0.0.0         255.255.255.0   U         0 0          0 ens33

//以数字方式显示路由表
[root@zsl ~]# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.111.2   0.0.0.0         UG        0 0          0 ens33
192.168.111.0   0.0.0.0         255.255.255.0   U         0 0          0 ens33

//显示建立的tcp连接
[root@zsl ~]# netstat -t
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0     36 zsl:ssh                 192.168.:predatar-comms ESTABLISHED
tcp        0      0 zsl:ssh                 192.168.111:dberegister ESTABLISHED
tcp        0      0 zsl:ssh                 192.168.11:gridgen-elmd ESTABLISHED

//显示udp连接
[root@zsl ~]# netstat -u
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
udp        0      0 zsl:bootpc              192.168.111.254:bootps  ESTABLISHED

//显示监听状态的连接
[root@zsl ~]# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN     
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
raw6       0      0 [::]:ipv6-icmp          [::]:*                  7   

//显示监听指定的套接字的进程的进程号
[root@zsl ~]# netstat -p
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0     36 zsl:ssh                 192.168.:predatar-comms ESTABLISHED 12081/sshd: root [p 
tcp        0      0 zsl:ssh                 192.168.111:dberegister ESTABLISHED 11463/sshd: root [p 
tcp        0      0 zsl:ssh                 192.168.11:gridgen-elmd ESTABLISHED 1457/sshd: root [pr 
udp        0      0 zsl:bootpc              192.168.111.254:bootps  ESTABLISHED 906/NetworkManager 

//显示所有状态的连接
[root@zsl ~]# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN     
tcp        0     36 zsl:ssh                 192.168.:predatar-comms ESTABLISHED
tcp        0      0 zsl:ssh                 192.168.111:dberegister ESTABLISHED
tcp        0      0 zsl:ssh                 192.168.11:gridgen-elmd ESTABLISHED
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
udp        0      0 zsl:bootpc              192.168.111.254:bootps  ESTABLISHED
raw6       0      0 [::]:ipv6-icmp          [::]:*                  7          

//常用组合
			-anltup
			
[root@zsl ~]# netstat -anltup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      923/sshd            
tcp        0     36 192.168.111.130:22      192.168.111.1:1753      ESTABLISHED 12081/sshd: root [p 
tcp        0      0 192.168.111.130:22      192.168.111.1:1479      ESTABLISHED 11463/sshd: root [p 
tcp        0      0 192.168.111.130:22      192.168.111.1:1542      ESTABLISHED 1457/sshd: root [pr 
tcp6       0      0 :::22                   :::*                    LISTEN      923/sshd            
udp        0      0 192.168.111.130:68      192.168.111.254:67      ESTABLISHED 906/NetworkManager 

5.4 ss命令

ss是一种网络状态查看工具,取代netstat。

//语法:ss [options]
//常用的options:
    -a:所有
    -n:数字格式
    -l:listen状态的连接
    -t:tcp协议相关
    -u:udp协议相关
    -p:相关的程序及pid
 
//常见的state:
    //tcp finite state machine:有限状态机
        LISTENING:监听
        ESTABLISHED:已建立的连接
 
//常用组合:
[root@zsl ~]# ss -tan
State    Recv-Q   Send-Q       Local Address:Port        Peer Address:Port   Process   
LISTEN   0        128                0.0.0.0:22               0.0.0.0:*                
ESTAB    0        36         192.168.111.130:22         192.168.111.1:1753             
ESTAB    0        0          192.168.111.130:22         192.168.111.1:1479             
ESTAB    0        0          192.168.111.130:22         192.168.111.1:1542             
LISTEN   0        128                   [::]:22                  [::]:*      

[root@zsl ~]# ss -tanl
State      Recv-Q     Send-Q         Local Address:Port         Peer Address:Port    Process    
LISTEN     0          128                  0.0.0.0:22                0.0.0.0:*                  
LISTEN     0          128                     [::]:22                   [::]:*        

[root@zsl ~]# ss -antlp
State   Recv-Q  Send-Q   Local Address:Port   Peer Address:Port Process                         
LISTEN  0       128            0.0.0.0:22          0.0.0.0:*     users:(("sshd",pid=923,fd=5))  
LISTEN  0       128               [::]:22             [::]:*     users:(("sshd",pid=923,fd=7)) 

[root@zsl ~]# ss -anu
State   Recv-Q   Send-Q               Local Address:Port          Peer Address:Port   Process   
ESTAB   0        0            192.168.111.130%ens33:68         192.168.111.254:67 


//常见端口
http    80/tcp 
https   443/tcp 
ssh     22/tcp 
ftp     20,21/tcp
mysql   3306/tcp
rsync   873/rsync
redis   6379/tcp

6、网络故障排查

  • 网络故障分为硬件/软件故障
    • 网卡损坏
    • 链路故障
    • 网卡驱动不兼容
  • 网络排查思路
    • ping本地回环口, 确定本机TCP/IP协议栈是否正常
    • ping本机IP地址, 确定本地设备以及驱动是否正常
    • ping同网段主机, 确定二层网络是否正常工作
    • ping网关地址, 确定本地与网络是否正常
    • ping公网地址, 确定本地路由是否正常
    • ping公网域名, 确定DNS客户端是否正常