從 ifcfg 到密鑰文件:NetworkManager 設置更新 Fedora Linux 36


Fedora Linux 36 的變化之一是全新安裝 不再支持用於配置網絡的 ifcfg 文件..這些是什麼,是什麼取代了它們?

一點歷史

在過去的美好時光,將 Linux 機器連接到網絡很容易。系統管理員將每個連接到網絡的接口卡的配置文件放在 /etc 目錄中。此配置文件描述了特定網絡的地址配置。 在 Fedora Linux 上,配置文件實際上是一個 shell 腳本片段,如下所示:

$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
DEVICE=eth0
BOOTPROTO=dhcp

在啟動時運行的 shell 腳本會讀取文件並應用配置。簡單的。

但到 2004 年底,情況發生了變化。從字面上看,Wi-Fi 無處不在。當時的筆記本電腦可以快速連接到新網絡,USB 總線甚至可以在系統運行時插入和拔出有線網絡適配器。網絡配置變得比以往任何時候都更加動態,現有的網絡配置工具不再實用。救援就在這裡 網絡管理員.. 在 Fedora Linux 系統上,NetworkManager 使用以下設置:

$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
DEVICE=eth0
BOOTPROTO=dhcp

你熟悉嗎?它應該。從一開始,NetworkManager 就打算使用現有的配置格式。事實上,你有一個插件可以在 NetworkManager 的內部配置模型和發行版的原生格式之間無縫轉換。 在 Fedora 中,這是上面提到的 ifcfg 文件。

讓我們仔細看看它們。

ifcfg 文件

傳統網絡服務,現在是 network-scripts 包的一部分,最初定義了 ifcfg 文件格式。該文件包含在一個名為 系統配置文件 這對於格式化非常有用。

隨著 NetworkManager 越來越受歡迎,您經常發現有必要表示舊網絡服務不支持的配置。鑑於使用 shell 腳本設置它們的性質,添加新設置並不是什麼大問題。未知的事物通常會被默默地忽略。 這是 NetworkManager 對 ifcfg 文件應該是什麼樣子的想法: nm-set-ifcfg-rh (5) 手動的。

一般來說,NetworkManager 努力創建一個與傳統網絡服務配合良好的 ifcfg 文件。但是,在某些情況下,這是不可能的。目前,NetworkManager 支持的網絡連接類型比傳統網絡服務所能配置的要多得多。 ..新格式現在用於表達舊格式無法表達的內容。這包括 VPN 連接、寬帶調製解調器等。

密鑰文件

新格式與 NetworkManager 的原生配置模型非常相似。

$ cat /etc/NetworkManager/system-connections/VPN.ovpn
[connection]
id=My VPN
uuid=c85a7cdb-973b-491f-998d-b09a590af10e
type=vpn

[vpn]
ca=/etc/pki/tls/certs/vpn-ca.pem
connection-type=password
remote=vpn.example.com
username=lkundrak
service-type=org.freedesktop.NetworkManager.openvpn

[ipv6]
method=auto
never-default=true

任何熟悉 Linux 系統的人都應該立即熟悉實際的格式。這是一個“ini 文件”或“密鑰文件”。 一組純文本鍵/值對分組為部分,就像 ifcfg 文件使用的那樣。這個 nm-settings-ifcfg-keyfile (5) 該手冊是格式的完整文檔。

使用這種格式的主要優點是它非常類似於 NetworkManager 關於如何在內部和使用 D-Bus API 表示網絡配置的思考。如果不考慮世界年輕時設計的機制的怪癖,也不會受益於遠見,它很容易擴展。這意味著更少的代碼、更少的驚喜和更少的錯誤。

事實上,密鑰文件格式中沒有什麼是 ifcfg 文件無法表示的。 您可以表示一個簡單的有線連接,例如 VPN 或調製解調器。

遷移到密鑰文件

傳統的 Web 服務已經使用了很多年,但那個時代已經一去不復返了。 Fedora Linux 在許多版本之前都放棄了它,沒有它似乎沒有理由使用 ifcfg 文件。也就是說,對於新配置。 Fedora Linux 仍然支持 ifcfg 文件,但有一段時間它默認寫入密鑰文件。

從 Fedora Linux 36 開始,新安裝的 ifcfg 支持將不再存在。如果您仍在使用 ifcfg 文件,請不要擔心。現有系統將繼續升級。不過,您可以決定卸載它並將配置傳輸到密鑰文件。閱讀,了解如何。

如果您像我一樣,您在多年前使用密鑰和 ifcfg 文件的組合安裝了系統。確認方法如下。

$ nmcli -f TYPE,FILENAME,NAME conn
TYPE      FILENAME                                         NAME
ethernet  /etc/sysconfig/network-scripts/ifcfg-eth0        eth0
wifi      /etc/sysconfig/network-scripts/ifcfg-Guest       Guest
wifi      /etc/NetworkManager/system-connections/Base48    Base48
vpn       /etc/NetworkManager/system-connections/VPN.ovpn  My VPN

這個例子展示了一個始終需要使用密鑰文件的 VPN 連接,並且可能是在 Fedora Linux 切換為默認寫入密鑰文件後創建的 Wi-Fi 連接。 也有使用 ifcfg 插件的以太網和 Wi-Fi 連接。讓我們看看如何將它們轉換為密鑰文件。

NetworkManager 命令行實用程序, 納米克里 (1)我得到了一個新的連接遷移命令,它修改了連接配置文件中使用的配置後端。

建議備份 /etc/sysconfig/network-scripts/ifcfg-* 文件,以防出現問題。備份完成後,您可以嘗試將單個連接遷移到另一個配置後端(默認為密鑰文件)。

$ nmcli connection migrate eth0
Connection 'eth0' (336aba93-1cd7-4cf4-8e90-e2009db3d4d0) successfully migrated.

它奏效了嗎?

$ nmcli -f TYPE,FILENAME,NAME conn
TYPE      FILENAME                                         NAME
ethernet  /etc/NetworkManager/system-connections/eth0.nmc  eth0
wifi      /etc/sysconfig/network-scripts/ifcfg-Guest       Guest
wifi      /etc/NetworkManager/system-connections/Base48    Base48
vpn       /etc/NetworkManager/system-connections/VPN.ovpn  My VPN

多好。我可以無緣無故找回嗎?

$ nmcli conn migrate --plugin ifcfg-rh eth0
Connection 'eth0' (336aba93-1cd7-4cf4-8e90-e2009db3d4d0) successfully migrated.

這太棒了。如果沒有其他選項,“連接遷移”命令可確保所有連接都使用密鑰文件後端。

$ nmcli conn migrate
Connection '336aba93-1cd7-4cf4-8e90-e2009db3d4d0' (eth0) successfully migrated.
Connection '3802a9bc-6ca5-4a17-9d0b-346f7212f2d3' (Red Hat Guest) successfully migrated.
Connection 'a082d5a0-5e29-4c67-8b6b-09af1b8d55a0' (Base48) successfully migrated.
Connection 'c85a7cdb-973b-491f-998d-b09a590af10e' (Oh My VPN) successfully migrated.

而已。現在系統沒有 ifcfg 文件,支持它們的配置後端也沒用了。您可以刪除它們。

# dnf remove NetworkManager-initscripts-ifcfg-rh

現在系統像以前一樣工作,但現在它是最新的,我很滿意。