從 ifcfg 到 keyfile:現代化 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文件中可以表達的keyfile格式沒有什麼不能表達的。 它可以代表簡單的有線連接,例如 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 命令行實用程序, nmcli(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

該系統的工作方式與以前相同,但我很高興地說它是一個現代系統。