从RHEL7 开始, ipconfig,netstat,network服务已经不再作为系统默认配置,所以下面我们就讲下NetworkManager 服务
随着计算机网络技术的进步,网络环境越来越复杂。特别是无线网络技术的发展,其中一个主要的问题是,如何保证在网络环境变化的情况下,保持访问的可持续性。开发者们收集了新时代的网络需求,并开发出了networkManager。
NetworkManager 的出现主要为了解决下面的问题:软件可以自动检测尽量多的信息,在复杂网络环境下可以平滑的切换,可以即使反馈网络状态,可以在桌面环境下工作。
NetworkManager由一个管理系统网络连接、并且将其状态通过D-BUS进行报告的后台服务,以及一个允许用户管理网络连接的客户端程序组成。
1) 如果有线网络连接可用,NetworkManager会自动配置有线网络连接。
2) 如果有线网络连接不可以用,NetworkManager 会搜寻所有可检测到的无线网络,如果有保存的授权信息, NetworkManager会自动配置无线网络连接
3) 如果用户自定义网络信息,用户定义具有最高优先权。
NetworkManger由四个独立的模块构成:
- NetworkManager服务 — 一个核心服务,用户处理网络连接和策略
- DHCPCD — NetworkManager使用的DHCP客户端服务 NetworkManagerInfo —
- 收集用户桌面或者客户端定义信息,并反馈网络状态给用户 NetworkManagerNotification —
- Panel的桌面通知标识符。
这四部分合作,完成 NetworkManager 网络的管理。 他们的结构图如下:
![networkmanager-diagram-en-r1.0.png][1]
D-Bus 是一种被linux系统广泛集成的一个内部消息(IPC)和远程进程调用(RPC)组件, 同一系统间,进程可以通过D-Bus通过并发交互。D-Bus 是freedesktop.org 项目的一部分,目的是标准化linux桌面(如:KDE, GNOME)的系统消息服务。
NetworkManager 使用D-BUS 可以增加系统设计的弹性和安全性。
D-BUS 被用于NetworkManager内部进程通讯:
- NetworkManager服务和 NetworkManagerInfo
- NetworkManagerInfo 和NetworkManagerNotification
- NetworkManager服务和 HAL
对外,NetworkManager使用D-BUS 广播网络状态的变化,并允许通过D-BUS改变这种状态
NetworkManager和HA
HAL, 全称 硬件抽象曾,它允许应用程序获取硬件的状态。NetworkManager 启动时,查询HAL获得可用硬件状态。硬件状态的改变会被HAL记录,并传递给 NetworkManager. HAL可以提供网卡设备的信息,以便networkManger使用。
NetworkManager命令及简单使用
nmcli的基本配置选项:
Usage: nmcli [OPTIONS] OBJECT { COMMAND | help }
OPTIONS
-t[erse] terse output
-p[retty] pretty output
-m[ode] tabular|multiline output mode
-f[ields] <field1,field2,...>|all|common specify fields to output
-e[scape] yes|no escape columns separators in values
-n[ocheck] don't check nmcli and NetworkManager versions
-a[sk] ask for missing parameters
-w[ait] <seconds> set timeout waiting for finishing operations
-v[ersion] show program version
-h[elp] print this help
OBJECT
g[eneral] NetworkManager's general status and operations
n[etworking] overall networking control
r[adio] NetworkManager radio switches
c[onnection] NetworkManager's connections
d[evice] devices managed by NetworkManager
a[gent] NetworkManager secret agent or polkit agent
nmcli dev 列出所有网络设备
[root@dhcp-129-213 proc]# nmcli dev
DEVICE TYPE STATE CONNECTION
docker0 bridge connected docker0
virbr0 bridge connected virbr0
eno1 ethernet connected eno1
virbr0-nic tap connected virbr0-nic
vnet0 tap connected vnet0
vnet1 tap connected vnet1
lo loopback unmanaged --
nmclie dev disconnect 断开连接
root@dhcp-129-213 proc]# nmcli dev disconnect eno1
Device 'eno1' successfully disconnected.
nmclie dev connect 连接
[root@dhcp-129-213 proc]# nmcli dev connect eno1
Device 'eno1' successfully activated with 'b3a8ec6f-337b-46e6-a88b-b988569fa271'.
nmcli con show 显示设备信息
[root@dhcp-129-213 proc]# nmcli con show
NAME UUID TYPE DEVICE
docker0 f195ac51-0ad1-425c-b2a2-8964f5625fbc bridge docker0
virbr0-nic a43be4e2-5ab7-43bc-9de4-5a3240edc3c4 generic virbr0-nic
virbr0 38f0556c-a225-4ff6-9fa7-c7d91744b440 bridge virbr0
eno1 b3a8ec6f-337b-46e6-a88b-b988569fa271 802-3-ethernet eno1
vnet1 205ad0f6-7c8e-4e5b-a9ed-231fb248b872 generic vnet1
vnet0 84c6df62-8163-4ce6-8a46-b00abea19d8c generic vnet0
问题描述: 启动的虚拟机不能获得IP地址.
检查:
nmcli dev显示设备网络名为ens3
[root@dhcp-129-128 ~]# nmcli dev
DEVICE TYPE STATE CONNECTION
ens3 ethernet connected ens3
lo loopback unmanaged --
nmcli con show 显示连接名为:eth9, 设备名为---
[root@dhcp-129-128 ~]# nmcli con show
NAME UUID TYPE DEVICE
eth0 9246e3d0-5ee6-424b-ab25-341b23740f9f 802-3-ethernet --
解决方案: 这是由于虚拟机拷贝后网卡设备名变化引起的。删除旧的连接重新建立连接后,问题消失。
nmcli con delete eth0
nmcli dev connect ens3
[root@dhcp-129-128 ~]# nmcli con show
NAME UUID TYPE DEVICE
ens3 9246e3d0-5ee6-424b-ab25-341b23740f9f 802-3-ethernet ens3
关于NetworkManager 更个多配置信息,可参阅:
https://wiki.archlinux.org/index.php/NetworkManager_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29