Linux中國

在命令行中使用 nmcli 來管理網路連接

nmcli 命令賦予你直接在 Linux 命令行操作 NetworkManager 工具的能力。它是 NetworkManager 軟體包集成的一部分,通過使用一些 應用程序介面(API)來獲取 NetworkManager 的功能。

nmcli 發佈於 2010 年,用以替代其他配置網路介面和連接的方法,例如 ifconfig。因為它是一個 命令行界面(CLI)工具,被設計用在終端窗口和腳本中,所以對於那些工作在沒有 圖形用戶界面(GUI)的系統的管理員來說,它是一個非常理想的工具。

ncmli 的語法

nmcli 命令可以使用選項來更改它的行為,使用子命令來告訴 nmcli 想使用它的那部分功能,使用操作來告訴 nmcli 你想執行什麼操作。

$ nmcli <選項> <子命令> <操作>

nmcli 一共有 8 個子命令,每個子命令有一些相關的網路操作:

  • help 提供有關 nmcli 命令和使用方法的幫助信息
  • general 返回 NetworkManager 的狀態和總體配置信息
  • networking 提供命令來查詢某個網路連接的狀態和啟動、禁用連接的功能
  • radio 提供命令來查詢某個 WiFi 網路連接的狀態和啟動、禁用連接的功能
  • monitor 提供命令來監控 NetworkManager 的活動並觀察網路連接的狀態改變
  • connection 提供命令來啟用或禁用網路介面、添加新的連接、刪除已有連接等功能
  • device 主要被用於更改與某個設備(例如介面名稱)相關聯的連接參數或者使用一個已有的連接來連接設備
  • secret 註冊 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

上面的命令使用了 connection 子命令中的 show 操作。

用來運行上面這個例子的測試機器上運行著 Ubuntu 20.04,它安裝了 3 個網路適配器:enp0s3enp0s8enp0s9

連接管理

理解 nmcli 的術語是非常重要的。一個網路 連接 connection 包含了一個連接的所有信息。你可以將它看作一個網路 配置 configuration 。「連接」包含了與其相關的所有信息,包括 數據鏈路層IP 地址信息 。它們是 OSI 網路模型 中的第 2 和第 3 層。

當你在 Linux 上配置網路時,通常來說你是在為某個網路設備(它們是安裝在一個電腦中的網路介面)配置連接。當一個連接被某個設備所使用,那麼就可以說這個連接被 激活 active 或者 上線 up 了,反之是 停用 inactive 下線 down

添加網路連接

nmcli 允許你快速地創建網路連接並同時為該連接指定參數。為了通過使用「有線連接 2」 enp0s8 來創建一個新的連接,你可以利用 sudo 來運行下面的命令:

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

其中 type 選項指定需要一個 Ethernet 類型的連接,而 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 已經創建好了。它的 通用唯一標識符 Universally Unique IDentifier (UUID)也一同被賦予,並且其連接類型為 「Ethernet」。我們可以使用 up 子命令再加上連接名稱(或 UUID)來使得這個連接被激活:

$ 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 網路介面設備綁定。

調整連接

nmcli 命令使得調整現有連接的參數變得更加容易。也許你想將某個網路介面從 動態主機配置協議 Dynamic Host Configuration Protocol (DHCP)改為靜態 IP 地址。

假設你需要為你的新連接分配一個固定的 IP 地址 192.168.4.26,那麼你需要使用兩個命令,一個用於設定 IP 地址,另一個用來將獲取 IP 地址的方法改為 manual(手動):

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

記得指定 子網掩碼,在我們這個測試的連接中,它是 無類域間路由 Classless Inter-Domain Routing (CIDR)中的 255.255.255.0/24

為了使得你的更改生效,你需要通過停止再重新啟用該連接。下面的第一個命令是停用該連接,第二個命令則是啟用它:

$ nmcli connection down ethernet-enp0s8
Connection &apos;ethernet-enp0s8&apos; 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/ActiveConnection/6)

假如你想將連接設置為使用 DHCP,則需要將上面的 manual 改為 auto(自動):

$ nmcli connection modify ethernet-enp0s8 ipv4.method auto

設備管理

nmcli 命令中的 device 子命令允許你管理安裝在你電腦中的網路介面。

檢查設備狀態

可以使用下面的命令來快速檢查所有網路介面的狀態:

$ 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  --  

顯示設備詳情

為了檢查某個網路介面的詳情,可以使用 device 子命令中的 show 操作。假如你不提供某個設備的名稱,那麼會獲取並展示所有設備的詳情。你可以上下翻動來查看這些信息。

要查看你最近添加的連接所對應的設備 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,它是 udev 分配的
  • 網路連接類型,在這個示例中是物理的 Ethernet 連接
  • 設備的 媒介訪問控制 media access control (MAC)地址,它被用來在網路中識別該設備
  • 最大傳輸單元,在單個傳輸中最大協議數據單位的大小,任何大於這個大小的數據將被分為多個包來進行傳輸
  • 該設備當前已經處於連接狀態
  • 這個設備使用的連接名稱是 ethernet-enp0s8
  • 這個設備使用的 IP 地址如上面所要求的那樣,被設置為 192.168.4.26/24

其他的信息則是與這個設備連接的網路相關的默認路由和網關設置信息。

nmcli 的互動式編輯器

儘管 nmcli 是一個命令行工具,但它還包含一個基本的互動式編輯器,edit 子命令將為你指定的連接打開一個互動式編輯器,例如:

$ nmcli connection edit ethernet-enp0s8

它將顯示少量的幫助文字,接著是 nmcli 的命令提示符:

===| nmcli interactive connection editor |===

Editing existing &apos;802-3-ethernet&apos; connection: &apos;ethernet-enp0s8&apos;

Type &apos;help&apos; or &apos;?&apos; for available commands.
Type &apos;print&apos; to show all the connection properties.
Type &apos;describe [<setting>.<prop>]&apos; 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>

你想改變的屬性是 method,再繼續敲 set method auto 然後敲 Enter 鍵:

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

假如你想讓這個連接清除掉這個靜態 IP 地址,則請敲 Enter 鍵,如果要保留,則輸入 no 然後敲 Enter 鍵。假如你想在將來再次使用它,你可以保留這個 IP 地址。即便存儲了一個靜態的 IP 地址,如果 method 被設置為 auto ,它仍然會使用 DHCP。

最後輸入 save 來保存你的更改:

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

輸入 quit 來離開 nmcli 的互動式編輯器窗口。假如你不想離開,可以輸入 back 來回到最開始的命令行提示符界面,然後繼續使用這個編輯器。

nmcli 的更多內容

瀏覽互動式編輯器,你就可以看到 nmcli 有多少設定和每個設定有多少屬性。互動式編輯器是一個簡潔的工具,但如果需要在命令行或者在腳本中使用 nmcli,你還是需要使用常規的命令行版本。

現在你有了這些基礎知識,你還可以查看 nmcliman 頁面 來查看它還可以提供什麼更多功能。

via: https://opensource.com/article/20/7/nmcli

作者:Dave McKay 選題:lujun9972 譯者:FSSLC 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國