如何在 Linux 上從 NetworkManager 切換為 systemd-network
在 Linux 世界裡,對 systemd 的採用一直是激烈爭論的主題,它的支持者和反對者之間的戰火仍然在燃燒。到了今天,大部分主流 Linux 發行版都已經採用了 systemd 作為預設的初始化系統。
正如其作者所說,作為一個 “從未完成、從未完善、但一直追隨技術進步” 的系統,systemd 已經不只是一個初始化程式,它被設計為一個更廣泛的系統以及服務管理平臺,這個平臺是一個包含了不斷增長的核心繫統程式、庫和工具的生態系統。
systemd 的其中一部分是 systemd-networkd,它負責 systemd 生態中的網路配置。使用 systemd-networkd,你可以為網路裝置配置基礎的 DHCP/靜態 IP 網路。它還可以配置虛擬網路功能,例如網橋、隧道和 VLAN。systemd-networkd 目前還不能直接支援無線網路,但你可以使用 wpa_supplicant 服務配置無線介面卡,然後把它和 systemd-networkd 聯絡起來。
在很多 Linux 發行版中,NetworkManager 仍然作為預設的網路配置管理器。和 NetworkManager 相比,systemd-networkd 仍處於積極的開發狀態,還缺少一些功能。例如,它還不能像 NetworkManager 那樣能讓你的計算機在任何時候透過多種介面保持連線。它還沒有為更高層面的指令碼程式設計提供 ifup/ifdown 鉤子函式。但是,systemd-networkd 和其它 systemd 元件(例如用於域名解析的 resolved、NTP 的timesyncd,用於命名的 udevd)結合的非常好。隨著時間增長,systemd-networkd只會在 systemd 環境中扮演越來越重要的角色。
如果你對 systemd-networkd 的進步感到高興,從 NetworkManager 切換到 systemd-networkd 是值得你考慮的一件事。如果你強烈反對 systemd,對 NetworkManager 或基礎網路服務感到很滿意,那也很好。
但對於那些想嘗試 systemd-networkd 的人,可以繼續看下去,在這篇指南中學會在 Linux 中怎麼從 NetworkManager 切換到 systemd-networkd。
需求
systemd 210 及其更高版本提供了 systemd-networkd。因此諸如 Debian 8 "Jessie" (systemd 215)、 Fedora 21 (systemd 217)、 Ubuntu 15.04 (systemd 219) 或更高版本的 Linux 發行版和 systemd-networkd 相容。
對於其它發行版,在開始下一步之前先檢查一下你的 systemd 版本。
$ systemctl --version
從 NetworkManager 切換到 Systemd-networkd
從 NetworkManager 切換到 systemd-networkd 其實非常簡答(反過來也一樣)。
首先,按照下面這樣先停用 NetworkManager 服務,然後啟用 systemd-networkd。
$ sudo systemctl disable NetworkManager
$ sudo systemctl enable systemd-networkd
你還要啟用 systemd-resolved 服務,systemd-networkd用它來進行域名解析。該服務還實現了一個快取式 DNS 伺服器。
$ sudo systemctl enable systemd-resolved
$ sudo systemctl start systemd-resolved
當啟動後,systemd-resolved 就會在 /run/systemd 目錄下某個地方建立它自己的 resolv.conf。但是,把 DNS 解析資訊存放在 /etc/resolv.conf 是更普遍的做法,很多應用程式也會依賴於 /etc/resolv.conf。因此為了相容性,按照下面的方式建立一個到 /etc/resolv.conf 的符號連結。
$ sudo rm /etc/resolv.conf
$ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
用 systemd-networkd 配置網路連線
要用 systemd-networkd 配置網路服務,你必須指定帶.network 副檔名的配置資訊文字檔案。這些網路配置檔案儲存到 /etc/systemd/network 並從這裡載入。當有多個檔案時,systemd-networkd 會按照字母順序一個個載入並處理。
首先建立 /etc/systemd/network 目錄。
$ sudo mkdir /etc/systemd/network
DHCP 網路
首先來配置 DHCP 網路。對於此,先要建立下面的配置檔案。檔名可以任意,但記住檔案是按照字母順序處理的。
$ sudo vi /etc/systemd/network/20-dhcp.network
[Match]
Name=enp3*
[Network]
DHCP=yes
正如你上面看到的,每個網路配置檔案包括了一個或多個 “sections”,每個 “section”都用 [XXX] 開頭。每個 section 包括了一個或多個鍵值對。[Match]
部分決定這個配置檔案配置哪個(些)網路裝置。例如,這個檔案匹配所有名稱以 ens3 開頭的網路裝置(例如 enp3s0、 enp3s1、 enp3s2 等等)對於匹配的介面,然後啟用 [Network] 部分指定的 DHCP 網路配置。
靜態 IP 網路
如果你想給網路裝置分配一個靜態 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,預設閘道器是 192.168.10.1, DNS 伺服器是 8.8.8.8。這裡微妙的一點是,介面名 enp3s0 事實上也匹配了之前 DHCP 配置中定義的模式規則。但是,根據詞彙順序,檔案 "10-static-enp3s0.network" 在 "20-dhcp.network" 之前被處理,對於 enp3s0 介面靜態配置比 DHCP 配置有更高的優先順序。
一旦你完成了建立配置檔案,重啟 systemd-networkd 服務或者重啟機器。
$ sudo systemctl restart systemd-networkd
執行以下命令檢查服務狀態:
$ systemctl status systemd-networkd
$ systemctl status systemd-resolved
用 systemd-networkd 配置虛擬網路裝置
systemd-networkd 同樣允許你配置虛擬網路裝置,例如網橋、VLAN、隧道、VXLAN、繫結等。你必須在用 .netdev 作為副檔名的檔案中配置這些虛擬裝置。
這裡我展示瞭如何配置一個橋接介面。
Linux 網橋
如果你想建立一個 Linux 網橋(br0) 並把物理介面(eth1) 新增到網橋,你可以新建下面的配置。
$ sudo vi /etc/systemd/network/bridge-br0.netdev
[NetDev]
Name=br0
Kind=bridge
然後按照下面這樣用 .network 檔案配置網橋介面 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 工具 來驗證是否建立好了網橋 br0。
總結
當 systemd 誓言成為 Linux 的系統管理器時,有類似 systemd-networkd 的東西來管理網路配置也就不足為奇。但是在現階段,systemd-networkd 看起來更適合於網路配置相對穩定的伺服器環境。對於桌面/筆記本環境,它們有多種臨時有線/無線介面,NetworkManager 仍然是比較好的選擇。
對於想進一步瞭解 systemd-networkd 的人,可以參考官方man 手冊瞭解完整的支援列表和關鍵點。
via: http://xmodulo.com/switch-from-networkmanager-to-systemd-networkd.html
相關文章
- mysql for linux主從切換MySqlLinux
- 為什麼Discord從Go切換到Rust?GoRust
- 如何在Mac電腦上切換其他城市的天氣?Mac
- 如何在一臺電腦上管理/切換多個github賬戶Github
- Redis主從切換Redis
- MySQL主從切換MySql
- 如何在系統上檢視當天Oracle log切換頻率Oracle
- 為什麼我們從Webpack切換到Vite - ReplitWebVite
- 將Debian從Legacy切換為UEFI啟動模式模式
- 為什麼我們從RabbitMQ切換到apache kafka?MQApacheKafka
- 我為什麼不從NodeJS切換到GoNodeJSGo
- 手工切換MySQL主從MySql
- Redis sentinel主從切換Redis
- mysql主從搭建切換MySql
- 美國軍方無人機系統從Solaris切換到Linux無人機Linux
- Linux_NetworkManager_RHEL7Linux
- Linux 網路管理-NetworkManagerLinux
- linux shell的切換Linux
- linux zsh 切換 bashLinux
- 實戰dataguard主從切換
- nginx keepalived 主從切換Nginx
- ostgreSQL主從切換-手動SQL
- 如何在Linux上從命令列嗅探HTTP流量Linux命令列HTTP
- 如何在cmd下切換python版本使用Python
- 為什麼我從Java切換到Rust? Opensource.comJavaRust
- win10 如何在不同視窗切換 win10 切換不同的桌面方法Win10
- Linux 下 NetworkManager 自定義 DNSLinuxDNS
- 為什麼我從 Mac 換到了 LinuxMacLinux
- Ubuntu切換為阿里映象源Ubuntu阿里
- JMeter切換為中文版本JMeter
- Vmware下切換linux ttyLinux
- 如何在windows xp的cmd下切換目錄Windows
- keepalived配置redis主從切換Redis
- StoneDB 主從切換實踐方案
- 從簡單恢復模式切換模式
- 如何在Mac上將 Spotify 音樂轉換為 MP3 格式?Mac
- 如何在本地管理和切換多個 github 賬號?Github
- Oracle 單機切換為主備Oracle