1.网络基础概述

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

Linux7网卡命名规则

传统的rhel系统以eth0 eth1名来命名网卡, 在rhel7系统开始使用新的命名规则:
基于固件、设备结构、设备类型

1.由两个字母开头标示固件

以太网网卡以 en 开头
无线网卡以 wl 开头

2.设备结构

o 表示板载网卡(on-board)
s 热插拔结构(hotplug slot)
p PCI插槽位置

2.网络接口信息查看

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

//查看当前处于活动状态的网络接口
[root@liyanzhao ~]# ifconfig
//仅查看eth0网卡状态信息
[root@liyanzhao ~]# ifconfig eth0  
//查看所有网卡状态信息, 包括禁用和启用
[root@liyanzhao ~]# 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@liyanzhao ~]# 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@liyanzhao ~]# ip -s link show eth0
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@liyanzhao ~]# nmcli device
DEVICE      TYPE      STATE      CONNECTION
ens32       ethernet  connected   ens32
lo          loopback  unmanaged  --
//指定查看设备的详细状态
[root@liyanzhao ~]# nmcli dev show ens32
//查看连接状态
[root@liyanzhao ~]# 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@liyanzhao ~]# nmcli con show --active
//查看指定ID连接的详细情况
[root@liyanzhao ~]# 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@liyanzhao ~]# nmcli connection show
NAME         UUID                                  TYPE            DEVICE
eht1-static  6fdebe6e-5ef0-4a05-8235-57e317fdada0  802-3-ethernet  eth0

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

//1.取消开机自动激活网络
[root@liyanzhao ~]# nmcli connection modify eht1-static \
autoconnect no
//2.修改连接的dns
[root@liyanzhao ~]# nmcli connection modify eht1-static \
ipv4.dns 8.8.8.8
//3.给连接再增加dns,有些设定值通过+/-可以增加或则移除设定
[root@liyanzhao ~]# nmcli connection modify eht1-static \
+ipv4.dns 8.8.8.8
//4.替换连接的静态IP和默认网关
[root@liyanzhao ~]# nmcli connection modify eht1-static \
ipv4.addresses 192.168.69.252/24 ipv4.gateway 192.168.69.22
//5.添加一个没有默认网关的IP
[root@liyanzhao ~]# 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@liyanzhao ~]# nmcli connection delete eht1-static
// 图形工具配置 nm-connection-editor

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

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

//修改eht1-static配置文件
[root@liyanzhao ~]# 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@liyanzhao ~]# nmcli connection reload
[root@liyanzhao ~]# 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@liyanzhao ~]# systemctl disable NetworkManager
[root@liyanzhao ~]# systemctl stop NetworkManager

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

//复制配置eth0配置文件为eth1
[root@liyanzhao ~]# 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@liyanzhao ~]# 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@liyanzhao ~]# route add -net 192.168.90.0/24 gw 192.168.56.254
[root@liyanzhao ~]# route add -net 0.0.0.0/0 gw 192.168.56.254
//删除网段路由
[root@liyanzhao ~]# route del -net 192.168.90.0/24
[root@liyanzhao ~]# route del -net 0.0.0.0/0 gw 192.168.56.254
//增加主机路由
[root@liyanzhao ~]# route add -host 192.168.70.1 gw 192.168.56.254
//删除主机路由
[root@liyanzhao ~]# route del -host 192.168.70.1/32
//查看当前路由表
route -n
如果重启, 配置信息就不存在, 必须将这种配置信息写到相关的配置文件中才能永久保存,比如网卡配置文件的GATEWAY

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

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

公有云: 地区-项目-业务-服务-节点-地址
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@liyanzhao ~]# hostname “test”
rhel7系统建议使用hostnamectl修改和查看主机名
//设定永久名称
[root@liyanzhao ~]# hostnamectl set-hostname nginx.node1.liyanzhao.com
//永久修改主机名会修改/etc/hostname文件
[root@liyanzhao ~]# cat /etc/hostname
nginx.node1.liyanzhao.com
//检查状态信息
[root@liyanzhao ~]# hostnamectl
Static hostname: nginx.node1.liyanzhao.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

2.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@liyanzhao ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search node1.sunrisenan.com
nameserver 211.161.122.200

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

ping命令的目的在于测试另一台主机是否可达, 如果png不到某台主机,就说明对方主机已经出现了问题, 但是不排除由于链路中的防火墙、ping被丢弃等原因造成ping不通的情况
-c 指定ping的次数
-i 指定ping包的发送间隔
-w 如果ping没有回应, 则在指定超时时间后退出

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

[root@liyanzhao~]# host sunrisenan.com

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

[root@liyanzhao~]# traceroute liyanzhao.com
traceroute to liyanzhao.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@liyanzhao~]# ss -tnl
[root@liyanzhao~]# ss -tnl |grep :80 
[root@liyanzhao~]# ss -tnl |grep :21 
[root@liyanzhao~]# ss -atn
[root@liyanzhao~]# 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@liyanzhao~]# vim /etc/sysconfig/grub
GRUB_CMDLINE_LINUX="...net.ifnames=0 biosdevname=0 quiet"
[root@liyanzhao~]# grub2-mkconfig -o /boot/grub2/grub.cfg

重启系统生效

[root@liyanzhao~]# reboot

默认centos7不支持ifconfig命令安装net-tools包

[root@liyanzhao~]# yum install net-tools
[root@liyanzhao~]# 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

文档更新时间: 2019-07-11 13:07   作者:李延召