使用 nmcli 控制台實用程式在 Linux 中管理網路連接

使用 nmcli 公用程式在 Linux 命令列上充分利用 NetworkManager 網路管理工具。

使用 nmcli 控制台實用程式在 Linux 中管理網路連接

效用 nmcli 直接呼叫API來存取NetworkManager功能。

它於 2010 年出現,對於許多人來說已成為配置網路介面和連接的替代方法。 雖然有些人還在用 使用ifconfig。 由於 nmcli 是一個命令列介面 (CLI) 工具,設計用於終端機視窗和腳本,因此它非常適合無需 GUI 的系統管理員。

ncmli 指令語法

一般來說,文法如下:

$ nmcli <options> <section> <action>

  • options 是決定 nmcli 運算微妙之處的參數,
  • 部分 (section) - 確定要使用實用程式的哪些功能,
  • 操作 - 允許您指定實際需要完成的操作。

總共有 8 個部分,每個部分都與一組特定的命令(操作)相關聯:

  • 尋求幫助 提供有關 ncmcli 指令及其用法的協助。
  • 傳回 NetworkManager 狀態和全域配置。
  • 網路相關 包括查詢網路連線狀態和啟用/停用連線的命令。
  • 廣播電台 包括查詢 WiFi 網路連線狀態和啟用/停用連線的命令。
  • 監控器 包括用於監視 NetworkManager 活動和觀察網路連線狀態變化的命令。
  • 連線設定 包括用於管理網路介面、新增連接和刪除現有連接的命令。
  • 設備 主要用於更改設備相關參數(例如介面名稱)或使用現有連接來連接設備。
  • 秘密 將 nmcli 註冊為 NetworkManager“秘密代理”,用於偵聽秘密訊息。 此部分很少使用,因為 nmcli 在連接到網路時默認以這種方式工作。

簡單的例子

在開始之前,請確保 NetworkManager 正在運行並且 nmcli 可以與其通訊:

$ nmcli general
STATE      CONNECTIVITY  WIFI-HW  WIFI     WWAN-HW  WWAN    
connected  full          enabled  enabled  enabled  enabled

工作通常從查看所有網路連線設定檔開始:

$ nmcli connection show
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  ac3241e4-b424-35d6-aaa7-07498561688d  ethernet  enp0s3
Wired connection 2  2279d917-fa02-390c-8603-3083ec5a1d3e  ethernet  enp0s8
Wired connection 3  52d89737-de92-35ec-b082-8cf2e5ac36e6  ethernet  enp0s9

該指令使用 行動 顯示連接部分。

測試機運作的是Ubuntu 20.04。 在本例中,我們發現了三個有線連接:enp0s3、enp0s8 和 enp0s9。

管理連線

重要的是要理解,在 nmcli 中,術語「連接」是指包含有關連接的所有資訊的實體。 換句話說,這就是網路配置。 Connection封裝了所有與連線相關的訊息,包括連結層和IP尋址資訊。 它們是 OSI 網路模型中的第 2 層和第 3 層。

當您在 Linux 中設定網路時,通常會設定最終與網路設備綁定的連接,而網路設備又是安裝在電腦上的網路介面。 當設備正在使用連接時,它被視為活動或提升。 如果連線未使用,則該連線處於非活動狀態或重設。

新增網路連接

ncmli 實用程式可讓您快速新增並立即設定連線。 例如,要新增有線連線 2(使用 enp0s8),您需要以超級使用者身分執行下列命令:

$ sudo nmcli connection add type ethernet ifname enp0s8
Connection 'ethernet-enp0s8' (09d26960-25a0-440f-8b20-c684d7adc2f5) successfully added.

在 type 選項中,我們指示這將是一個乙太網路連接,在 ifname(介面名稱)選項中,我們指示我們要使用的網路介面。

這是運行命令後會發生的情況:

$ nmcli connection show
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  ac3241e4-b424-35d6-aaa7-07498561688d  ethernet  enp0s3
Wired connection 2  2279d917-fa02-390c-8603-3083ec5a1d3e  ethernet  enp0s8
Wired connection 3  52d89737-de92-35ec-b082-8cf2e5ac36e6  ethernet  enp0s9
ethernet-enp0s8     09d26960-25a0-440f-8b20-c684d7adc2f5  ethernet  --  

已建立一個新連線 ethernet-enp0s8。 它被分配了一個 UUID,連接類型是乙太網路。 讓我們使用 up 指令來提升它:

$ nmcli connection up ethernet-enp0s8
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)

讓我們再次檢查活動連接清單:

$ nmcli connection show --active
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  ac3241e4-b424-35d6-aaa7-07498561688d  ethernet  enp0s3
ethernet-enp0s8     09d26960-25a0-440f-8b20-c684d7adc2f5  ethernet  enp0s8
Wired connection 3  52d89737-de92-35ec-b082-8cf2e5ac36e6  ethernet  enp0s9

新增了新連接 ethernet-enp0s8,該連接處於活動狀態並使用 enp0s8 網路介面。

設定連接

ncmli 實用程式可讓您輕鬆變更現有連接的參數。 例如,您需要將動態 (DHCP) IP 位址變更為靜態 IP 位址。

假設我們需要將 IP 位址設定為 192.168.4.26。 為此,我們使用兩個命令。 第一個將直接設定IP位址,第二個將IP位址設定方式切換為手動:

$ nmcli connection modify ethernet-enp0s8 ipv4.address 192.168.4.26/24
$ nmcli connection modify ethernet-enp0s8 ipv4.method manual

不要忘記設定子網路遮罩。 對於我們的測試連接,這是 255.255.255.0,或使用 /24 進行無類別路由 (CIDR)。

為了使變更生效,您需要停用然後重新啟用連線:

$ nmcli connection down ethernet-enp0s8
Connection 'ethernet-enp0s8' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
$ nmcli connection up ethernet-enp0s8
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveC

相反,如果您需要安裝 DHCP,請使用自動而不是手動:

$ nmcli connection modify ethernet-enp0s8 ipv4.method auto

使用設備

為此,我們使用設備部分。

檢查設備狀態

$ nmcli device status
DEVICE  TYPE      STATE      CONNECTION        
enp0s3  ethernet  connected  Wired connection 1
enp0s8  ethernet  connected  ethernet-enp0s8    
enp0s9  ethernet  connected  Wired connection 3
lo      loopback  unmanaged  --  

請求設備訊息

為此,請使用“設備”部分中的“顯示”操作(您必須指定設備名稱)。 該實用程式顯示大量信息,通常顯示在多個頁面上。
讓我們看看新連線使用的 enp0s8 介面。 讓我們確保它完全使用我們之前設定的 IP 位址:

$ nmcli device show enp0s8
GENERAL.DEVICE:                         enp0s8
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         08:00:27:81:16:20
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     ethernet-enp0s8
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/6
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.4.26/24
IP4.GATEWAY:                            --
IP4.ROUTE[1]:                           dst = 192.168.4.0/24, nh = 0.0.0.0, mt = 103
IP6.ADDRESS[1]:                         fe80::6d70:90de:cb83:4491/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 103
IP6.ROUTE[2]:                           dst = ff00::/8, nh = ::, mt = 256, table=255

有相當多的信息。 讓我們強調一下主要的事情:

  • 網路介面名稱: enp0s8。
  • 連接類型: 有線乙太網路連線。
  • 我們看到設備的 MAC 位址。
  • 指定最大傳輸單元 (MTU) — 協定可以在不分段的情況下傳輸的一個資料包的有用資料區塊的最大大小。
  • 該裝置 目前已連接.
  • 連接名稱正在使用哪個裝置:ethernet-enp0s8。
  • 該設備使用 IP地址,我們之前安裝的:192.168.4.26/24。

其他資訊涉及預設路由和連接網關參數。 它們取決於特定的網路。

互動式 nmcli 編輯器

nmcli 還有一個簡單的互動式編輯器,對某些人來說可能會更舒服。 例如,要在 ethernet-enp0s8 連接上執行它,請使用 行動 編輯:

$ nmcli connection edit ethernet-enp0s8

它還有一個小幫助,但是比控制台版本小:

===| nmcli interactive connection editor |===
Editing existing '802-3-ethernet' connection: 'ethernet-enp0s8'
Type 'help' or '?' for available commands.
Type 'print' to show all the connection properties.
Type 'describe [<setting>.<prop>]' for detailed property description.
You may edit the following settings: connection, 802-3-ethernet (ethernet), 802-1x, dcb, sriov, ethtool, match, ipv4, ipv6, tc, proxy
nmcli>

如果輸入 print 指令並按 Enter 鍵,nmcli 會顯示所有連線屬性:

===============================================================================
                 Connection profile details (ethernet-enp0s8)
===============================================================================
connection.id:                          ethernet-enp0s8
connection.uuid:                        09d26960-25a0-440f-8b20-c684d7adc2f5
connection.stable-id:                   --
connection.type:                        802-3-ethernet
connection.interface-name:              enp0s8
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.autoconnect-retries:         -1 (default)
connection.multi-connect:               0 (default)
connection.auth-retries:                -1
connection.timestamp:                   1593967212
connection.read-only:                   no
connection.permissions:                 --
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1 (default)
connection.secondaries:                 --

例如,若要將連線設為 DHCP,請鍵入 goto ipv4 並按一下 Enter:

nmcli> goto ipv4
You may edit the following properties: method, dns, dns-search, 
dns-options, dns-priority, addresses, gateway, routes, route-metric, 
route-table, routing-rules, ignore-auto-routes, ignore-auto-dns, 
dhcp-client-id, dhcp-iaid, dhcp-timeout, dhcp-send-hostname, 
dhcp-hostname, dhcp-fqdn, dhcp-hostname-flags, never-default, may-fail, 
dad-timeout
nmcli ipv4>

然後寫入set method auto並點擊 Enter:

nmcli ipv4> set method auto
Do you also want to clear 'ipv4.addresses'? [yes]:

如果要清除靜態IP位址,請按一下 Enter。 否則,輸入 no 並按 Enter 鍵。 如果您認為將來需要它,您可以保存它。 但即使使用已儲存的靜態 IP 位址,如果方法設定為自動,也會使用 DHCP。

使用 save 指令儲存變更:

nmcli ipv4> save
Connection 'ethernet-enp0s8' (09d26960-25a0-440f-8b20-c684d7adc2f5) successfully updated.
nmcli ipv4>

輸入 quit 退出 nmcli 互動式編輯器。 如果您改變主意要離開,請使用 back 指令。

這還不是全部

開啟 nmcli 互動式編輯器,查看有多少個設定以及每個設定有多少個屬性。 互動式編輯器是一個很棒的工具,但如果您想在單行程式碼或腳本中使用 nmcli,則需要常規命令列版本。

現在您已經掌握了基礎知識,請查看 手冊頁 nmcli 看看它還能如何幫助您。

論廣告的權利

史詩級伺服器 - Windows 上的虛擬伺服器 或具有強大的 AMD EPYC 系列處理器和非常快速的 Intel NVMe 驅動器的 Linux。 趕快下單吧!

使用 nmcli 控制台實用程式在 Linux 中管理網路連接

來源: www.habr.com

添加評論