NetworkManager

概述:

本章目标:
使用nmcli和networkmanager管理网络设备
通过编辑配置文件修改网络设置
配置和测试系统主机名和名称解析

网络接口名称:
在redhat7之前网络接口的名称一般为eth0、eth1等等。不过随着设备的增加和删除,这些名称可能会导致一些不对称的信息。
在redhat7中网络设备根据设备类型分配了固定的名称:
en o1 6777736
类型 适配器类型 接口编号
接口类型:
en开头是以太网接口
w1开头是WLAN接口
ww开头是WWAN接口
适配器类型:
o代表板载
s代表可热拔插
p代表PCI接口

NetworkManager 介绍

NetworkManager是2004年RedHat启动的项目,皆在能够让Linux用户更轻松的处理现代网络需求,尤其是无线网络,能够自动发现网卡并配置IP地址。

RHEL7上同事支持network.service和NetworkManager.service(简称NM)。默认情况下这2个服务都有开启,但是因为NetworkManager.service当时的兼容性不好,大部分人都会将其关闭。

但是在RHEL 8/Centos 8上已废弃network.service(默认不安装),只能通过NetworkManager进行网络配置。

NetworkManager主要管理2个对象: Connection(网卡连接配置) 和 Device(网卡设备),他们之间是多对一的关系,但是同一时刻只能有一个Connection对于Device才生效。

在RHEL 8/Centos 8有三种方法配置网络:

  • 通过nmcli connection add命令配置,会自动生成ifcfg文件。
  • 手动配置ifcfg文件,通过nmcli connection reload来加载生效。
  • 手动配置ifcfg文件,通过传统network.service来加载生效。

显示IP地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 192.168.2.73 netmask 255.255.255.0 broadcast 192.168.2.255
inet6 fe80::7ea2:3cc1:a899:773c prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:75:88:e4 txqueuelen 1000 (Ethernet)
RX packets 502 bytes 54467 (53.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 29 bytes 4664 (4.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

RUNNING: 接口状态,表示可用
ether 00:0c:29:75:88:e4 表示MAC地址
inet 192.168.2.73 IPV4 地址
inet6 fe80::7ea2:3cc1:a899:773c IPV6地址
broadcast 192.168.2.255 广播地址

使用nmcli配置网络
network manager是监控和管理网络的服务,命令行工具和图形化工具将配置网络配置信息保存在/etc/sysconfig/network-scripts 目录中。
linux系统的网络配置,可以使用命令行工具、图形化界面工具、配置文件的方式来进行配置,这里推荐使用命令行工具进行配置网络IP地址信息。

nmcli 命令摘要

1
2
3
4
5
6
7
8
9
10
11
12
nmcli 命令摘要
nmcli dev status 列出物理设备的状态
nmcli dev dis <dev> 关闭物理连接
nmcli dev conn <dev> 打开物理连接

nmcli con show 列出所有连接
nmcli con up "name" 激活连接
nmcli con down "name" 关闭连接
nmcli con add 添加连接
nmcli con mod 修改连接
nmcli con modify "有线连接 1" con-name abc #修改网卡名为abc
nmcli con del 删除连接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
nmcli connection 网络连接管理
$ nmcli connection show # 查看所有网卡配置
$ nmcli connection reload # 重新加载网卡配置,不会立即生效
$ nmcli connection down ens37 && nmcli connection up ens37 # 立即生效Connection配置
$ nmcli connection add type ethernet con-name ens37-con ifname ens37 ipv4.addr 1.1.1.2/24 ipv4.gateway 1.1.1.1 ipv4.method manual # 为device创建connection
$ nmcli connection add type ethernet con-name ens37-con ifname ens37 ipv4.method auto # dhcp
$ nmcli connection modify ens37-con ipv4.addr 1.1.1.3/24 && nmcli connection up ens37-con # 修改IP地址并立即生效

交互方式修改IP
$ nmcli connection edit ens37-con

nmcli device 网卡设备管理
$ nmcli device status # 查看所有网卡设备状态
$ nmcli device show ens37 # 查看网卡配置
$ nmcli device reapply ens37 # 立即生效网卡配置

使用nmcli查看网络信息

1
2
3
4
5
6
[root@server ~]# nmcli conn show
NAME UUID TYPE DEVICE
Wired connection 1 4057b67c-031d-309c-ac43-5e0afaa3c1b8 802-3-ethernet ens37
ens33 17883cd1-86c8-4ec3-b254-5ce6d462e929 802-3-ethernet ens33
virbr0 083789d4-f752-4ba6-aa8a-5d156bef98e8 bridge virbr0
[root@server ~]#

查看单个网卡信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@server ~]# nmcli conn show "ens33"
connection.id: ens33
connection.uuid: 17883cd1-86c8-4ec3-b254-5ce6d462e929
connection.stable-id: --
connection.interface-name: ens33
connection.type: 802-3-ethernet
connection.autoconnect: yes
connection.autoconnect-priority: 0
connection.timestamp: 1545900407
connection.read-only: no
connection.permissions:
connection.zone: --
connection.master: --
connection.slave-type: --

查看网卡物理信息

1
2
3
4
5
6
7
8
[root@server ~]# nmcli device status
DEVICE TYPE STATE CONNECTION
virbr0 bridge connected virbr0
ens33 ethernet connected ens33
ens37 ethernet connected Wired connection 1
lo loopback unmanaged --
virbr0-nic tun unmanaged --
[root@server ~]#

nmcli中网卡设备和连接的关系
在redhat7中,我们有网卡设备和网卡连接(connection / profile ),两种东西,他们是什么关系呢?
网卡设备是我们真实的网卡,而网卡连接是网卡的一个配置文件,我们需要将网卡关联到网卡配置文件上可以正常使用。

使用nmcli命令编辑连接配置
修改配置名称,从”Wired connection 1”修改为abc

1
2
3
4
5
6
7
[root@server ~]# nmcli con modify "Wired connection 1" con-name abc
[root@server ~]# nmcli con show
NAME UUID TYPE DEVICE
abc 4057b67c-031d-309c-ac43-5e0afaa3c1b8 802-3-ethernet ens37
ens33 17883cd1-86c8-4ec3-b254-5ce6d462e929 802-3-ethernet ens33
virbr0 083789d4-f752-4ba6-aa8a-5d156bef98e8 bridge virbr0
[root@server ~]#

关闭自动连接

1
nmcli con modify "System eth0" connection.autoconnect no

修改DNS

1
nmcli con modify "System eth0" ipv4.dns 223.5.5.5

添加DNS

1
nmcli con modify "System eth0" +ipv4.dns 192.168.224.2

修改IP地址

1
nmcli con modify "System eth0" ipv4.addresses 192.168.224.10/16

同时修改IP地址和网关

1
nmcli conn modify ens33 ipv4.addresses 192.168.224.101/24 ipv4.gateway 192.168.224.2

修改网关

1
nmcli conn modify abc ipv4.gateway 192.168.224.2

重新加载配置

1
2
3
4
5
nmcli con up “System eth0” ,如果无效可以重启network服务。



systemctl restart NetworkManager

配置主机名称
使用hostname命令显示或临时修改系统的名称。
[root@desktop0 ~]# hostname desktop0.example.com
[root@desktop0 ~]# hostname XXX.example.com
hostname命令实质上读取的/etc/hostname文件,hostname命令修改的主机名称不会保存到该文件当中,只是修改了临时变量,在我们重启系统以后hostname设置的主机名称就会恢复。
如需永久修改主机名称,可以使用hostnamectl 命令进行修改。
hostnamectl set-hostname XXXXXX
如果当系统中没有/etc/hostname的文件,那么系统会使用IP进行DNS的反向解析,从而通过DNS获取主机名称

配置本地名称解析
默认情况下,当我们访问一个主机名或一个域名的时候我们需要通过DNS服务器将名称解析成IP地址,但在某些情况下我们可能需要配置一些DNS服务器不存在的名称,那么这个时候我就需要在系统本地设置名称解析。该功能是通过/etc/hosts文件来进行定义的。
如有定义/etc/hosts文件,则先按照该文件所定义的内容进行解析,如没有相应的条目则使用DNS服务进行解析。

[root@desktop0 ~]# cat /etc/hosts

172.25.254.254 classroom.example.com
172.25.254.254 content.example.com
172.25.0.10 desktop0.example.com

[root@desktop0 ~]# host classroom.example.com
classroom.example.com has address 172.25.254.254

server 主机名称 hostname
server.example.com FQDN:(Fully Qualified Domain Name)全限定域名

为Client2增加一块物理桥接类型的网卡,将IP设置为192.168.198.131:

  1. 登陆到虚拟机。

  2. 运行命令 nmcli conn show。 结果显示只有ens33这一块网卡。
    [jim@client1 ~]$ nmcli con show
    NAME UUID TYPE DEVICE
    ens33 17883cd1-86c8-4ec3-b254-5ce6d462e929 802-3-ethernet ens33
    virbr0 ee3ee66a-b0a2-44e8-8fac-ffefe039a0b1 bridge virbr0
    [jim@client1 ~]$

  3. 开机状态下为虚拟机Client2增加一块”仅主机“类型的网卡。 Linux自动识别到新的网卡ens37,连接名称为‘Wired connection 1’。

    1
    2
    3
    4
    5
        [root@client4 ~]# nmcli con show
    NAME UUID TYPE DEVICE
    Wired connection 1 f7ef9df8-e21a-393c-8b9d-5ac5c300b54b 802-3-ethernet ens37
    ens33 17883cd1-86c8-4ec3-b254-5ce6d462e929 802-3-ethernet ens33
    virbr0 69cdf8dd-53a3-4db5-9685-6162a828f381 bridge virbr0
  4. 运行命令 nmcli conn show。结果显示系统会自动识别到新网卡,并且命令为ens37. 因为网络默认是DHCP类型,所以机器已经自动获得IP地址。 IP网段为192.168.198.X

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    [jim@client1 ~]$ ifconfig
    ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 192.168.224.11 netmask 255.255.255.0 broadcast 192.168.224.255
    inet6 fe80::aed7:e5a6:39f2:bc3c prefixlen 64 scopeid 0x20<link>
    ether 00:0c:29:4e:51:b0 txqueuelen 1000 (Ethernet)
    RX packets 19387 bytes 28578038 (27.2 MiB)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 8951 bytes 545551 (532.7 KiB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

    ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 192.168.198.128 netmask 255.255.255.0 broadcast 192.168.198.255
    inet6 fe80::18a7:f3a8:5db7:9e2e prefixlen 64 scopeid 0x20<link>
    ether 00:0c:29:4e:51:ba txqueuelen 1000 (Ethernet)
    RX packets 135 bytes 17298 (16.8 KiB)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 52 bytes 8999 (8.7 KiB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
    。。。
  1. 修改IP地址为192.168.198.131。运行:

    1
    nmcli con modify "Wired connection 1" ipv4.addresses "192.168.198.131/24"
  1. 激活配置.

    1
    nmcli conn up "Wired connection 1"
  2. 运行ifconifg 查询IP,结果显示IP已经生效。

1
2
3
4
5
6
7
8
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 192.168.198.131 netmask 255.255.255.0 broadcast 192.168.198.255
inet6 fe80::a660:7d23:dfee:475c prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:86:28:31 txqueuelen 1000 (Ethernet)
RX packets 5 bytes 1148 (1.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 89 bytes 14164 (13.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  1. 删除连接配置,将静态IP改为自动获取。

    1
    nmcli conn delete "Wired connection 1"

测试二:
为网卡ens37配置多份连接配置。以便于在不同的环境下切换IP配置。 例如配置一中,配置名称conn1 IP设置为192.168.198.120. 配置二中,配置名称conn2,IP设置为192.168.198.121

创建conn1,设置IP为120

1
nmcli con add con-name conn1 type ethernet ifname ens37 ipv4.addresses "192.168.198.120/24" ipv4.gateway 192.168.192.1

创建conn2,设置IP为121

1
nmcli con add con-name conn2 type ethernet ifname ens37 ipv4.addresses "192.168.198.121/24" ipv4.gateway 192.168.192.1

激活conn2

1
nmcli conn up conn2

激活conn1

1
nmcli conn up conn1

评论


:D 一言句子获取中...

加载中,最新评论有1分钟缓存...