隨着計算機網絡技術的進步,網絡環境越來越復雜。特別是無線網絡技術的發展,其中一個主要的問題是,如何保證在網絡環境變化的情況下,保持訪問的可持續性。開發者們收集了新時代的網絡需求,並開發出了networkManager。
NetworkManager 的出現主要為了解決下面的問題:軟件可以自動檢測盡量多的信息,在復雜網絡環境下可以平滑的切換,可以即使反饋網絡狀態,可以在桌面環境下工作。
NetworkManager由一個管理系統網絡連接、並且將其狀態通過D-BUS進行報告的后台服務,以及一個允許用戶管理網絡連接的客戶端程序組成。
NetworkManager 網絡配置順序
1) 如果有線網絡連接可用,NetworkManager會自動配置有線網絡連接。
2) 如果有線網絡連接不可以用,NetworkManager 會搜尋所有可檢測到的無線網絡,如果有保存的授權信息, NetworkManager會自動配置無線網絡連接
3) 如果用戶自定義網絡信息,用戶定義具有最高優先權。
NetworkManger系統架構
NetworkManger由四個獨立的模塊構成:
- NetworkManager服務 — 一個核心服務,用戶處理網絡連接和策略
- DHCPCD — NetworkManager使用的DHCP客戶端服務 NetworkManagerInfo —
- 收集用戶桌面或者客戶端定義信息,並反饋網絡狀態給用戶 NetworkManagerNotification —
- Panel的桌面通知標識符。
這四部分合作,完成 NetworkManager 網絡的管理。 他們的結構圖如下:
NetworkManager 和 D-BUS
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
RHEL7 虛擬機 中一個NetworkManager 網絡問題的解決:
問題描述: 啟動的虛擬機不能獲得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