Linux中將網(wǎng)絡(luò)管理器由NetworkManager切換為systemd-network
在 Linux 世界里,對 systemd 的采用一直是激烈爭論的主題,它的支持者和反對者之間的戰(zhàn)火仍然在燃燒。到了今天,大部分主流 Linux 發(fā)行版都已經(jīng)采用了 systemd 作為默認的初始化init系統(tǒng)。
正如其作者所說,作為一個 “從未完成、從未完善、但一直追隨技術(shù)進步” 的系統(tǒng),systemd 已經(jīng)不只是一個初始化進程,它被設(shè)計為一個更廣泛的系統(tǒng)以及服務(wù)管理平臺,這個平臺是一個包含了不斷增長的核心系統(tǒng)進程、庫和工具的生態(tài)系統(tǒng)。
systemd 的其中一部分是 systemd-networkd,它負責(zé) systemd 生態(tài)中的網(wǎng)絡(luò)配置。使用 systemd-networkd,你可以為網(wǎng)絡(luò)設(shè)備配置基礎(chǔ)的 DHCP/靜態(tài) IP 網(wǎng)絡(luò)。它還可以配置虛擬網(wǎng)絡(luò)功能,例如網(wǎng)橋、隧道和 VLAN。systemd-networkd 目前還不能直接支持無線網(wǎng)絡(luò),但你可以使用 wpa_supplicant 服務(wù)配置無線適配器,然后把它和 systemd-networkd 聯(lián)系起來。
在很多 Linux 發(fā)行版中,NetworkManager 仍然作為默認的網(wǎng)絡(luò)配置管理器。和 NetworkManager 相比,systemd-networkd 仍處于積極的開發(fā)狀態(tài),還缺少一些功能。例如,它還不能像 NetworkManager 那樣能讓你的計算機在任何時候通過多種接口保持連接。它還沒有為更高層面的腳本編程提供 ifup/ifdown 鉤子函數(shù)。但是,systemd-networkd 和其它 systemd 組件(例如用于域名解析的 resolved、NTP 的timesyncd,用于命名的 udevd)結(jié)合的非常好。隨著時間增長,systemd-networkd只會在 systemd 環(huán)境中扮演越來越重要的角色。
如果你對 systemd-networkd 的進步感到高興,從 NetworkManager 切換到 systemd-networkd 是值得你考慮的一件事。如果你強烈反對 systemd,對 NetworkManager 或基礎(chǔ)網(wǎng)絡(luò)服務(wù)感到很滿意,那也很好。
但對于那些想嘗試 systemd-networkd 的人,可以繼續(xù)看下去,在這篇指南中學(xué)會在 Linux 中怎么從 NetworkManager 切換到 systemd-networkd。
需求
systemd 210 及其更高版本提供了 systemd-networkd。因此諸如 Debian 8 "Jessie" (systemd 215)、 Fedora 21 (systemd 217)、 Ubuntu 15.04 (systemd 219) 或更高版本的 Linux 發(fā)行版和 systemd-networkd 兼容。
對于其它發(fā)行版,在開始下一步之前先檢查一下你的 systemd 版本。
$ systemctl --version
從 NetworkManager 切換到 Systemd-networkd
從 NetworkManager 切換到 systemd-networkd 其實非常簡答(反過來也一樣)。
首先,按照下面這樣先停用 NetworkManager 服務(wù),然后啟用 systemd-networkd。
$ sudo systemctl disable NetworkManager
$ sudo systemctl enable systemd-networkd
你還要啟用 systemd-resolved 服務(wù),systemd-networkd用它來進行域名解析。該服務(wù)還實現(xiàn)了一個緩存式 DNS 服務(wù)器。
$ sudo systemctl enable systemd-resolved
$ sudo systemctl start systemd-resolved
當(dāng)啟動后,systemd-resolved 就會在 /run/systemd 目錄下某個地方創(chuàng)建它自己的 resolv.conf。但是,把 DNS 解析信息存放在 /etc/resolv.conf 是更普遍的做法,很多應(yīng)用程序也會依賴于 /etc/resolv.conf。因此為了兼容性,按照下面的方式創(chuàng)建一個到 /etc/resolv.conf 的符號鏈接。
$ sudo rm /etc/resolv.conf
$ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
用 systemd-networkd 配置網(wǎng)絡(luò)連接
要用 systemd-networkd 配置網(wǎng)絡(luò)服務(wù),你必須指定帶.network 擴展名的配置信息文本文件。這些網(wǎng)絡(luò)配置文件保存到 /etc/systemd/network 并從這里加載。當(dāng)有多個文件時,systemd-networkd 會按照字母順序一個個加載并處理。
首先創(chuàng)建 /etc/systemd/network 目錄。
$ sudo mkdir /etc/systemd/network
DHCP 網(wǎng)絡(luò)
首先來配置 DHCP 網(wǎng)絡(luò)。對于此,先要創(chuàng)建下面的配置文件。文件名可以任意,但記住文件是按照字母順序處理的。
$ sudo vi /etc/systemd/network/20-dhcp.network
[Match]
Name=enp3*
[Network]
DHCP=yes
正如你上面看到的,每個網(wǎng)絡(luò)配置文件包括了一個或多個 “sections”,每個 “section”都用 [XXX] 開頭。每個 section 包括了一個或多個鍵值對。[Match] 部分決定這個配置文件配置哪個(些)網(wǎng)絡(luò)設(shè)備。例如,這個文件匹配所有名稱以 ens3 開頭的網(wǎng)絡(luò)設(shè)備(例如 enp3s0、 enp3s1、 enp3s2 等等)對于匹配的接口,然后啟用 [Network] 部分指定的 DHCP 網(wǎng)絡(luò)配置。
靜態(tài) IP 網(wǎng)絡(luò)
如果你想給網(wǎng)絡(luò)設(shè)備分配一個靜態(tài) IP 地址,那就新建下面的配置文件。
$ sudo vi /etc/systemd/network/10-static-enp3s0.network
[Match]
Name=enp3s0
[Network]
Address=192.168.10.50/24
Gateway=192.168.10.1
DNS=8.8.8.8
正如你猜測的, enp3s0 接口地址會被指定為 192.168.10.50/24,默認網(wǎng)關(guān)是 192.168.10.1, DNS 服務(wù)器是 8.8.8.8。這里微妙的一點是,接口名 enp3s0 事實上也匹配了之前 DHCP 配置中定義的模式規(guī)則。但是,根據(jù)詞匯順序,文件 "10-static-enp3s0.network" 在 "20-dhcp.network" 之前被處理,對于 enp3s0 接口靜態(tài)配置比 DHCP 配置有更高的優(yōu)先級。
一旦你完成了創(chuàng)建配置文件,重啟 systemd-networkd 服務(wù)或者重啟機器。
$ sudo systemctl restart systemd-networkd
運行以下命令檢查服務(wù)狀態(tài):
$ systemctl status systemd-networkd
$ systemctl status systemd-resolved
用 systemd-networkd 配置虛擬網(wǎng)絡(luò)設(shè)備
systemd-networkd 同樣允許你配置虛擬網(wǎng)絡(luò)設(shè)備,例如網(wǎng)橋、VLAN、隧道、VXLAN、綁定等。你必須在用 .netdev 作為擴展名的文件中配置這些虛擬設(shè)備。
這里我展示了如何配置一個橋接接口。
Linux 網(wǎng)橋
如果你想創(chuàng)建一個 Linux 網(wǎng)橋(br0) 并把物理接口(eth1) 添加到網(wǎng)橋,你可以新建下面的配置。
$ sudo vi /etc/systemd/network/bridge-br0.netdev
[NetDev]
Name=br0
Kind=bridge
然后按照下面這樣用 .network 文件配置網(wǎng)橋接口 br0 和從接口 eth1。
$ sudo vi /etc/systemd/network/bridge-br0-slave.network
[Match]
Name=eth1
[Network]
Bridge=br0
$ sudo vi /etc/systemd/network/bridge-br0.network
[Match]
Name=br0
[Network]
Address=192.168.10.100/24
Gateway=192.168.10.1
DNS=8.8.8.8
最后,重啟 systemd-networkd。
$ sudo systemctl restart systemd-networkd
你可以用 brctl 工具 來驗證是否創(chuàng)建好了網(wǎng)橋 br0。
總結(jié)
當(dāng) systemd 誓言成為 Linux 的系統(tǒng)管理器時,有類似 systemd-networkd 的東西來管理網(wǎng)絡(luò)配置也就不足為奇。但是在現(xiàn)階段,systemd-networkd 看起來更適合于網(wǎng)絡(luò)配置相對穩(wěn)定的服務(wù)器環(huán)境。對于桌面/筆記本環(huán)境,它們有多種臨時有線/無線接口,NetworkManager 仍然是比較好的選擇。
對于想進一步了解 systemd-networkd 的人,可以參考官方man 手冊了解完整的支持列表和關(guān)鍵點。
相關(guān)文章

集成系統(tǒng)級Claw模式! Deepin 官宣發(fā)布 25.1 版本
deepin操作系統(tǒng)發(fā)布了最新的 25.1 版本更新,該版本基于 deepin 25 正式版積累的多輪內(nèi)測成果,在 AI 能力、內(nèi)核版本、桌面環(huán)境、文件管理器以及系統(tǒng)安全等方面進行了更新2026-04-13
又一代老硬件退場! Linux 內(nèi)核正式放棄Intel 486 CPU
在過去的幾十年間,CPU 的架構(gòu)已經(jīng)經(jīng)歷了飛速發(fā)展,x86 系列就是其中之一,而 i486 則屬于該系列中的一個,當(dāng)前,i486 的CPU處理器已經(jīng)夠老,從 Linux 7.1 開始將不再有對2026-04-09
趕緊收藏! 全網(wǎng)最全 Linux 命令總結(jié)
我把 Linux 中最常用、最實用、最常被問到的命令按照實際使用場景分類整理,方便你快速查閱和記憶,內(nèi)容覆蓋日常運維、開發(fā)調(diào)試、性能分析、文件處理、網(wǎng)絡(luò)、安全、系統(tǒng)管2026-04-08
一分鐘內(nèi)檢查Linux服務(wù)器性能? 9個性能檢測常用的基本命令
今天我們來看看Linux系統(tǒng)中用于性能監(jiān)控的一系列命令,這些命令可以快速查看機器的負載情況,詳細請看下文介紹2026-03-18
從零基礎(chǔ)到精通! 適合高級用戶的15款Linux發(fā)行版推薦
Linux作為操作系統(tǒng)領(lǐng)域靈活性和可定制性的基石,提供了大量滿足不同用戶需求的發(fā)行版,今天分享適合高級用戶的15款Linux發(fā)行版2026-03-10
開箱即用? 這4個高手級Linux發(fā)行版遠沒你想象的那么安全易用
如果你正在糾結(jié)用哪個發(fā)行版?零基礎(chǔ)新手別被“高端”“極客”“聲明式”這些詞沖昏頭腦,先用好用的,再慢慢進階2026-03-10
這幾款SSH工具真的夠用了! Linux好用的ssh工具推薦
在Linux上使用SSH,您需要安裝一個SSH客戶端,今天整理找到的8 款 SSH / 終端工具,從免費開源到企業(yè)級商用,從輕量化命令行到一站式工具箱,每款都做了介紹與對比,希望能2026-03-09
在Linux系統(tǒng)下有兩種用戶,即高級用戶root,普通用戶,高級用戶root可以在系統(tǒng)中做任何事情,普通用戶僅可在Linux系統(tǒng)中做有限的事情,下面我們就來看看切換方法2026-02-28
揭秘當(dāng)前登錄用戶的身份! Linux中使用logname命令的技巧
logname命令就是這樣一個簡單但強大的工具,它能幫助我們輕松獲取當(dāng)前登錄用戶的用戶名,今天,我們就來深入探索一下這個命令的工作原理、使用方法和最佳實踐2026-02-26
在 Linux 系統(tǒng)中,DNS 緩存是一種將域名和 IP 地址映射關(guān)系緩存在本地的機制,可以加快域名解析速度,并減輕 DNS 服務(wù)器的負載2026-02-26



