systemd-networkd 的 *.network 配置文件詳解 筆記250323
查看官方文檔可以用 man systemd.network
命令, 或訪問: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
名稱
systemd.network
— 網絡配置
概要
network.network
描述
一個純 INI 風格的文本文件,用于為匹配的網絡接口編碼網絡配置,由 systemd-networkd(8)
使用。關于語法的一般描述,請參閱 systemd.syntax(7)
。
主網絡配置文件必須以 .network
為擴展名;其他擴展名會被忽略。網絡配置會在匹配的鏈路(接口)出現時立即生效。
.network
文件從以下系統網絡目錄中讀取:
/usr/lib/systemd/network
/usr/local/lib/systemd/network
[1]- 臨時運行時網絡目錄
/run/systemd/network
- 本地管理網絡目錄
/etc/systemd/network
所有配置文件按字母數字順序統一排序和處理,無論其位于哪個目錄。但同名文件會相互覆蓋。建議每個文件名以小于 “70” 的數字開頭(例如 10-eth0.network
)。否則,默認的 .network
文件或由 systemd-network-generator.service(8)
生成的文件可能會優先于用戶配置文件。
/etc/
中的文件優先級最高。/run/
中的文件會覆蓋/usr/
下的同名文件。- 特殊情況下,空文件(大小為 0)或指向
/dev/null
的同名符號鏈接會完全禁用該配置文件(即“屏蔽”)。
對于名為 foo.network
的配置文件,可以存在一個名為 foo.network.d/
的“附加配置”目錄。該目錄中所有以 .conf
結尾的文件會按字母數字順序合并,并在主文件解析后解析。這可用于修改或添加配置,而無需改動主文件。每個附加文件必須包含正確的節頭(如 [Match]
、[Network]
)。
除了 /etc/systemd/network
,附加的 .d
目錄也可放置在 /usr/lib/systemd/network
或 /run/systemd/network
中。優先級規則為:
/etc/
中的附加文件優先于/run/
/run/
中的優先于/usr/lib/
- 所有附加文件優先于主配置文件(無論主文件位置)。
[Match] 節選項
.network
文件包含一個 [Match]
節(用于確定該文件是否適用于某個接口)和一個 [Network]
節(指定接口配置方式)。系統會按字母數字順序應用第一個匹配接口的配置文件,后續文件即使匹配也會被忽略。
注意:若網絡接口設置了 ID_NET_MANAGED_BY=
udev 屬性,則任何 .network
文件均不會匹配該接口,除非屬性值為字符串 "io.systemd.Network"
。此機制可用于將特定接口排除在 systemd-networkd
管理之外,同時保持 [Match]
節的通用性。ID_NET_MANAGED_BY=
屬性聲明了設備的預期所有者,確保并發的網絡管理實現不會爭奪設備控制權。
當滿足 [Match]
節中所有條件時,配置文件才會匹配接口。若 [Match]
節未包含有效設置,則該文件會匹配所有接口,此時 systemd-networkd
會發出警告。
提示:為避免警告并明確匹配所有接口,可添加以下內容:
[Match]
Name=*
翻譯說明
- 術語保留:如
systemd-networkd
、udev
、/dev/null
等專有名詞和技術路徑未翻譯。 - 格式對齊:保留代碼塊、目錄路徑和命令行示例的原始格式,確保技術細節清晰。
- 邏輯強調:使用加粗和分段突出優先級規則、警告和關鍵機制。
- 注釋補充:在“[Match] 節選項”中添加注釋,解釋技術行為的實際影響。
另一個解說
以下是 systemd-networkd
中 .network
配置文件的詳細解析,涵蓋核心概念、語法規則及實際應用場景:
1. 配置文件基礎
文件位置與優先級
- 系統默認配置:
/usr/lib/systemd/network/
/usr/local/lib/systemd/network/
- 運行時配置:
/run/systemd/network/
(臨時配置,重啟后丟失) - 用戶自定義配置:
/etc/systemd/network/
(優先級最高)
優先級規則:
- 文件名格式為
<數字>-<名稱>.network
(如10-wired.network
)。 - 數字越小優先級越高(如
00-main.network
優先于20-backup.network
)。 /etc/
目錄下的文件覆蓋/run/
和/usr/
的同名文件。- 空文件或指向
/dev/null
的符號鏈接會屏蔽(禁用)對應配置。
2. 核心配置塊
(1) [Match]
節:接口匹配規則
定義哪些網絡接口(鏈路)會應用此配置。
常用匹配條件:
[Match]
Name=eth0 # 按接口名稱匹配(支持通配符 eth*)
MACAddress=00:11:22:33:44:55 # 按 MAC 地址匹配
Driver=igb # 按驅動名稱匹配(如 igb、e1000e)
Type=ether # 按接口類型匹配(ether, wlan, bridge)
Host=my-server # 按主機名匹配(需 systemd-hostnamed 服務)
Virtualization=no # 僅在非虛擬化環境生效
注意事項:
- 所有條件需同時滿足(邏輯與)。
- 若未定義
[Match]
節或條件無效,配置文件會匹配所有接口,并觸發警告。 - 排除非托管設備:若接口的
ID_NET_MANAGED_BY
udev 屬性未設為io.systemd.Network
,systemd-networkd
將忽略該接口。
(2) [Network]
節:網絡參數配置
定義接口的基礎網絡參數。
常見配置項:
[Network]
# 靜態 IP 配置(IPv4/IPv6)
Address=192.168.1.10/24 # IPv4 地址
Address=2001:db8::1/64 # IPv6 地址(可多行)
Gateway=192.168.1.1 # 默認網關
DNS=8.8.8.8 1.1.1.1 # DNS 服務器(空格分隔)
Domains=example.com # DNS 搜索域# DHCP 配置
DHCP=yes # 同時啟用 IPv4/IPv6 DHCP
DHCP=ipv4 # 僅 IPv4
DHCP=ipv6 # 僅 IPv6
LinkLocalAddressing=yes # 啟用鏈路本地地址(如 169.254.x.x)# IPv6 擴展功能
IPv6AcceptRA=yes # 接受 IPv6 路由器通告(RA)
IPv6PrivacyExtensions=yes # 啟用 IPv6 隱私擴展(臨時地址)# 綁定其他服務
LLDP=yes # 啟用 LLDP 協議(需 systemd-networkd 編譯支持)
BindCarrier=eth1 # 綁定到另一接口的狀態(依賴其網絡連接)
沖突處理:
DHCP=yes
與靜態Address=
沖突時,DHCP 優先(需明確注釋靜態配置)。- 多 DNS 服務器按順序生效。
(3) [Route]
節:自定義路由規則
定義接口的特定路由表項。
[Route]
Destination=10.0.0.0/8 # 目標網絡(0.0.0.0/0 表示默認路由)
Gateway=192.168.1.1 # 下一跳網關
Metric=100 # 路由優先級(數值越小優先級越高)
PreferredSource=192.168.1.10 # 指定源 IP
Table=123 # 自定義路由表(需預先定義)
多路由配置:
每個 [Route]
塊定義一條獨立路由,可重復多次。
3. 高級配置場景
(1) VLAN 配置
- 創建 VLAN 接口(需
.netdev
文件):# /etc/systemd/network/vlan10.netdev [NetDev] Name=eth0.10 Kind=vlan[VLAN] Id=10
- 配置 VLAN 接口網絡:
# /etc/systemd/network/10-vlan.network [Match] Name=eth0.10[Network] Address=192.168.10.10/24 Gateway=192.168.10.1
(2) 橋接網絡
- 創建橋接接口:
# /etc/systemd/network/br0.netdev [NetDev] Name=br0 Kind=bridge
- 將物理接口加入橋接:
# /etc/systemd/network/br0-slave-eth0.network [Match] Name=eth0[Network] Bridge=br0 # 將此接口綁定到橋接接口 br0
- 配置橋接接口 IP:
# /etc/systemd/network/br0.network [Match] Name=br0[Network] DHCP=yes
4. 調試與驗證
關鍵命令:
# 重新加載配置(不重啟服務)
sudo networkctl reload# 查看接口狀態
networkctl status eth0# 檢查所有接口列表
networkctl list# 查看 IP 和路由
ip addr show eth0
ip route show# 實時查看日志
journalctl -u systemd-networkd -f
配置文件語法檢查:
systemd-analyze verify /etc/systemd/network/*.network
5. 常見問題排查
-
配置未生效:
- 檢查文件名優先級(如
00-
是否被70-
覆蓋)。 - 確認
[Match]
條件是否匹配目標接口。 - 查看日志:
journalctl -u systemd-networkd
。
- 檢查文件名優先級(如
-
DHCP 失敗:
- 確保
DHCP=yes
或DHCP=ipv4
已啟用。 - 檢查防火墻是否阻塞 DHCP 請求(UDP 67/68 端口)。
- 確保
-
路由沖突:
- 使用
ip route show
確認路由優先級(Metric 值)。 - 通過
[Route]
塊顯式定義更具體的路由規則。
- 使用
總結
- 核心邏輯:通過
[Match]
精確匹配接口,[Network]
定義基礎網絡參數,[Route]
控制高級路由。 - 優先級管理:文件名和目錄優先級決定配置生效順序。
- 擴展性:支持 VLAN、橋接、多路由等復雜場景,需結合
.netdev
文件使用。 - 調試優先:善用
networkctl
和journalctl
工具快速定位問題。
另一個解說
在 systemd-networkd
的 .network
配置文件中,[Network]
和 [Address]
節中均可能出現 Address
配置項,但它們的用途和上下文有所不同。以下是詳細區別:
1. [Network] 節中的 Address
-
用途:
這是 主配置節,用于為網絡接口分配 靜態 IP 地址。
支持為同一接口配置 多個 IP 地址(通過重復使用Address
鍵)。 -
語法示例:
[Network] Address=192.168.1.100/24 Address=10.0.0.1/8 # 第二個靜態 IP Gateway=192.168.1.1 DNS=8.8.8.8
-
特點:
- 是靜態 IP 配置的主要方式。
- 可直接定義網關 (
Gateway
) 和 DNS (DNS
) 等全局參數。 - 支持 IPv4/IPv6 雙棧配置(如
Address=2001:db8::1/64
)。
2. [Address] 節中的 Address
-
用途:
屬于 子配置節,通常與[DHCPServer]
或[IPv6AcceptRA]
等節配合使用,用于 細化特定 IP 地址的配置。
例如,為 DHCP 分配的地址段設置廣播地址 (Broadcast
),或定義 IPv6 無狀態自動配置(SLAAC)的行為。 -
語法示例:
[Address] Address=192.168.1.0/24 Broadcast=192.168.1.255 # 定義廣播地址[DHCPServer] PoolOffset=10 PoolSize=20
-
特點:
- 提供 更細粒度的控制(如廣播地址、DHCP 地址池)。
- 常用于定義 DHCP 服務器的地址池范圍。
- 在 IPv6 配置中,可結合
DuplicateAddressDetection
等參數使用。
關鍵區別總結
配置項位置 | 用途 | 典型場景 | 支持參數 |
---|---|---|---|
[Network] 節的 Address | 靜態 IP 主配置 | 為接口分配多個靜態 IP | Gateway , DNS 等全局參數 |
[Address] 節的 Address | 細化特定地址段的配置 | 定義 DHCP 池、IPv6 SLAAC 行為 | Broadcast , PreferredLifetime |
何時使用哪個?
- 靜態 IP 配置 → 優先使用
[Network]
節的Address
。 - 動態 IP 或細化地址行為 → 使用
[Address]
節配合其他子節(如[DHCPServer]
)。
通過靈活組合這些配置,可以實現從簡單靜態 IP 到復雜 DHCP/IPv6 混合網絡的多樣化需求。
另一個解說
systemd-networkd
是一個強大的網絡管理工具,它允許用戶通過配置文件來定義和控制網絡接口的行為。這些配置文件通常位于 /etc/systemd/network/
目錄下,并以 .network
為擴展名。每個 .network
文件可以包含多個部分,每個部分定義了不同的配置選項。下面是對 .network
配置文件的詳細解釋。
基本結構
.network
文件的基本結構由幾個主要部分組成:
[Match]
:用于匹配特定網絡設備的標準。[Network]
:用于定義網絡接口的網絡設置。- 其他可選部分如
[Link]
,[Address]
,[Route]
等,根據需要添加。
[Match] 部分
這部分用于指定哪些網絡設備應該應用此配置。常見的選項包括:
Name=
:指定網絡接口名稱(例如eth0
或者通配符eth*
)。MACAddress=
:基于MAC地址匹配。Driver=
:基于驅動程序名稱匹配。Host=
:基于主機名匹配。
示例:
[Match]
Name=enp3s0
這表示僅當網絡接口名稱為 enp3s0
時應用該配置。
[Network] 部分
這部分定義了具體的網絡設置。常見的選項有:
DHCP=
:啟用或禁用DHCP(值可以是yes
或no
)。Address=
:靜態IP地址(格式為IP/掩碼長度
)。Gateway=
:默認網關。DNS=
:DNS服務器地址。Domains=
:搜索域列表。
示例:
[Network]
DHCP=yes
或者對于靜態配置:
[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
其他部分
除了上述兩個核心部分外,還有其他部分可以根據需求添加:
[Link]
:用于設置鏈路層屬性,比如MTU大小等。[Address]
:為接口添加額外的IP地址。[Route]
:添加路由規則。
使用步驟
- 創建配置文件:在
/etc/systemd/network/
下創建一個新的.network
文件。 - 編輯配置文件:根據你的網絡需求填寫相應的
[Match]
和[Network]
部分。 - 啟用服務:確保
systemd-networkd
已經啟用并啟動。sudo systemctl enable systemd-networkd sudo systemctl start systemd-networkd
- 重啟服務:如果修改了現有配置文件,需要重啟
systemd-networkd
使更改生效。sudo systemctl restart systemd-networkd
注意事項
- 如果系統中同時運行了 NetworkManager 或 Netplan,它們可能會與
systemd-networkd
發生沖突。在這種情況下,你可能需要禁用其他網絡管理工具。 - 配置文件按照字母順序加載,因此可以通過前綴數字來控制加載順序和優先級。
通過以上步驟和說明,你可以利用 systemd-networkd
的 .network
配置文件靈活地管理和配置Linux系統的網絡環境。希望這些信息對你有所幫助!
另一個解說
systemd-networkd
是 systemd
系統和服務管理器的一部分,用于管理網絡設備、配置網絡接口等。*.network
配置文件用于定義網絡接口的行為和屬性,以下為你詳細介紹其各部分內容:
文件基礎信息
- 文件位置:通常存放在
/etc/systemd/network/
目錄下,文件名可以自定義,但需以.network
結尾。 - 文件格式:采用 INI 格式,由多個節(section)構成,每個節以
[節名]
開頭,下面跟著一系列鍵值對。
常見節及其配置項
[Match] 節
此節用于指定哪些網絡接口會應用該配置文件,可依據多種條件匹配網絡接口。
- Name:按網絡接口名稱匹配。例如:
[Match]
Name=enp0s3
這會讓配置文件應用到名為 enp0s3
的網絡接口。
- MACAddress:按 MAC 地址匹配。示例:
[Match]
MACAddress=00:11:22:33:44:55
- Driver:按網絡驅動程序名稱匹配。示例:
[Match]
Driver=e1000
[Network] 節
用于設置網絡的通用配置。
- DHCP:決定是否啟用 DHCP,值可以是
yes
、no
、ipv4
或ipv6
。示例:
[Network]
DHCP=yes
- Address:設置靜態 IP 地址和子網掩碼。可多次使用以設置多個地址。示例:
[Network]
Address=192.168.1.100/24
Address=2001:db8::1/64
- Gateway:設置默認網關地址。示例:
[Network]
Gateway=192.168.1.1
- DNS:設置 DNS 服務器地址。可多次使用以設置多個 DNS 服務器。示例:
[Network]
DNS=8.8.8.8
DNS=8.8.4.4
- Domains:設置搜索域。示例:
[Network]
Domains=example.com
[Address] 節
用于詳細設置 IP 地址,可存在多個 [Address]
節以設置多個 IP 地址。
- Address:設置 IP 地址和子網掩碼。示例:
[Address]
Address=192.168.1.101/24
- Label:設置地址標簽。示例:
[Address]
Address=192.168.1.101/24
Label=secondary
[Route] 節
用于設置路由規則。
- Destination:設置目標網絡地址。示例:
[Route]
Destination=192.168.2.0/24
- Gateway:設置網關地址。示例:
[Route]
Destination=192.168.2.0/24
Gateway=192.168.1.1
- Metric:設置路由度量值。示例:
[Route]
Destination=192.168.2.0/24
Gateway=192.168.1.1
Metric=100
[Link] 節
用于設置網絡接口的通用屬性。
- MTU:設置最大傳輸單元。示例:
[Link]
MTU=9000
- MACAddress:設置網絡接口的 MAC 地址。示例:
[Link]
MACAddress=00:11:22:33:44:55
配置生效與檢查
- 配置生效:修改配置文件后,需重新加載
systemd-networkd
服務使配置生效,命令如下:
sudo systemctl restart systemd-networkd
- 檢查狀態:可使用以下命令檢查
systemd-networkd
服務狀態:
sudo systemctl status systemd-networkd
- 查看網絡配置:使用
networkctl
命令查看網絡接口的配置信息:
sudo networkctl status
完整示例
下面是一個完整的 .network
文件示例,為 enp0s3
網絡接口設置靜態 IP 地址:
[Match]
Name=enp0s3[Network]
DHCP=no
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8[Address]
Address=192.168.1.101/24[Route]
Destination=192.168.2.0/24
Gateway=192.168.1.1[Link]
MTU=9000
通過上述配置,enp0s3
網絡接口會使用靜態 IP 地址 192.168.1.100
和 192.168.1.101
,網關為 192.168.1.1
,DNS 服務器為 8.8.8.8
,同時設置了一條發往 192.168.2.0/24
網絡的路由規則,并且將 MTU 設置為 9000。
另一個解說
以下是對 systemd-networkd 的 *.network
配置文件的詳細解釋:
配置文件結構
*.network
配置文件主要由以下幾個部分組成:
[Match] 小節
用于指定該配置文件適用的網絡接口,通過匹配條件來確定哪些接口會應用該配置文件中的設置。常見的匹配條件包括:
- Name:指定接口名稱,可以使用通配符,如
eth*
表示匹配所有以eth
開頭的接口。 - MACAddress:指定接口的 MAC 地址。
- Driver:指定接口的驅動程序名稱。
- Type:指定接口類型,如
ether
(以太網)、wifi
等。
示例:
[Match]
Name=eth0
該配置表示該配置文件僅適用于名稱為 eth0
的網絡接口。
[Network] 小節
包含具體的網絡配置參數,用于定義接口的網絡設置。常見的配置項包括:
- Address:設置靜態 IP 地址,格式為
IP地址/子網掩碼長度
,如192.168.0.2/24
。 - Gateway:指定網關地址,如
192.168.0.1
。 - DNS:設置 DNS 服務器地址,可多次使用以設置多個 DNS 服務器。
- DHCP:啟用 DHCP,可設置為
yes
、ipv4
或ipv6
,如DHCP=yes
表示同時啟用 IPv4 和 IPv6 的 DHCP。 - Domains:設置搜索域,可多次使用以設置多個搜索域。
- MTUBytes:設置最大傳輸單元(MTU)的大小。
示例:
[Network]
Address=192.168.0.2/24
Gateway=192.168.0.1
DNS=192.168.0.1
DNS=8.8.8.8
[Route] 小節
用于配置靜態路由,可以定義多條路由規則。常見的配置項包括:
- Destination:目標網絡地址,格式為
IP地址/子網掩碼長度
。 - Gateway:指定該路由的網關地址。
- Via:指定該路由經過的中間節點(可選)。
- Metric:設置該路由的優先級,數值越小優先級越高。
示例:
[Route]
Destination=10.0.0.0/8
Gateway=192.168.0.1
Metric=100
[DHCP] 小節
用于配置 DHCP 客戶端的行為,當接口通過 DHCP 獲取 IP 地址時使用。常見的配置項包括:
- UseDNS:是否使用 DHCP 服務器提供的 DNS 信息,可設置為
yes
或no
。 - UseDomains:是否使用 DHCP 服務器提供的搜索域信息,可設置為
yes
或no
。 - SendHostname:是否向 DHCP 服務器發送主機名,可設置為
yes
或no
。
示例:
[DHCP]
UseDNS=yes
UseDomains=yes
SendHostname=yes
[Bridge] 小節
當接口作為橋接設備時使用,用于配置橋接相關的參數。常見的配置項包括:
- STP:是否啟用生成樹協議(Spanning Tree Protocol),可設置為
yes
或no
。 - ForwardDelaySec:設置生成樹協議的轉發延遲時間,單位為秒。
示例:
[Bridge]
STP=yes
ForwardDelaySec=15
配置文件示例
靜態 IP 配置
[Match]
Name=eth0[Network]
Address=192.168.0.2/24
Gateway=192.168.0.1
DNS=192.168.0.1
DNS=8.8.8.8
DHCP 配置
[Match]
Name=eth0[Network]
DHCP=yes
多塊網卡配置(使用通配符)
[Match]
Name=eth*[Network]
DHCP=yes
靜態路由配置
[Match]
Name=eth0[Network]
Address=192.168.0.2/24
Gateway=192.168.0.1[Route]
Destination=10.0.0.0/8
Gateway=192.168.0.1
Metric=100
注意事項
- 配置文件優先級:
/etc/systemd/network/
目錄中的配置文件優先級高于/usr/lib/systemd/network/
中的同名文件。如果存在同名文件,/etc/systemd/network/
中的配置會覆蓋/usr/lib/systemd/network/
中的配置。 - 應用配置:在修改或創建配置文件后,需要重啟
systemd-networkd
服務以使配置生效。可以使用以下命令:systemctl restart systemd-networkd
- 配置沖突:如果在一個配置文件中使用通配符匹配了多塊網卡,但其中某些網卡需要特殊的配置,可能會導致配置沖突。因此,需要仔細規劃網絡配置,確保每塊網卡都能正確應用所需的設置。
通過以上詳細的解釋和示例,可以全面了解 systemd-networkd 的 *.network
配置文件的結構和使用方法,從而根據實際需求靈活配置網絡接口。
另一個解說
以下是對systemd-networkd中.network
配置文件的詳細解析,按功能模塊分層說明:
. n e t w o r k 文件路徑: / e t c / s y s t e m d / n e t w o r k / ? . n e t w o r k 或 / u s r / l i b / s y s t e m d / n e t w o r k / ? . n e t w o r k .network文件路徑:/etc/systemd/network/*.network \quad 或 \quad /usr/lib/systemd/network/*.network .network文件路徑:/etc/systemd/network/?.network或/usr/lib/systemd/network/?.network
一、核心配置節
1. [Match] 節
匹配網絡接口的條件:
[Match]
Name=en* # 匹配接口名以"en"開頭(如enp0s3)
MACAddress=00:11:22:33:44:55 # 按MAC地址匹配
Driver=igb # 匹配驅動類型
Type=ether # 接口類型(ether/wireless等)
*支持通配符(和?),多條件時為"與"關系
2. [Link] 節
配置鏈路層參數:
[Link]
MTUBytes=1500 # 設置MTU值
MACAddress=aa:bb:cc:dd:ee:ff # 強制修改MAC地址
WakeOnLan=magic # 啟用魔術包喚醒
MACAddressPolicy=persistent # MAC地址生成策略
3. [Network] 節
定義網絡層配置:
[Network]
DHCP=yes # 啟用DHCP(yes/ipv4/ipv6)
DNS=8.8.8.8 2001:4860::8888 # 指定DNS服務器
Domains=example.com # 搜索域
Address=192.168.1.10/24 # 靜態IP(需配合[Address]節)
Gateway=192.168.1.1 # 默認網關
IPv6PrivacyExtensions=yes # 啟用臨時IPv6地址
二、擴展配置節
4. [Address] 節
靜態IP配置(可多實例):
[Address]
Address=192.168.1.10/24
Peer=10.0.0.1/32 # 點對點地址
Broadcast=192.168.1.255
5. [Route] 節
自定義路由配置:
[Route]
Gateway=10.0.0.1
Destination=192.168.2.0/24
Metric=1024 # 路由優先級
6. [DHCP] 節
精細控制DHCP行為:
[DHCP]
UseDNS=yes # 是否接受DNS配置
UseMTU=yes # 是否應用DHCP提供的MTU
RouteMetric=100 # 路由度量值
UseTimezone=no # 是否接受時區信息
三、IPv6專用配置
7. [IPv6AcceptRA] 節
[IPv6AcceptRA]
UseDNS=yes # 是否使用RA提供的DNS
UseDomains=yes # 是否應用域名
四、配置示例
靜態IP配置
[Match]
Name=enp0s3[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
DHCP配置
[Match]
Name=en*[Network]
DHCP=ipv4
五、重要注意事項
-
優先級規則
/etc/systemd/network/
中的配置會覆蓋/usr/lib/systemd/network/
文件按字母順序加載,后加載的會覆蓋先前的同名配置 -
生效方法
sudo systemctl restart systemd-networkd
-
調試命令
networkctl status # 查看接口狀態 journalctl -u systemd-networkd # 查看日志
注意:修改配置后需重啟 s y s t e m d ? n e t w o r k d 服務才能生效 注意:修改配置后需重啟systemd-networkd服務才能生效 注意:修改配置后需重啟systemd?networkd服務才能生效
另一個解說
以下是對 systemd-networkd
的 *.network
配置文件的全面詳解,涵蓋其核心功能、配置語法、高級場景及調試方法:
一、配置文件基礎
1. 文件作用
? 核心功能:定義網絡接口的匹配規則、IP 地址分配(靜態/DHCP)、路由、DNS、VLAN、綁定接口等。
? 適用場景:服務器、容器、虛擬機、復雜網絡拓撲(如多網卡、VPN、隧道)。
2. 文件位置與優先級
? 路徑:
? /etc/systemd/network/
:管理員手動配置(持久化,優先級最高)。
? /run/systemd/network/
:臨時配置(重啟失效,優先級次之)。
? /usr/lib/systemd/network/
:系統默認配置(避免修改,優先級最低)。
? /usr/local/lib/systemd/network/
:系統默認配置(避免修改,優先級最低)。
? 命名規則:<優先級>-<描述>.network
(如 10-wired.network
),數字越小優先級越高。
3. 文件結構
INI 格式,分段(Section)管理,支持以下關鍵塊:
? [Match]
:匹配接口的條件。
? [Link]
:物理/虛擬接口參數(如 MAC 地址、MTU)。
? [Network]
:全局網絡配置(IP、DNS、DHCP)。
? [Address]
:精細 IP 地址參數(如廣播地址、點對點)。
? [Route]
:自定義路由規則。
? [DHCP]
:DHCP 客戶端行為控制。
? [IPv6AcceptRA]
:IPv6 路由器通告設置。
二、核心配置塊詳解
1. [Match]
塊:接口匹配規則
定義哪些接口應用此配置,支持多條件組合(邏輯 AND)。
參數 | 示例 | 說明 |
---|---|---|
Name= | Name=enp0s3 | 按接口名匹配(支持通配符 * 、? ) |
MACAddress= | MACAddress=00:11:22:33:44:55 | 按 MAC 地址匹配 |
Driver= | Driver=e1000e | 按網卡驅動類型匹配 |
Type= | Type=ether | 按接口類型(如 ether 、wlan ) |
Property= | Property=ID_VENDOR_ID=8086 | 按 udev 屬性匹配(支持復雜邏輯) |
SSID= | SSID=MyWiFi | 按無線網絡 SSID 匹配(支持通配符) |
示例:
[Match]
Name=enp0s3
MACAddress=00:11:22:33:44:55
Driver=rtl8169
2. [Link]
塊:接口物理層參數
控制接口的物理特性(如 MAC 地址、MTU)。
參數 | 示例 | 說明 |
---|---|---|
MACAddress= | MACAddress=00:11:22:33:44:aa | 強制設置接口 MAC 地址 |
MTUBytes= | MTUBytes=1500 | 設置最大傳輸單元(MTU) |
Promiscuous= | Promiscuous=yes | 啟用混雜模式(捕獲所有流量) |
RequiredForOnline= | RequiredForOnline=yes | 接口在線狀態是否影響系統網絡就緒 |
示例:
[Link]
MACAddress=00:11:22:33:44:aa
MTUBytes=9000 # 支持巨型幀(Jumbo Frame)
3. [Network]
塊:全局網絡配置
定義接口的基礎網絡參數。
參數 | 示例 | 說明 |
---|---|---|
DHCP= | DHCP=ipv4 | 啟用 DHCP(yes /no /ipv4 /ipv6 ) |
DNS= | DNS=8.8.8.8 1.1.1.1 | 指定 DNS 服務器(空格分隔) |
Domains= | Domains=example.com | 設置 DNS 搜索域 |
Address= | Address=192.168.1.10/24 | 靜態 IP 地址(可重復定義多個地址) |
IPv6PrivacyExtensions= | IPv6PrivacyExtensions=yes | 啟用 IPv6 隱私擴展(隨機化地址) |
示例:
[Network]
DHCP=no
Address=192.168.1.10/24
Gateway=192.168.1.1
DNS=8.8.8.8
Domains=example.com
4. [Address]
塊:高級 IP 配置
為接口添加額外 IP 或精細控制。
參數 | 示例 | 說明 |
---|---|---|
Address= | Address=10.0.0.1/24 | IP 地址及子網掩碼 |
Peer= | Peer=10.0.0.2/24 | 點對點鏈路遠端地址(如 VPN) |
Broadcast= | Broadcast=192.168.1.255 | 手動覆蓋默認廣播地址 |
PreferredLifetime= | PreferredLifetime=1h | IPv6 地址首選生命周期 |
示例:
[Address]
Address=192.168.1.10/24
Broadcast=192.168.1.255[Address]
Address=10.0.0.1/24
Peer=10.0.0.2/24
5. [Route]
塊:自定義路由
定義靜態路由規則(支持 IPv4/IPv6)。
參數 | 示例 | 說明 |
---|---|---|
Destination= | Destination=0.0.0.0/0 | 目標子網(默認路由) |
Gateway= | Gateway=192.168.1.1 | 下一跳網關地址 |
Metric= | Metric=100 | 路由優先級(數值越小優先級越高) |
Type= | Type=blackhole | 特殊路由類型(如黑洞路由) |
示例:
[Route]
Destination=10.8.0.0/24
Gateway=192.168.1.2
Metric=200
6. [DHCP]
塊:DHCP 客戶端行為
控制 DHCP 客戶端細節(需在 [Network]
中啟用 DHCP)。
參數 | 示例 | 說明 |
---|---|---|
UseDNS= | UseDNS=no | 是否使用 DHCP 提供的 DNS |
UseDomains= | UseDomains=yes | 是否使用 DHCP 提供的搜索域 |
RouteMetric= | RouteMetric=100 | 為 DHCP 路由設置躍點數 |
ClientIdentifier= | ClientIdentifier=mac | DHCP 客戶端標識(mac 或 duid ) |
示例:
[DHCP]
UseDNS=no
RouteMetric=100
三、高級配置場景
1. VLAN 配置
# 創建 VLAN 接口 enp0s3.100
[Match]
Name=enp0s3[Network]
VLAN=enp0s3.100# VLAN 子接口配置
[Match]
Name=enp0s3.100[Network]
Address=10.0.100.2/24
Gateway=10.0.100.1
2. 綁定接口(Bonding)
# 創建綁定接口 bond0
[Match]
Name=bond0[Network]
Bond=slave1 slave2 # 指定從屬接口# 從屬接口配置
[Match]
Name=slave1[Network]
Bond=bond0
3. IPv6 隱私擴展
[Network]
IPv6PrivacyExtensions=yes
四、調試與驗證
1. 檢查接口狀態
networkctl status enp0s3 # 查看接口詳細狀態
networkctl list # 列出所有接口
2. 查看日志
journalctl -u systemd-networkd --since "5 minutes ago" # 查看近期日志
journalctl -u systemd-networkd -f # 實時跟蹤日志
3. 手動觸發重載
systemctl restart systemd-networkd # 重啟服務使配置生效
五、常見問題與解決方案
1. 配置未生效
? 原因:文件名優先級錯誤、語法錯誤、接口未匹配。
? 解決:
networkctl status <接口名> # 檢查配置是否加載
systemd-analyze verify *.network # 驗證語法
2. DHCP 獲取失敗
? 原因:防火墻阻塞、DHCP 服務未響應。
? 解決:
[DHCP]
UseDNS=no # 禁用 DHCP DNS(排除干擾)
RouteMetric=100 # 調整路由優先級
3. 多網卡沖突
? 解決:通過 [Match]
精確匹配接口,或調整文件名優先級。
六、最佳實踐
- 命名規范:文件名以數字開頭(如
10-wired.network
),確保優先級。 - 避免手動修改:若使用 NetPlan,優先通過 YAML 配置。
- 測試配置:使用
netplan try
或備份文件后再修改。 - 日志監控:實時跟蹤日志快速定位問題。
通過靈活組合上述配置塊,可高效管理從簡單家用網絡到企業級復雜拓撲的網絡環境。
systemd.network 部分文檔翻譯
Index · Directives
索引 · 指令
systemd devel
systemd 開發
Name
名稱
systemd.network
- 網絡配置
Synopsis
概要
network.network
Description
描述
一種純 INI 風格的文本文件,用于編碼與匹配網絡接口相關的網絡配置,供 systemd-networkd(8)
使用。語法的一般描述請參見 systemd.syntax(7)
。
主網絡文件必須使用 .network
擴展名;其他擴展名將被忽略。當鏈接出現時,網絡配置會被應用到對應的鏈接上。
.network
文件從位于系統網絡目錄 /usr/lib/systemd/network
和 /usr/local/lib/systemd/network
[1]、易失的運行時網絡目錄 /run/systemd/network
以及本地管理網絡目錄 /etc/systemd/network
中讀取。無論文件位于哪個目錄,所有配置文件會按字母數字順序排序并處理。然而,文件名相同的文件會互相覆蓋。建議每個文件名以小于 “70” 的數字開頭(例如 10-eth0.network
)。否則,默認的 .network
文件或由 systemd-network-generator.service(8)
生成的文件可能會優先于用戶配置的文件。/etc/
中的文件具有最高優先級,/run/
中的文件會覆蓋同名但位于 /usr/
下的文件。如有需要,這可以用于用本地文件覆蓋系統提供的配置文件。特殊情況下,空文件(文件大小為 0)或指向 /dev/null
的同名符號鏈接會完全禁用該配置文件(即 “masked”)。
與網絡文件 foo.network
一起,可能存在一個 “drop-in” 目錄 foo.network.d/
。該目錄中所有以 .conf
結尾的文件將按字母數字順序合并,并在主文件本身解析后解析。這對于在不修改主配置文件的情況下更改或添加配置設置非常有用。
除了 /etc/systemd/network
外,drop-in “.d” 目錄也可以放在 /usr/lib/systemd/network
或 /run/systemd/network
目錄中。/etc/
下的 drop-in 文件優先于 /run/
下的文件,而后者又優先于 /usr/lib/
下的文件。無論位于何處,這些 drop-in 文件都優先于主網絡文件。
[Match] 段選項
網絡文件包含一個 [Match]
段,用于確定給定的網絡文件是否適用于給定的接口;以及一個 [Network]
段,指定應如何配置接口。按字母數字順序排列的第一個匹配給定接口的網絡文件會被應用,所有后續文件即使匹配也會被忽略。
注意:任何設置了 ID_NET_MANAGED_BY=
udev 屬性的網絡接口將不會被任何 .network
文件匹配——除非該屬性的值是字符串 "io.systemd.Network"
——即使 [Match]
段中的其他條件匹配。這可以用于將特定網絡接口排除在 systemd-networkd
的管理之外,同時保持 [Match]
段的通用性。ID_NET_MANAGED_BY=
屬性聲明了設備的預期所有權,并確保并發的網絡管理實現不會爭相對特定設備進行管理。
當 [Match]
段中的所有條件都滿足時,網絡文件被稱為與網絡接口匹配。如果網絡文件的 [Match]
段中沒有有效設置,則文件將匹配所有接口,并且 systemd-networkd
會發出警告。提示:為避免警告并明確匹配所有接口,可添加以下內容:
Name=*
以下鍵值被接受:
MACAddress=
硬件地址的空白分隔列表。可接受的格式包括:
? 冒號分隔的十六進制(例如 "12:34:56:78:90:ab"
)
? 連字符分隔的十六進制(例如 "12-34-56-78-90-ab"
)
? 點分隔的十六進制(例如 "1234.5678.90ab"
)
? IPv4 地址格式(例如 "127.0.0.1"
)
? IPv6 地址格式(例如 "2001:db8::8a2e:370:7334"
)
每個 MAC 地址的總長度必須為 4(IPv4 隧道)、6(以太網)、16(IPv6 隧道)或 20(InfiniBand)。此選項可多次出現,此時列表會被合并。若賦值為空字符串,則重置先前定義的硬件地址列表。默認為未設置。
(添加于版本 211)
PermanentMACAddress=
硬件永久地址的空白分隔列表。MACAddress=
匹配設備的當前 MAC 地址,而此選項匹配設備的永久 MAC 地址(可能與當前不同)。使用全冒號、連字符或點分隔的十六進制,或 IPv4/IPv6 地址格式。此選項可多次出現,此時列表會被合并。若賦值為空字符串,則重置先前定義的硬件地址列表。默認為未設置。
(添加于版本 245)
Path=
匹配持久路徑的 shell 風格通配符列表,由 udev 屬性 ID_PATH
暴露。
(添加于版本 211)
Driver=
綁定到設備的當前驅動的 shell 風格通配符列表,由父設備的 udev 屬性 ID_NET_DRIVER
或設備本身的 ethtool -i
暴露。若列表前綴為 "!"
,則測試取反。
(添加于版本 211)
Type=
設備類型的 shell 風格通配符列表,由 networkctl list
暴露。有效值包括 "ether"
、"loopback"
、"wlan"
、"wwan"
。若列表前綴為 "!"
,則測試取反。
(添加于版本 211)
Kind=
設備類型的 shell 風格通配符列表,由 networkctl status INTERFACE
或 ip -d link show INTERFACE
暴露。有效值包括 "bond"
、"bridge"
、"gre"
、"tun"
、"veth"
。若列表前綴為 "!"
,則測試取反。
(添加于版本 251)
Property=
帶值的 udev 屬性名的空白分隔列表。多個屬性時,測試結果為邏輯與。若列表前綴為 "!"
,則測試取反。值包含空格時需用引號包裹,引號用 "\"
轉義。
示例:
Property=ID_MODEL_ID=9999 "ID_VENDOR_FROM_DATABASE=vendor name" "KEY=with \"quotation\""
(添加于版本 243)
Name=
設備名稱或替代名稱的 shell 風格通配符列表,由 udev 屬性 "INTERFACE"
暴露。若列表前綴為 "!"
,則測試取反。
(添加于版本 211)
WLANInterfaceType=
無線網絡類型的空白分隔列表。支持值:"ad-hoc"
、"station"
、"ap"
等。若列表前綴為 "!"
,則測試取反。
(添加于版本 244)
SSID=
當前連接的無線 LAN 的 SSID 的 shell 風格通配符列表。若列表前綴為 "!"
,則測試取反。
(添加于版本 244)
BSSID=
當前連接的無線 LAN 的硬件地址列表。格式同 MACAddress=
。
(添加于版本 244)
Host=
匹配主機名或機器 ID。參見 systemd.unit(5)
中的 ConditionHost=
。
(添加于版本 211)
Virtualization=
檢查是否在虛擬化環境中運行。參見 systemd.unit(5)
中的 ConditionVirtualization=
。
(添加于版本 211)
KernelCommandLine=
檢查特定內核命令行選項。參見 systemd.unit(5)
中的 ConditionKernelCommandLine=
。
(添加于版本 211)
KernelVersion=
檢查內核版本。參見 systemd.unit(5)
中的 ConditionKernelVersion=
。
(添加于版本 237)
Credential=
檢查是否傳遞了指定憑證給 systemd-udevd.service
。參見系統和服務憑證。
(添加于版本 252)
Architecture=
檢查系統架構。參見 systemd.unit(5)
中的 ConditionArchitecture=
。
(添加于版本 211)
Firmware=
檢查固件信息。參見 systemd.unit(5)
中的 ConditionFirmware=
。
(添加于版本 249)
[Link] 段配置選項
以下是 [Link]
段支持的配置參數及詳細說明:
MACAddress=
指定設備的硬件地址(MAC 地址)。
示例:
[Link]
MACAddress=00:11:22:33:44:55
自版本 218 起添加。
MTUBytes=
設置設備的 最大傳輸單元(MTU),單位為字節。支持后綴 K
、M
、G
(以 1024 為基數)。
注意:
- 如果接口啟用 IPv6 且 MTU 低于 1280(IPv6 的最小 MTU),系統會自動將其調整為 1280。
示例:
[Link]
MTUBytes=1500
自版本 218 起添加。
ARP=
控制是否啟用 IPv4 ARP(地址解析協議)和 IPv6 NDP(鄰居發現協議)。
- 類型:布爾值(
true
/false
)。 - 默認:未設置(遵循內核默認行為)。
用途: - 在創建多個 MACVLAN 或 VLAN 虛擬接口時,禁用 ARP 可防止底層物理接口參與網絡通信。
Multicast=
啟用或禁用設備的組播功能。
- 類型:布爾值。
- 默認:未設置。
自版本 239 起添加。
AllMulticast=
控制設備是否接收所有組播包(常用于組播路由場景)。
- 類型:布爾值。
- 默認:未設置。
自版本 239 起添加。
Promiscuous=
啟用或禁用接口的 混雜模式(接收所有網絡流量)。
- 類型:布爾值。
- 默認:未設置。
特殊場景: - 若在 MACVLAN/MACVTAP 的底層鏈接中設置為
false
,虛擬接口將以nopromisc
標志創建。
自版本 248 起添加。
Unmanaged=
控制是否由 systemd-networkd 管理該接口。
- 類型:布爾值(
yes
/no
)。 - 默認:
no
。
用途: - 設置為
yes
時,systemd-networkd 不會嘗試配置或啟用該接口,避免與其他應用程序管理的接口沖突。
自版本 233 起添加。
Group=
將接口加入指定組(類似交換機中的端口組),便于批量操作。
- 類型:無符號整數(范圍 0–2147483647)。
- 默認:未設置。
自版本 246 起添加。
RequiredForOnline=
定義接口是否被視為系統在線狀態的必要條件。
- 類型:布爾值、最小操作狀態(如
carrier
)或狀態范圍(如degraded:routable
)。 - 默認:
- 若未設置
ActivationPolicy=
或設置為up
/always-up
/bound
,默認為yes
。 - 若
ActivationPolicy=
設為manual
/down
,默認為no
。
特殊邏輯:
- 若未設置
- 對于 CAN 設備,布爾值
yes
對應carrier
狀態; - 對于主設備(如網橋或綁定接口),對應
degraded-carrier
; - 對于其他接口,對應
degraded
。
自版本 236/256 起添加。
RequiredFamilyForOnline=
指定在線狀態所需的地址族(IPv4/IPv6)。
- 可選值:
ipv4
、ipv6
、both
、any
。 - 默認:
no
(僅在RequiredForOnline=no
時生效)。
自版本 249 起添加。
ActivationPolicy=
控制 systemd-networkd 如何管理接口的 管理狀態(即 IFF_UP
標志)。
- 可選值:
up
(默認):接口配置時自動啟用。always-up
:始終強制啟用(即使接口狀態變化)。manual
:由管理員手動控制啟用/禁用。always-down
:始終禁用。bound
:與BindCarrier=
配合使用。
注意:
- 設置為
always-up
時,IgnoreCarrierLoss=
會被強制設為true
,以避免因物理連接中斷導致配置失敗。
自版本 248 起添加。
[Network] 段選項
[Network]
段接受以下鍵值配置:
Description=
- 描述:設備的描述信息,僅用于顯示用途。
- 版本:v211 新增。
DHCP=
- 描述:啟用 DHCPv4 和/或 DHCPv6 客戶端支持。可選值:
yes
、no
、ipv4
、ipv6
,默認為no
。 - 注意:
- 若啟用了 IPv6 的路由通告接收(
IPv6AcceptRA=
),無論此參數如何設置,DHCPv6 默認會被觸發。 - 顯式啟用 DHCPv6 時,客戶端會按
[DHCPv6]
段的WithoutRA=
模式運行,無論鏈路上是否存在路由器。 - 默認不將 DHCP 提供的域名用于解析,需通過
UseDomains=
配置。
- 若啟用了 IPv6 的路由通告接收(
- 版本:v211 新增。
DHCPServer=
- 描述:啟用 DHCPv4 服務器(布爾值,默認為
no
)。更多配置在[DHCPServer]
段。 - 注意:需配合
RelayTarget=
或PersistLeases=no
才能在存儲就緒后自動啟動。 - 版本:v215 新增。
LinkLocalAddressing=
- 描述:啟用鏈路本地地址自動配置。可選值:布爾值、
ipv4
、ipv6
。yes
或ipv6
:配置 IPv6 鏈路本地地址。yes
或ipv4
:在 DHCPv4 失敗后配置 IPv4 鏈路本地地址。
- 默認:若啟用
KeepMaster=
、Bridge=
或使用passthru
模式的 MACVLAN/MACVTAP,則為no
;否則為ipv6
。 - 版本:v219 新增。
IPv6LinkLocalAddressGenerationMode=
- 描述:指定 IPv6 鏈路本地地址生成模式。可選值:
eui64
、none
、stable-privacy
、random
。- 默認:若指定了
IPv6StableSecretAddress=
,則為stable-privacy
;否則為eui64
。
- 默認:若指定了
- 版本:v246 新增。
IPv6StableSecretAddress=
- 描述:指定用于生成 IPv6 鏈路本地地址的穩定密鑰地址。若設置此參數且未指定
IPv6LinkLocalAddressGenerationMode=
,則隱式啟用stable-privacy
模式。 - 版本:v249 新增。
IPv4LLStartAddress=
- 描述:指定嘗試的第一個 IPv4 鏈路本地地址(如
169.254.1.2
)。若未設置,自動選擇隨機地址。 - 版本:v252 新增。
IPv4LLRoute=
- 描述:是否為非 IPv4LL 主機設置與僅 IPv4LL 主機通信的路由(布爾值,默認為
false
)。 - 版本:v216 新增。
DefaultRouteOnDevice=
- 描述:在接口上綁定 IPv4 默認路由(布爾值,默認為
false
)。適用于點對點接口。 - 示例:
[Route] Gateway=0.0.0.0 Table=1234
- 版本:v243 新增。
LLMNR=
- 描述:啟用鏈路本地多播名稱解析(LLMNR)。可選值:布爾值或
resolve
(僅解析不注冊)。默認true
。 - 版本:v216 新增。
MulticastDNS=
- 描述:啟用多播 DNS(mDNS)。可選值:布爾值或
resolve
(僅解析不注冊)。默認false
。 - 版本:v229 新增。
DNSOverTLS=
- 描述:啟用 DNS-over-TLS。可選值:布爾值或
opportunistic
(兼容非 TLS 服務器)。默認繼承全局配置。 - 版本:v239 新增。
DNSSEC=
- 描述:啟用 DNSSEC 驗證。可選值:布爾值或
allow-downgrade
(兼容非 DNSSEC 網絡)。默認繼承全局配置。 - 版本:v229 新增。
LLDP=
- 描述:控制以太網 LLDP 數據包接收。可選值:布爾值或
routers-only
(僅收集路由器信息)。默認routers-only
。 - 版本:v219 新增。
EmitLLDP=
- 描述:控制 LLDP 數據包發送。可選值:布爾值或特定橋接模式。默認
false
。 - 版本:v230 新增。
BindCarrier=
- 描述:綁定到指定接口的載波狀態。若所有綁定接口無載波,則當前接口關閉。
- 版本:v220 新增。
Address=
- 描述:靜態 IPv4/IPv6 地址(格式:
地址/前綴長度
)。可多次指定。- 特殊值
0.0.0.0
或::
會從系統池自動分配地址范圍。 - IPv4 鏈路本地地址(169.254.0.0/16)默認啟用地址沖突檢測(RFC 5227),需通過
[Address]
段禁用。
- 特殊值
- 版本:v211 新增。
DNS=
- 描述:DNS 服務器地址(支持端口、接口和 SNI)。示例:
- IPv4:
111.222.333.444:9953%eth0#example.com
- IPv6:
[1111:2222::3333]:9953%eth0#example.com
- IPv4:
- 版本:v211 新增。
Domains=
- 描述:空格分隔的域名列表,指定通過此接口 DNS 解析的域。
~
前綴表示“僅路由域”(如~.
表示所有未匹配的查詢路由到此接口)。
- 版本:v216 新增。
NTP=
- 描述:NTP 服務器地址(IP 或主機名)。可多次指定。
- 版本:v216 新增。
IPMasquerade=
- 描述:啟用 IP 偽裝(NAT)。可選值:
ipv4
、ipv6
、both
、no
。默認no
。- 啟用時會自動設置
IPv4Forwarding=
和IPv6Forwarding=
。
- 啟用時會自動設置
- 版本:v219 新增。
IPv6PrivacyExtensions=
- 描述:啟用 IPv6 隱私擴展(RFC 4941)。可選值:布爾值、
prefer-public
、kernel
。默認繼承全局配置。 - 版本:v222 新增。
IPv6AcceptRA=
- 描述:是否接受 IPv6 路由通告(RA)。默認對橋接設備或啟用 IPv6 轉發時為
false
。 - 注意:內核的 RA 實現被禁用,使用用戶空間實現。
- 版本:v231 新增。
[Address] 段選項
[Address]
段用于配置單個地址,支持以下鍵值:
Address=
- 描述:必填,格式同
[Network]
段。 - 版本:v211 新增。
Peer=
- 描述:點對點連接的對端地址。
- 版本:v216 新增。
DuplicateAddressDetection=
- 描述:地址沖突檢測類型。可選值:
ipv4
、ipv6
、both
、none
。- 默認:IPv4 鏈路本地地址用
ipv4
,IPv6 用ipv6
。
- 默認:IPv4 鏈路本地地址用
- 版本:v232 新增。
NFTSet=
- 描述:將地址信息集成到 NFT 防火墻集。格式:
source:family:table:set
。- 示例:
prefix:netdev:filter:eth_ipv4_prefix
- 示例:
- 版本:v255 新增。
[Route] 段選項
[Route] 段接受以下配置項。可通過定義多個 [Route] 段來配置多條路由。
Gateway=
接受網關地址或特殊值 “_dhcp4” 與 “_ipv6ra”。若設置為 “_dhcp4” 或 “_ipv6ra”,則使用 DHCPv4 或 IPv6 RA 提供的網關地址。
自版本 211 起添加。
GatewayOnLink=
接受布爾值。若設為 true,內核無需檢查網關是否可直接到達(即位于本地網絡),從而允許將路由插入內核表而不觸發告警。默認為 “no”。
自版本 234 起添加。
Destination=
路由的目標前綴。可后接斜杠及前綴長度。若省略,則假定為完整的主機路由。
自版本 211 起添加。
Source=
路由的源前綴。可后接斜杠及前綴長度。若省略,則假定為完整的主機路由。
自版本 218 起添加。
Metric=
路由的度量值。接受 0…4294967295 范圍內的無符號整數。默認為未設置,使用內核默認值。
自版本 216 起添加。
IPv6Preference=
指定 RFC 4191 中定義的路由優先級(用于路由器發現消息)。可選值:“low”(最低優先級)、“medium”(默認優先級)或 “high”(最高優先級)。
自版本 234 起添加。
Scope=
IPv4 路由的作用域,可選值:“global”、“site”、“link”、“host” 或 “nowhere”:
- “global”:路由可到達多跳外的設備。
- “site”:本地自治系統內部路由。
- “link”:僅能到達本地網絡設備(單跳)。
- “host”:路由不離開本機(用于 127.0.0.1 等內部地址)。
- “nowhere”:目標不存在。
對于 IPv4 路由,若 Type= 為 “local” 或 “nat”,則默認為 “host”;若為 “broadcast”、“multicast”、“anycast” 或 “unicast”,則默認為 “link”;其他情況默認為 “global”。此選項不用于 IPv6。
自版本 219 起添加。
PreferredSource=
路由的首選源地址。地址格式需符合 inet_pton(3) 規范。
自版本 227 起添加。
Table=
路由表標識符。可選預定義名稱 “default”、“main”、“local”,或 networkd.conf(5) 中 RouteTable= 定義的名稱,或 1…4294967295 間的數字。可通過 ip route show table num
查看路由表。若未設置且 Type= 為 “local”、“broadcast”、“anycast” 或 “nat”,則使用 “local”;其他情況默認為 “main”。
自版本 230 起添加。
HopLimit=
配置每路由跳數限制。接受 1…255 間的整數。另見 IPv6HopLimit=。
自版本 255 起添加。
Protocol=
路由協議標識符。接受 0…255 間的數字或特殊值 “kernel”、“boot”、“static”、“ra”、“dhcp”。默認為 “static”。
自版本 234 起添加。
Type=
指定路由類型。可選值:“unicast”、“local”、“broadcast”、“anycast”、“multicast”、“blackhole”、“unreachable”、“prohibit”、“throw”、“nat”、“xresolve”。
- “unicast”:常規路由(指向目標網絡的路徑)。
- “blackhole”:靜默丟棄匹配路由的數據包。
- “unreachable”:丟棄數據包并生成 ICMP “Host Unreachable” 消息。
- “prohibit”:丟棄數據包并生成 ICMP “Communication Administratively Prohibited” 消息。
- “throw”:當前路由表查找失敗,返回至路由策略數據庫 (RPDB)。
默認為 “unicast”。
自版本 235 起添加。
InitialCongestionWindow=
TCP 初始擁塞窗口(用于連接建立階段)。客戶端請求資源時,服務器的初始擁塞窗口決定在未等待確認前可發送的初始數據包數量。接受 1…1023 間的數值(注:100 被視為極大值)。未設置時使用內核默認值(通常為 10)。
自版本 237 起添加。
InitialAdvertisedReceiveWindow=
TCP 初始通告接收窗口(以字節為單位),表示連接初始可緩沖的接收數據量。發送方需等待接收方確認及窗口更新后才能繼續發送。接受 1…1023 間的數值(注:100 被視為極大值)。未設置時使用內核默認值。
自版本 237 起添加。
QuickAck=
接受布爾值。為 true 時啟用該路由的 TCP 快速確認模式。未設置時使用內核默認值。
自版本 237 起添加。
FastOpenNoCookie=
接受布爾值。為 true 時在路由層面啟用無需 Cookie 的 TCP 快速打開。未設置時使用內核默認值。
自版本 243 起添加。
MTUBytes=
設置路由的最大傳輸單元(字節)。支持后綴 K、M、G(基數為 1024)。
自版本 239 起添加。
TCPAdvertisedMaximumSegmentSize=
指定 TCP 層的路徑 MSS(最大報文段大小,字節)。支持后綴 K、M、G(基數為 1024)。接受 1…4294967294 間的無符號整數。未設置時使用內核默認值。
自版本 248 起添加。
TCPCongestionControlAlgorithm=
指定路由的 TCP 擁塞控制算法(如 “bbr”、“dctcp”、“vegas”)。未設置時使用內核默認值。
自版本 252 起添加。
TCPRetransmissionTimeoutSec=
指定路由的 TCP 重傳超時時間(秒)。定義存活 TCP 連接在重傳未確認時的超時值。未設置時使用內核默認值。
自版本 255 起添加。
MultiPathRoute=地址[@接口名] [權重]
配置多路徑路由(通過多條路徑傳輸數據)。接受網關地址,可選附加:
- 以 “@” 分隔的網絡接口名或索引
- 以空格分隔的權重值(1…256)
此選項可多次指定。若賦值為空字符串,則清除之前所有配置。
自版本 245 起添加。
NextHop=
指定下一跳 ID。接受 1…4294967295 間的無符號整數。若設置,需配置對應的 [NextHop] 段。默認為未設置。
自版本 248 起添加。
[Route] 段配置選項 2
以下是 [Route]
段支持的參數及其詳細說明:
Gateway=
指定路由的 網關地址。特殊值 _dhcp4
或 _ipv6ra
表示從 DHCPv4 或 IPv6 RA 動態獲取網關地址。
示例:
[Route]
Gateway=192.168.1.1
自版本 211 起添加。
GatewayOnLink=
控制是否允許網關不在直接連接的網絡上。類型:布爾值(true
/false
)。默認值:false
(需驗證網關可達性)。
用途:
- 若設為
true
,即使網關不在本地網絡,仍可強制添加路由(例如用于 VPN 場景)。
自版本 234 起添加。
Destination=
路由的 目標網絡前綴(格式:IP/前綴長度
)。若省略,默認為全長度主機路由。
示例:
[Route]
Destination=10.0.0.0/24
自版本 211 起添加。
Source=
路由的 源地址前綴(格式:IP/前綴長度
)。若省略,默認為全長度主機路由。
自版本 218 起添加。
Metric=
路由的 度量值(優先級),范圍 0–4294967295。默認:繼承內核設置。
注意:度量值越小,優先級越高。
自版本 216 起添加。
IPv6Preference=
定義 IPv6 路由的優先級(RFC 4191)。可選值:
low
(最低優先級)medium
(默認)high
(最高優先級)
自版本 234 起添加。
Scope=
IPv4 路由的 作用域,可選值:
global
(跨多跳可達)site
(本地自治系統內部)link
(僅本地網絡)host
(僅本機內部,如 127.0.0.1)nowhere
(目標不存在)
默認邏輯:- 若
Type=local
或nat
,默認為host
; - 若
Type=broadcast
、multicast
等,默認為link
; - 其他情況默認為
global
。
自版本 219 起添加。
PreferredSource=
指定路由的 首選源地址(格式:IPv4/IPv6 地址)。
示例:
[Route]
PreferredSource=192.168.1.100
自版本 227 起添加。
Table=
路由表標識符。可選值:
- 預定義名稱:
default
、main
、local
- 自定義名稱(通過
networkd.conf
的RouteTable=
定義) - 數字 1–4294967295
默認: - 若
Type=local
、broadcast
等,默認為local
; - 其他情況默認為
main
。
自版本 230 起添加。
Type=
路由類型,控制數據包處理方式。可選值:
unicast
(常規路由)blackhole
(靜默丟棄數據包)unreachable
(丟棄并返回 “Host Unreachable”)prohibit
(丟棄并返回 “Administratively Prohibited”)throw
(路由查找失敗,返回 RPDB)nat
(網絡地址轉換)
默認值:unicast
。
自版本 235 起添加。
Type=
- 接受值:
- unicast:常規路由
- local:本地路由
- broadcast:廣播路由
- anycast:任播路由
- multicast:組播路由
- blackhole:靜默丟棄數據包
- unreachable:丟棄并返回「主機不可達」ICMP消息
- prohibit:丟棄并返回「通信被管理禁止」ICMP消息
- throw:終止當前路由表查詢,返回 RPDB
- nat:NAT路由
- xresolve:需解析的路由
- 默認值:“unicast”
- 版本:自版本 235 起添加
MultiPathRoute=
配置 多路徑路由(支持多個網關負載均衡)。格式:地址@接口名 權重
。
示例:
[Route]
MultiPathRoute=192.168.1.1@eth0 100
MultiPathRoute=192.168.2.1@eth1 200
自版本 245 起添加。
NextHop=
關聯的下一跳配置(需配合 [NextHop]
段使用)。范圍:1–4294967295。
自版本 248 起添加。
高級網絡參數
TCP 優化相關
InitialCongestionWindow=
:TCP 初始擁塞窗口大小(1–1023)。默認值通常為 10。TCPCongestionControlAlgorithm=
:指定擁塞控制算法(如bbr
、dctcp
)。TCPRetransmissionTimeoutSec=
:TCP 重傳超時時間(秒)。
MTU 控制
MTUBytes=
:路由的最大傳輸單元(支持K
、M
后綴)。TCPAdvertisedMaximumSegmentSize=
:TCP 路徑 MSS 提示值。
參考
: 根據 systemd.network(5)
手冊,路由配置文件的優先級由 /etc/systemd/network
> /run/systemd/network
> /usr/lib/systemd/network
決定,按字典順序加載首個匹配的 .network
文件。