01.网络基础管理

徐亮伟, 江湖人称标杆徐。多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型电商运维工作。
个人博客"徐亮伟架构师之路"累计受益数万人。
笔者Q:552408925、572891887
架构师群:471443208

1.网络基础概述

Linux作为一个成熟的操作系统, 在服务器市场、嵌入式设备等方面都取得了巨大的成功, 在网络上的应用也越来越多。 所以掌握如何在Linux系统中配置、管理网络就变得非常必要。

Linux7网卡命名规则

传统的rhel系统以eth0 eth1名来命名网卡, 在rhel7系统开始使用新的命名规则:

基于固件、设备结构、设备类型

  • 1.由两个字母开头标示固件
    • 以太网网卡以 en 开头
    • 无线网卡以 wl 开头
  • 2.设备结构
    • o 表示板载网卡(on-board)
    • s 热插拔结构(hotplug slot)
    • p PCI插槽位置

2.网络接口信息查看

1.查看网络接口配置信息

//查看当前处于活动状态的网络接口
[root@xuliangwei ~]# ifconfig

//仅查看eth0网卡状态信息
[root@xuliangwei ~]# ifconfig eth0  

//查看所有网卡状态信息, 包括禁用和启用
[root@xuliangwei ~]# ifconfig -a
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.69.112  netmask 255.255.255.0  broadcast 192.168.69.255
        inet6 fe80::bd23:46cf:a12e:c0a1  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:34:92:fc  txqueuelen 1000  (Ethernet)
        RX packets 73137  bytes 17214613 (16.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 45428  bytes 13141869 (12.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

//网卡配置信息含义如下:

UP: 网卡处于活动状态
BROADCAST: 支持广播
RUNNING: 网线已接入
MULTICAST: 支持组播
MTU: 最大传输单元(字节),即此接口一次所能传输的最大封包

inet: 显示IPv4地址行
inet6: 显示IPv6地址行
link/enther: 指设备硬件(MAC)地址
txqueuelen: 传输缓存区长度大小
RX packets: 接收的数据包
TX packets: 发送的数据包
errors: 总的收包的错误数量
dropped: 由于各种原因, 导致拷贝在内存过程中被丢弃
collisions: 网络信号冲突情况, 值不为0则可能存在网络故障


//其他查看ip指令
[root@xuliangwei ~]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,①UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    ②link/ether 00:0c:29:34:92:fc brd ff:ff:ff:ff:ff:ff
    ③inet 192.168.69.112/24 brd④ 192.168.69.255 scope global ens32
       valid_lft forever preferred_lft forever
    ⑤inet6 fe80::bd23:46cf:a12e:c0a1/64 scope link
       valid_lft forever preferred_lft forever
       
①: 活动接口为UP
②: Link行指定设备的MAC地址
③: inet行显示IPv4地址和前缀
④: 广播地址、作用域和设备名称在此行
⑤: inet6行显示IPv6信息

//ip命令也可用于显示关于网络性能的统计信息, 比如: 发送和传送的数据包、错误、丢弃
[root@xuliangwei ~]# ip -s link show eth0
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
    link/ether 14:18:77:35:0d:f5 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    518292951  4716385  0       0       0       709280
    TX: bytes  packets  errors  dropped carrier collsns
    23029861512 15391427 0       0       0       0

3.NetworkManager管理网络

RHEL/CentOS7系统默认使用NetworkManager来提供网络服务,这是一种动态管理网络配置的守护进程,能够让网络设备保持连接状态。
NetworkManager提供的命令行和图形配置工具对网络进行设定, 设定保存的配置文件在/etc/sysconfig/network-scripts目录下, 工具有 nmcli, nmtui, nm-connect-editor

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

1.不同的网络连接配置可以应用到相同的物理设备,但物理设备同一时间只能应用其中某个网络连接
2.针对物理网络接口, 设定不同的网络连接, 在不同的使用环境中激活相应的网络连接,就可以实现网络配置信息的自动切换了

使用nmcli命令查看设备以及连接情况

//查看设备状态
[root@xuliangwei ~]# nmcli device
DEVICE      TYPE      STATE      CONNECTION
ens32       ethernet  connected   ens32
lo          loopback  unmanaged  --
//指定查看设备的详细状态
[root@xuliangwei ~]# nmcli dev show ens32


//查看连接状态
[root@xuliangwei ~]# nmcli connection  
NAME    UUID                                  TYPE            DEVICE
ens32   a4319b27-80dc-4d63-a693-2927ea1018e7  802-3-ethernet  ens32
virbr0  64dbcb5f-b63a-4c88-8d1c-f93ead70a1b8  bridge          virbr0
//所有活动的连接
[root@xuliangwei ~]# nmcli con show --active
//查看指定ID连接的详细情况
[root@xuliangwei ~]# nmcli con show "ens32"

使用nmcli创建新的连接

//定一个名为dhcp的连接, 配置DHCP地址
//实质是添加/etc/sysconfig/network-scripts/ifcfg-ens33-dhcp配置文件
[root@linux-node1 ~]# nmcli connection add \
con-name ens33-dhcp ifname eth0 autoconnect yes \
type ethernet ipv4.method auto
[root@linux-node1 ~]# nmcli connection
NAME        UUID                                  TYPE            DEVICE
eth0        000b9696-19d5-4ade-bca6-7ee0266ddcf0  802-3-ethernet  eth0
ens33-dhcp  33bcddf0-9cc4-47fe-9acf-ede449757d8a  802-3-ethernet  --



//新增一个静态地址的连接, 配置IP、掩码、网关等
静态地址添加流程
1.添加一个连接的配置
2.给连接指定一个名称
3.连接配置绑定物理网卡
4.网卡的类型,网卡开机启动
5.网卡通过什么途径获取地址(静态、dhcp)
6.配置对应的IP地址、掩码、网关、DNS
[root@linux-node1 ~]# nmcli connection add con-name eht1-static ifname eth1 \
type ethernet autoconnect yes \
ipv4.method manual \
ipv4.addresses 192.168.56.100/24 \
ipv4.gateway 192.168.56.2 \
ipv4.dns 192.168.56.2 \
+ipv4.dns 8.8.8.8

//激活指定的连接名为eht1-static的连接
[root@linux-node1 ~]# nmcli connection up eht1-static
[root@xuliangwei ~]# nmcli connection show
NAME         UUID                                  TYPE            DEVICE
eht1-static  6fdebe6e-5ef0-4a05-8235-57e317fdada0  802-3-ethernet  eth0

使用nmcli修改已有的网络连接

//1.取消开机自动激活网络
[root@xuliangwei ~]# nmcli connection modify eht1-static \
autoconnect no

//2.修改连接的dns
[root@xuliangwei ~]# nmcli connection modify eht1-static \
ipv4.dns 8.8.8.8

//3.给连接再增加dns,有些设定值通过+/-可以增加或则移除设定
[root@xuliangwei ~]# nmcli connection modify eht1-static \
+ipv4.dns 8.8.8.8

//4.替换连接的静态IP和默认网关
[root@xuliangwei ~]# nmcli connection modify eht1-static \
ipv4.addresses 192.168.69.252/24 ipv4.gateway 192.168.69.22

//5.添加一个没有默认网关的IP
[root@xuliangwei ~]# nmcli connection modify eht1-static \
+ipv4.addresses 192.168.70.12/24 

//6.修改完毕,nmlci仅仅修改并保存了配置,要激活更改,需要重激活连接
[root@linux-node1 ~]# nmcli connection down eht1-static && \
nmcli connection up eht1-static


//删除自建的connection
[root@xuliangwei ~]# nmcli connection delete eht1-static


// 图形工具配置 nm-connection-editor

2.使用nmcli管理网络/etc/sysconfig/network-scripts/配置文件

1.新增物理网卡
2.拷贝配置文件(可以和设备名称一致)
3.修改配置,UUID、连接名称、设备名称、IP地址
4.重新加载网络配置
5.启用连接,并检查

//修改eht1-static配置文件
[root@xuliangwei ~]# vim /etc/sysconfig/network-scripts/ifcfg-eht1-static
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=192.168.69.232
PREFIX=24
GATEWAY=192.168.69.1
DNS1=211.161.122.200
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens32-staic
UUID=6fdebe6e-5ef0-4a05-8235-57e317fdada0
DEVICE=ens32
ONBOOT=yes

//手工编辑正在使用的配置文件,需要重载配置,然后重启
[root@xuliangwei ~]# nmcli connection reload
[root@xuliangwei ~]# nmcli connection down eht1-static && \
nmcli connection down eht1-static

4.使用原生Network管理网络

CentOS/RHEL的网络配置文件默认目录为/etc/sysconfig/network-scripts
默认第一块物理网卡配置文件为ifcfg-eth0, 如果有第二块物理网卡, 配置文件则为ifcfg-eth1以此类推。 注意: 如果新增物理网卡没有配置文件,可选择复制系统默认的进行修改。

1.删除NetworkManger建立连接, 同时停止NetworkManger服务

[root@xuliangwei ~]# systemctl disable NetworkManager
[root@xuliangwei ~]# systemctl stop NetworkManager

2.添加一块物理网卡, 然后新增网络连接配置文件

//复制配置eth0配置文件为eth1
[root@xuliangwei ~]# cp /etc/sysconfig/network-scripts/{ifcfg-eth0,ifcfg-eth1}

//编辑网卡配置文件
[root@nginx ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
NAME=eth1
DEVICE=eth1
ONBOOT=yes
IPADDR=192.168.56.12
NETMASK=255.255.255.0
GATEWAY=192.168.56.2
DNS1=192.168.56.2

//重启network网络服务加载网络
[root@xuliangwei ~]# systemctl restart network.service


//选项               描述
BOOTPROTO=none          //获取地址方式[none|dhcp|static]
IPADDR=192.168.56.12    //固定IP地址
PREFIX=24               //掩码
GATEWAY=192.168.56.2    //网关
DNS1=192.168.56.2       //域名解析
DEVICE=eth1             //设备名称  
NAME="eth1"             //连接名称
ONBOOT=yes              //开机自启动
DEFROUTE=yes            //将接口设定为默认路由[yes|no]
USERCTL=yes             //允许非root用户管理接口[yes|no]

5.Route设置路由以及网关

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

//增加网段路由
[root@xuliangwei ~]# route add -net 192.168.90.0/24 gw 192.168.56.254
[root@xuliangwei ~]# route add -net 0.0.0.0/0 gw 192.168.56.254
//删除网段路由
[root@xuliangwei ~]# route del -net 192.168.90.0/24
[root@xuliangwei ~]# route del -net 0.0.0.0/0 gw 192.168.56.254

//增加主机路由
[root@xuliangwei ~]# route add -host 192.168.70.1 gw 192.168.56.254
//删除主机路由
[root@xuliangwei ~]# route del -host 192.168.70.1/32

//查看当前路由表
route -n

如果重启, 配置信息就不存在, 必须将这种配置信息写到相关的配置文件中才能永久保存,比如网卡配置文件的GATEWAY

5.主机名设定与名称解析服务

生产环境中必须配置主机名,同时主机名也需要遵循一定的规范, 比如:

公有云: 地区-项目-业务-服务-节点-地址
wh-shop-register-nginx-node1-192.168.56.13
wh-med-pay-mysql-master01-192.168.56.11
wh-med-pay-mysql-slave01-192.168.56.12

1.主机名查看与配置

//hostname命令可以查看主机名, 也可以用于临时修改主机名
[root@xuliangwei ~]# hostname "test"


rhel7系统建议使用hostnamectl修改和查看主机名
//设定永久名称
[root@xuliangwei ~]# hostnamectl set-hostname nginx.node1.xuliangwei.com
//永久修改主机名会修改/etc/hostname文件
[root@xuliangwei ~]# cat /etc/hostname
nginx.node1.xuliangwei.com

//检查状态信息
[root@xuliangwei ~]# hostnamectl
   Static hostname: nginx.node1.xuliangwei.com
         Icon name: computer-vm
           Chassis: vm
        Machine ID: af0cdce735c041eab3a8df17dd08c112
           Boot ID: 72d7e90f0edb4880978eb18e73d4764c
    Virtualization: vmware
  Operating System: Red Hat Enterprise Linux Server 7.4 (Maipo)
       CPE OS Name: cpe:/o:redhat:enterprise_linux:7.4:GA:server
            Kernel: Linux 3.10.0-693.el7.x86_64
      Architecture: x86-64

DNS客户端配置

/etc/hosts文件, 加快域名解析, 方便小型局域网用户使用内部设备

假设公司有A B两台主机, B主机添加的IP为192.168.69.12,为了方便访问B主机, 可以在A主机的/etc/hosts文件中添加一条记录

192.168.69.12 hostB

完成后在A主机上使用ping命令测试到B主机的连通性, 如果没有添加记录, 将会显示unknown host hostB的错误

使用hosts文件仅能为有限的主机记录, 无法将所有已知的主机名记录到hosts文件中, 因此当今几乎所有的主机都在使用DNS来解析地址, DNS是全互联网上主机名及其IP地址对应关系的数据库, 配置文件/etc/resolv.conf

[root@xuliangwei ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search node1.xuliangwei.com
nameserver 211.161.122.200

6.网络检测工具与故障排查

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

-c 指定ping的次数
-i 指定ping包的发送间隔
-w 如果ping没有回应, 则在指定超时时间后退出


hostn/slookup命令是用来查询DNS记录的,如果使用域名作为host的参数, 命令返回该域名的IP

[root@xuliangwei~]# host xuliangwei.com

traceroute命令是用来路由跟踪, 检测网络故障出现在ISP运营商或是对端服务无法响应

[root@xuliangwei~]# traceroute xuliangwei.com
traceroute to xuliangwei.com (118.190.174.159), 64 hops max, 52 byte packets
 1  192.168.160.2 (192.168.160.2)  1.498 ms  1.322 ms  1.272 ms
 2  172.16.1.1 (172.16.1.1)  1.449 ms  1.259 ms  1.150 ms
 3  211.161.160.1 (211.161.160.1)  2.420 ms  3.109 ms  2.672 ms
 4  * * *
 5  * * * 

ss/netstat命令查看网络连接状态

-t tcp协议的连接
-a 所有状态的连接
-n 数字化输出
-u upd协议的连接
-l 处于listen状态的连接
-p 输出相应进程的名字

1. Show TCP sockets (LISTEN)
[root@xuliangwei~]# ss -tnl
[root@xuliangwei~]# ss -tnl |grep :80 
[root@xuliangwei~]# ss -tnl |grep :21 
[root@xuliangwei~]# ss -atn
[root@xuliangwei~]# ss -atn |grep :22

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

网络故障排查

  • 网络故障分为硬件\软件故障
    • 网卡损坏
    • 链路故障
    • 网卡驱动不兼容
  • 网络排查思路
    • 1.ping本地回环口, 确定本机TCP/IP协议栈是否正常
    • 2.ping本机IP地址, 确定本地设备以及驱动是否正常
    • 3.ping同网段主机, 确定二层网络是否正常工作
    • 4.ping网关地址, 确定本地与网络是否正常
    • 5.ping公网地址, 确定本地路由是否正常
    • 6.ping公网域名, 确定DNS客户端是否正常
  • 服务故障排查思路
    • 1.使用telnet检测端口是否开放
    • 2.检查服务端防火墙以及SElinux
    • 3.检查相应的权限是否配置正常
    • 4.检查日志是否有异常
    • 5.检查完毕后持续测试

建议: 所有的排查思路都从OSI七层模型由下往上逐一进行排查(学会看日志)

7.Linux7修改网卡为eth0

1.已安装Linux7系列操作系统, 修改网卡命名规则为eth0 eth1

//修改网卡配置文件
[root@linux-node2~]# cd /etc/sysconfig/network-scripts/
[root@linux-node2network-scripts]# mv ifcfg-eno16777728 ifcfg-eth0
[root@linux-node2 network-scripts]# vim ifcfg-eth0
NAME=eth0
DEVICE=eth0

//GRUB添加kernel参数
[root@xuliangwei~]# vim /etc/sysconfig/grub
GRUB_CMDLINE_LINUX="...net.ifnames=0 biosdevname=0 quiet"
[root@xuliangwei~]# grub2-mkconfig -o /boot/grub2/grub.cfg

//重启系统生效
[root@xuliangwei~]# reboot

//默认centos7不支持ifconfig命令安装net-tools包
[root@xuliangwei~]# yum install net-tools
[root@xuliangwei~]# ifconfig eth0  #在次查看网卡信息
eth0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 192.168.56.12  netmask 255.255.255.0  broadcast 192.168.56.255
inet6 fe80::20c:29ff:fe5c:7bb1  prefixlen 64
scopeid 0x20<link>
ether 00:0c:29:5c:7b:b1  txqueuelen 1000  (Ethernet)
    RX packets 152  bytes 14503 (14.1 KiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 98  bytes 14402 (14.0 KiB)
    TX errors 0  dropped 0 overruns 0  carrier 0    collisions 0

2.在安装系统选择Install Centos7按下Tab设定kernel内核参数

增加内核参数: net.ifnames=0 biosdevname=0

检查是否修改成功