Linux-网络管理
一. rhel8与7的区别
在rhel7上,同时支持network.service和NetworkManager.service(简称NM)。默认情况下,这2个服务都有开启,但许多人都会将NM禁用掉。
在rhel8上,已废弃network.service,因此只能通过NM进行网络配置,包括动态ip和静态ip。换言之,在rhel8上,必须开启NM,否则无法使用网络。
二. NetworkManager介绍
2.1 NM能管理各种网络
有线网卡、无线网卡
动态ip、静态ip
以太网、非以太网
物理网卡、虚拟网卡
2.2 使用方法
▷ nmcli:命令行。这是最常用的工具,本文将详细讲解该工具使用。
▷ nmtui:在shell终端开启文本图形界面。示意图见本文最后的Tips
▷ Freedesktop applet:如GNOME上自带的网络管理工具
▷ cockpit:redhat自带的基于web图形界面的"驾驶舱"工具,具有dashborad和基础管理功能。
2.3 为什么要用NM
▷ 工具齐全:命令行、文本界面、图形界面、web
▷ 广纳天地:纳管各种网络,有线、无线、物理、虚拟
▷ 参数丰富:多达200多项配置参数(包括ethtool参数)
▷ 一统江湖:RedHat系、Suse系、Debian/Ubuntu系,均支持
▷ 大势所趋:下一个大版本的rhel只能通过NM管理网络
三. nmcli使用方法
nmcli使用方法非常类似linux ip命令、cisco交换机命令,并且支持tab补全(详见本文最后的Tips),也可在命令最后通过-h、–help、help查看帮助。在nmcli中有2个命令最为常用:
➡ nmcli connection
译作连接,可理解为配置文件,相当于ifcfg-ethX。可以简写为nmcli c
➡ nmcli device
译作设备,可理解为实际存在的网卡(包括物理网卡和虚拟网卡)。可以简写为nmcli d
在NM里,有2个维度:连接(connection)和设备(device),这是多对一的关系。想给某个网卡配ip,首先NM要能纳管这个网卡。设备里存在的网卡(即nmcli d可以看到的),就是NM纳管的。接着,可以为一个设备配置多个连接(即nmcli c可以看到的),每个连接可以理解为一个ifcfg配置文件。同一时刻,一个设备只能有一个连接活跃。可以通过nmcli c up切换连接。
connection有2种状态:
▷ 活跃(带颜色字体):表示当前该connection生效
▷ 非活跃(正常字体):表示当前该connection不生效
device有4种常见状态:
▷ connected:已被NM纳管,并且当前有活跃的connection
▷ disconnected:已被NM纳管,但是当前没有活跃的connection
▷ unmanaged:未被NM纳管
▷ unavailable:不可用,NM无法纳管,通常出现于网卡link为down的时候(比如ip link set ethX down)
四. nmcli常用命令
4.1 对connection操作
- nmcli 查看ip
- 创建connection
# connection名:连接名,即文件/etc/sysconfig/network-scripts/ifcfg-ens192名
# device名:给哪个网口创建连接
# ip地址:连接的ip地址
# 网关地址:连接的网关地址
# ipv4.method:有auto和manual两个值,auto是dhcp方式;manual是静态指定方式
nmcli c add type ethernet con-name connection名 ifname device名 ipv4.addr ip地址/24 ipv4.gateway 网关地址 ipv4.method manual
- 非交互修改connection的ip地址
# ens192是connection名
nmcli c modify ens192 ipv4.addresses '192.168.30.33/24'
-
启用connection
nmcli c up ens192 -
停用connection
nmcli c down ens192 -
删除connection
nmcli c delete ens192 -
查看connection
nmcli c
nmcli c show
nmcli c show ens192 -
立刻重新加载某个connection
nmcli c up ens192
nmcli d reapply ens192
nmcli d connect ens192
-
修改connection的ip地址
nmcli c modify ens192 ipv4.addresses 192.168.30.4/24 -
修改connection的名字
nmcli c modify ens192 con-name eth0 -
创建一个connection,给多个ip和dns
nmcli c add type ethernet con-name ens11 ifname ens192 ipv4.addresses '192.168.30.111/24,192.168.20.112/24,192.168.30.113/24' ipv4.gateway 192.168.30.1 ipv4.method manual ipv4.dns '8.8.8.8,192.168.1.1'
- 修改一个connection,给多个ip
nmcli c modify eth0 ipv4.addresses '192.168.30.2/24,192.168.30.3/24,192.168.30.4/24,192.168.30.5/24'
- 给一个connection添加ip
nmcli c modify 连接名 +ipv4.addresses 192.168.30.55/24 - 给一个connection添加dns
nmcli c modify 连接名 +ipv4.dns 114.114.114.114
4.2 对device操作
-
查看device
nmcli d
nmcli d show
nmcli d show ens192 -
用NM管理我看
nmcli d connect 设备名
由NM对指定网卡进行管理,同时刷新该网卡对应的活跃connection(如果之前有修改过connection配置);如果有connection但是都处于非活跃状态,则自动选择一个connection并将其活跃;如果没有connection,则自动生成一个并将其活跃。
- 让NM不管理网卡
nmcli d disconnect 设备名
让NM暂时不管理指定网卡,此操作不会变更实际网卡的link状态,只会使对应的connection变成非活跃。若重启系统则又会自动connect。另外,如果手工将该网卡的connection全部删掉,该网卡状态也会自动变为disconnected。
- 刷新网卡配置
nmcli d reapply 设备名
专门用于刷新connection,前提是网卡的device处于connected状态,否则会报错。
五. 一个网卡配多ip(多子connection)
写多个带冒号的子配置文件
六 NetworkManager提供的三个工具
nmcli:
nmtui:
nm-connet-editor:
七 3种网络配置方法
在讲3种配置方法前,需要先明白ifcfg和NM connection的关联:虽然network.service被废弃了,但是redhat为了兼容传统的ifcfg,通过NM进行网络配置时候,会自动将connection同步到ifcfg配置文件中。也可以通过nmcli c reload或者nmcli c load /etc/sysconfig/network-scripts/ifcfg-ethX的方式来让NM读取ifcfg配置文件到connection中。因此ifcfg和connection是一对一的关系,另外上面有提到,connection和device是多对一的关系。
在rhel8上,有3种方法进行网络配置
▷ 1. 手工配置ifcfg,通过NM来生效
▷ 2. 通过NM自带工具配ip,比如nmcli
▷ 3. 手工配置ifcfg,通过传统network.service来生效
八. 修改主机名
- 方式一:修改/etc/hostname文件, 永久生效,修改完需要重启
- 方式二:hostnamectl set-hostname wo.ni.ta, 不需要重启立刻生效,永久生效
九. 配置域名解析
9.1 hosts文件
/etc/hosts
9.2 resolv.conf
/etc/resolv.conf
十. 网络测试工具
# ip address
# ip address show ens192
# ip route
# ip neigh
# ethtool ens192
十一. 临时修改网络配置,重启后恢复
# 临时加个ip
# ip address add dev ens32 192.168.1.232/24
# 临时去掉ip
# ip address del dev ens32 192.168.1.233/24
# ip route add
# ip route del
十二. 将网口命名改为老的eth0
-
将配置文件改名为eth0
mv /etc/sysconfig/network-scripts/ifcfg-e{ns32,th0} -
修改配置文件的name和device的值为eth0
-
Grub添加kernel参数
# vi /etc/sysconfig/grub
重新生成grub配置文件
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
done
[root@localhost ~]#
- reboot