Ubuntu-Server 设置多个ip和多个ipv6 笔记250320
Ubuntu-Server 设置多个ip和多个ipv6
在 Ubuntu Server 上为同一网卡配置多个 IPv4 和 IPv6 地址,
Ubuntu-server-16 用的是 /etc/network/interfaces
配置的 networking
Ubuntu-server-17.10 及更新版本默认用的是 systemd-networkd + Netplan , 用 Netplan来管理systemd-networkd
对于 Ubuntu-server- 17.10 及更新版本,可以通过 Netplan(Ubuntu 默认网络配置工具)或直接使用 systemd-networkd 实现。以下是详细步骤和示例:
方法一:使用 Netplan 配置(推荐)
步骤 1:确认网卡名称
通过以下命令查看网卡名称(如 ens33
、enp0s3
):
ip a
步骤 2:备份并编辑 Netplan 配置文件
Ubuntu Server 的 Netplan 配置文件通常位于 /etc/netplan/
目录下,文件名类似 00-installer-config.yaml
或 50-cloud-init.yaml
。
备份并编辑配置文件:
sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak
sudo nano /etc/netplan/00-installer-config.yaml
示例配置(多 IPv4 + 多 IPv6)
network:
version: 2
renderer: networkd # 使用 systemd-networkd 作为后端
ethernets:
ens33: # 替换为你的网卡名称
addresses:
- 192.168.1.100/24 # 主 IPv4 地址
- 192.168.1.101/24 # 第二个 IPv4 地址
- "2001:db8::100/64" # 主 IPv6 地址(引号避免 YAML 解析问题)
- "2001:db8::101/64" # 第二个 IPv6 地址
routes:
- to: default
via: 192.168.1.1 # IPv4 网关
- to: default
via: 2001:db8::1 # IPv6 网关
nameservers:
addresses:
- 8.8.8.8 # IPv4 DNS
- 2001:4860:4860::8888 # IPv6 DNS
dhcp4: false # 关闭 IPv4 DHCP
dhcp6: false # 关闭 IPv6 DHCP
accept-ra: false # 关闭 IPv6 路由宣告(确保静态配置生效)
network:
version: 2
renderer: networkd
ethernets:
ens33: # 替换为你的网卡名称(用 `ip a` 查看)
# IPv4配置
addresses:
- 192.168.1.10/24
- 192.168.1.11/24
# IPv6配置
addresses6:
- 2001:db8::1/64
- 2001:db8::2/64
routes:
- to: default
via: 192.168.1.1 # IPv4默认网关
routes6:
- to: default
via: fe80::1 # IPv6默认网关(可选)
nameservers:
addresses:
- 8.8.8.8 # IPv4 DNS
- 2001:4860:4860::8888 # IPv6 DNS
network:
version: 2
renderer: networkd
ethernets:
ens33:
addresses:
- 192.168.1.10/24
- 192.168.1.11/24
- 2001:db8::1/64
- 2001:db8::2/64
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 2001:4860:4860::8888]
network:
version: 2
renderer: networkd
ethernets:
ens3:
dhcp4: no # 禁用IPv4 DHCP
dhcp6: no # 禁用IPv6 DHCP
addresses:
- 192.168.1.100/24 # 主IPv4地址
- 192.168.1.101/24 # 第二个IPv4地址
- 2001:db8::1/64 # 主IPv6地址
- 2001:db8::2/64 # 第二个IPv6地址
gateway4: 192.168.1.1 # IPv4网关
gateway6: 2001:db8::fefe # IPv6网关
nameservers:
addresses: [8.8.8.8, 2001:4860:4860::8888] # DNS服务器
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
dhcp6: no
addresses:
- 192.168.1.100/24
- 192.168.1.101/24
- 2001:db8:1::1/64
- 2001:db8:1::2/64
gateway4: 192.168.1.1
gateway6: 2001:db8:1::ff
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses:
- 192.168.1.100/24
- 192.168.1.101/24
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
dhcp6: no
addresses:
- 2001:db8::1/64
- 2001:db8::2/64
gateway6: 2001:db8::ff
network:
version: 2
ethernets:
ens33:
addresses:
- 192.168.1.10/24
- 192.168.1.11/24
- 2001:db8::1/64
- 2001:db8::2/64
gateway4: 192.168.1.1
gateway6: 2001:db8::1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
- 2001:4860:4860::8888
- 2001:4860:4860::8844
network:
version: 2
renderer: networkd
ethernets:
enp0s3: # 网卡名称(通过`ip link`命令查询)
addresses:
- 192.168.1.10/24 # 主IPv4地址
- 192.168.1.11/24 # 第二个IPv4地址
- 2001:db8::100/64 # 主IPv6地址
- 2001:db8::101/64 # 第二个IPv6地址
routes:
- to: 0.0.0.0/0
via: 192.0.2.1 # IPv4网关
metric: 100
- to: ::/0
via: 2001:db8::1 # IPv6网关
metric: 100
nameservers:
addresses: [8.8.8.8, 2001:4860:4860::8888] # DNS服务器
dhcp4: no # 关闭IPv4 DHCP
dhcp6: no # 关闭IPv6 DHCP
network:
ethernets: # 网卡名称(根据实际名称修改,如ens33)
ens33:
dhcp4: no # 禁用IPv4 DHCP
dhcp6: no # 禁用IPv6 DHCP
addresses: # IPv4地址列表(CIDR格式)
- 192.168.1.100/24 # 主IPv4
- 192.168.1.101/24 # 第二个IPv4
addresses6: # IPv6地址列表
- 2001:db8::1/64 # 主IPv6
- 2001:db8::2/64 # 第二个IPv6
routes:
- to: default # IPv4默认路由
via: 192.168.1.1 # IPv4网关
- to: ::/0 # IPv6默认路由
via: 2001:db8::1 # IPv6网关
nameservers:
addresses: # DNS服务器(IPv4和IPv6混合)
- 8.8.8.8 # Google IPv4 DNS
- 2001:4860:4860::8888 # Google IPv6 DNS
network:
version: 2
renderer: networkd
ethernets:
ens160:
# 多个 IPv4 地址
addresses:
- 192.168.1.10/24
- 192.168.1.11/24
# IPv4 网关
routes:
- to: default
via: 192.168.1.1
metric: 100
# 多个 IPv6 地址
addresses:
- 2001:db8::1/64
- 2001:db8::2/64
# IPv6 网关(禁用自动配置)
accept-ra: no
routes:
- to: default
via: 2001:db8::1
metric: 200
network:
version: 2
renderer: networkd
ethernets:
ens33:
addresses:
- 192.168.1.100/24 # 主IPv4地址
- 192.168.1.101/24 # 附加IPv4地址
- 2001:db8::1/64 # 主IPv6地址
- 2001:db8::2/64 # 附加IPv6地址
routes:
- to: 0.0.0.0/0
via: 192.168.1.1 # IPv4默认网关
- to: ::/0
via: 2001:db8::1 # IPv6默认网关
nameservers:
addresses: [8.8.8.8, 2001:4860:4860::8888]
network:
version: 2
renderer: networkd # Ubuntu Server 默认使用 networkd
ethernets:
enp0s3: # 替换为你的网卡名称
addresses:
- 192.168.1.100/24 # 主 IPv4 地址
- 192.168.1.101/24 # 第二个 IPv4 地址
- "2001:db8::100/64" # 主 IPv6 地址(建议引号包裹)
- "2001:db8::101/64" # 第二个 IPv6 地址
routes:
- to: default # IPv4 默认路由
via: 192.168.1.1 # IPv4 网关
metric: 100 # 可选:路由优先级
- to: default # IPv6 默认路由
via: 2001:db8::1 # IPv6 网关
metric: 100
nameservers:
addresses:
- 8.8.8.8 # IPv4 DNS
- 2001:4860:4860::8888 # IPv6 DNS
dhcp4: false # 关闭 IPv4 DHCP
dhcp6: false # 关闭 IPv6 DHCP
accept-ra: false # 关闭 IPv6 路由宣告(避免与静态配置冲突)
步骤 3:应用配置
sudo netplan apply
验证配置
-
检查 IP 地址:
ip a show ens33
输出应包含所有配置的 IPv4 和 IPv6 地址。
-
测试连通性:
ping -4 8.8.8.8 -c 3 # IPv4 测试 ping -6 2001:4860:4860::8888 -c 3 # IPv6 测试
方法二:直接使用 systemd-networkd
步骤 1:禁用其他网络管理工具
确保关闭 NetworkManager
和 networking.service
:
sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager
sudo systemctl stop networking
sudo systemctl disable networking
步骤 2:启用 systemd-networkd
sudo systemctl enable systemd-networkd
sudo systemctl start systemd-networkd
步骤 3:创建网络配置文件
在 /etc/systemd/network/
目录下创建配置文件(例如 10-ens33.network
):
sudo nano /etc/systemd/network/10-ens33.network
示例配置
[Match]
Name=ens33 # 替换为实际网卡名称
[Network]
# IPv4 地址
Address=192.168.1.100/24
Address=192.168.1.101/24
# IPv6 地址
Address=2001:db8::100/64
Address=2001:db8::101/64
# 网关
Gateway=192.168.1.1
Gateway=2001:db8::1%ens33 # IPv6 网关需指定网卡名
# DNS
DNS=8.8.8.8
DNS=2001:4860:4860::8888
步骤 4:重启服务
sudo systemctl restart systemd-networkd
验证
ip a show ens33
ip -4 route
ip -6 route
常见问题解决
1. IP 地址未生效
- 检查配置语法:Netplan 使用 YAML 格式,缩进必须为空格(不能用 Tab)。
- 验证服务状态:
sudo systemctl status systemd-networkd # 检查 systemd-networkd journalctl -u systemd-networkd # 查看日志
2. IPv6 网关配置错误
- 格式要求:IPv6 网关需指定网卡名称(如
2001:db8::1%ens33
)。 - 检查路由表:
ip -6 route
3. DNS 解析失败
- 配置 DNS:确保
nameservers
或DNS
字段已指定正确的 DNS 服务器。 - 重启
systemd-resolved
:sudo systemctl restart systemd-resolved
关键注意事项
- 网卡名称:必须通过
ip a
确认实际名称。 - IPv6 地址格式:
- 必须包含前缀长度(如
/64
)。 - 建议用双引号包裹(避免 YAML 解析错误)。
- 必须包含前缀长度(如
- 服务冲突:确保仅启用一种网络管理工具(Netplan 或 systemd-networkd)。
扩展配置
1. 临时添加 IP 地址(无需重启)
# 临时添加 IPv4
sudo ip addr add 192.168.1.102/24 dev ens33
# 临时添加 IPv6
sudo ip addr add 2001:db8::102/64 dev ens33
2. 使用别名接口(传统方法)
# 创建子接口配置文件(不推荐,仅兼容旧系统)
sudo nano /etc/network/interfaces.d/ens33:1
# 内容示例
auto ens33:1
iface ens33:1 inet static
address 192.168.1.102/24
通过上述方法,你可以灵活地为 Ubuntu Server 配置多个静态 IPv4 和 IPv6 地址,适用于负载均衡、多服务隔离等场景。
直接使用systemd-networkd同时配置多个ipv4和ipv6
在 Ubuntu Server 中直接使用 systemd-networkd 配置多个 IPv4 和 IPv6 地址的步骤如下:
步骤 1:确认网卡名称
ip a
记录需要配置的网卡名称(例如 eth0
、enp0s3
)。
步骤 2:禁用其他网络管理工具
确保关闭 NetworkManager
或 networking.service
(若已启用):
sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager
sudo systemctl stop networking
sudo systemctl disable networking
步骤 3:启用 systemd-networkd
sudo systemctl enable systemd-networkd
sudo systemctl start systemd-networkd
步骤 4:创建网络配置文件
在 /etc/systemd/network/
目录下为网卡创建配置文件(文件名格式:<优先级>-<网卡名>.network
,例如 10-eth0.network
)。
示例配置(多个 IPv4 + 多个 IPv6):
sudo nano /etc/systemd/network/10-eth0.network
[Match]
Name=eth0 # 替换为实际网卡名称
[Network]
# IPv4 地址配置
Address=192.168.1.100/24
Address=192.168.1.101/24
# IPv6 地址配置
Address=2001:db8::100/64
Address=2001:db8::101/64
# IPv4 网关
Gateway=192.168.1.1
# IPv6 网关
Gateway=2001:db8::1%eth0 # 注意格式:网关地址%网卡名
# DNS 服务器
DNS=8.8.8.8
DNS=2001:4860:4860::8888
[Match]
Name=ens33 # 替换为你的网卡名称
[Network]
# IPv4配置
Address=192.168.1.10/24
Address=192.168.1.11/24
Gateway=192.168.1.1
DNS=8.8.8.8
# IPv6配置
Address=2001:db8::1/64
Address=2001:db8::2/64
Gateway=fe80::1
DNS=2001:4860:4860::8888
# 禁用IPv6自动配置(可选)
IPv6AcceptRA=false
[Match]
Name=eth0
[Network]
# IPv4配置
Address=192.168.1.100/24
Address=192.168.1.101/24
Gateway=192.168.1.1
# IPv6配置
IPv6Address=2001:db8::1/64
IPv6Address=2001:db8::2/64
IPv6Gateway=2001:db8::fefe
# DNS服务器
DNS=8.8.8.8
DNS=2001:4860:4860::8888
# 启用IPv6路由
IPv6AcceptRA=yes
[Match]
Name=eth0
[Network]
# 禁用 DHCP
DHCP=no
# 配置多个 IPv4 地址
Address=192.168.1.100/24
Address=192.168.1.101/24
# 配置 IPv4 网关
Gateway=192.168.1.1
# 配置多个 IPv6 地址
Address=2001:db8:1::1/64
Address=2001:db8:1::2/64
# 配置 IPv6 网关
Gateway=2001:db8:1::ff
# 配置 DNS 服务器
DNS=8.8.8.8
DNS=8.8.4.4
[Match]
Name=eth0
[Network]
Address=192.168.1.100/24
Address=192.168.1.101/24
Address=2001:db8::1/64
Address=2001:db8::2/64
Gateway=192.168.1.1
Gateway=2001:db8::ff
DNS=8.8.8.8
DNS=8.8.4.4
[Match]
Name=ens33
[Network]
Address=192.168.1.10/24
Address=192.168.1.11/24
Address=2001:db8::1/64
Address=2001:db8::2/64
Gateway=192.168.1.1
Gateway=2001:db8::1
[DNS]
Servers=8.8.8.8
Servers=8.8.4.4
Servers=2001:4860:4860::8888
Servers=2001:4860:4860::8844
[Match]
Name=ens3 # 修改为实际接口名
[Network]
# IPv4配置
Address=192.168.1.100/24 # 主IPv4地址
Address=192.168.1.101/24 # 第二个IPv4地址
Gateway=192.168.1.1 # IPv4网关
# IPv6配置
Address=2001:db8::1/64 # 主IPv6地址
Address=2001:db8::2/64 # 第二个IPv6地址
Gateway=fe80::1 # IPv6网关
# DNS配置
DNS=8.8.8.8
DNS=2001:4860:4860::8888
Domains=example.com
# /etc/systemd/network/ifcfg-ens33.ini
[Match]
Name=ens33 # 网卡名称(需与实际一致)
[Network]
DHCP4=no # 禁用IPv4 DHCP
DHCP6=no # 禁用IPv6 DHCP
Address=192.168.1.100/24 # IPv4地址1
Address=192.168.1.101/24 # IPv4地址2
Address6=2001:db8::1/64 # IPv6地址1
Address6=2001:db8::2/64 # IPv6地址2
# 路由配置(可选)
RouteTo=default via 192.168.1.1 # IPv4默认路由
RouteTo=::/0 via 2001:db8::1 # IPv6默认路由
# DNS配置(双栈支持)
DNS=8.8.8.8 # IPv4 DNS
DNS=2001:4860:4860::8888 # IPv6 DNS
[Match]
Name=eth0
[Network]
# IPv4 配置
DHCP=yes # 启用 DHCP 获取主 IPv4 地址
# IPv6 配置
IPv6AcceptRA=yes # 启用 IPv6 路由器公告(如需要 SLAAC)
# 添加多个静态 IPv4 地址
[Address]
Address=192.168.1.10/24
[Address]
Address=192.168.1.11/24
# 添加多个静态 IPv6 地址
[Address]
Address=2001:db8::1/64
[Address]
Address=2001:db8::2/64
# 手动指定网关(若需覆盖 DHCP/RA 提供的默认路由)
[Route]
Gateway=192.168.1.1 # IPv4 网关
Destination=0.0.0.0/0 # 默认路由
[Route]
Gateway=fe80::1 # IPv6 网关(通常为链路本地地址)
Destination=::/0 # 默认路由
[Match]
Name=ens33
[Network]
# 主IPv4地址 + 附加IPv4
Address=192.168.1.100/24
Address=192.168.1.101/24
# 主IPv6地址 + 附加IPv6
Address=2001:db8::1/64
Address=2001:db8::2/64
# IPv4默认网关
Gateway=192.168.1.1
# IPv6默认网关(需单独配置路由)
[Route]
Destination=::/0
Gateway=2001:db8::1
# DNS配置(IPv4和IPv6均可)
DNS=8.8.8.8
DNS=2001:4860:4860::8888
步骤 5:重启systemd-networkd服务,应用配置
sudo systemctl restart systemd-networkd
systemd-networkd配置文件说明
以下是 systemd-networkd 配置文件的详细说明,涵盖文件结构、常用配置段和参数含义,帮助你灵活管理网络接口。
1. 配置文件基础
-
存放路径:
/etc/systemd/network/
-
文件命名规则:
<优先级>-<自定义名称>.<类型>
示例:10-eth0.network
(网络接口配置)20-vlan10.netdev
(虚拟网络设备配置)30-br0.network
(桥接接口配置)
-
文件类型:
类型 用途 .network
配置网络接口(IP、路由、DNS等) .netdev
创建虚拟设备(VLAN、桥接、隧道等) .link
配置网卡属性(MAC地址、速率等)
2. 核心配置段详解
(1) [Match]
段
定义配置文件的生效条件,匹配物理或虚拟接口。
常用参数:
参数 | 说明 | 示例 |
---|---|---|
Name | 匹配接口名称(支持通配符 * ) | Name=eth0 |
MACAddress | 匹配接口的 MAC 地址 | MACAddress=00:11:22:33:44:55 |
Type | 匹配设备类型(如 ether 、vlan ) | Type=ether |
Driver | 匹配网卡驱动名称 | Driver=e1000 |
示例:
[Match]
Name=eth0
MACAddress=00:11:22:33:44:55
(2) [Link]
段
配置网络接口的物理层属性(需在 .link
文件中使用)。
常用参数:
参数 | 说明 | 示例 |
---|---|---|
MACAddress | 设置 MAC 地址 | MACAddress=00:11:22:33:44:55 |
MTUBytes | 设置最大传输单元(MTU) | MTUBytes=1500 |
WakeOnLan | 启用 Wake-on-LAN | WakeOnLan=magic |
Port | 设置网卡端口类型(如 mii ) | Port=光纤 |
示例:
[Link]
MACAddress=00:11:22:33:44:55
MTUBytes=9000
(3) [Network]
段
定义网络层配置(IP 地址、网关、DNS 等)。
常用参数:
参数 | 说明 | 示例 |
---|---|---|
Address | 静态 IP 地址(支持 IPv4/IPv6) | Address=192.168.1.100/24 |
Gateway | 默认网关(IPv4 和 IPv6 需分开指定) | Gateway=192.168.1.1 |
DNS | DNS 服务器地址 | DNS=8.8.8.8 |
Domains | 域名搜索列表 | Domains=example.com |
DHCP | 启用 DHCP(yes /no /ipv4 /ipv6 ) | DHCP=ipv4 |
IPv6PrivacyExtensions | 启用 IPv6 隐私扩展 | IPv6PrivacyExtensions=yes |
Bridge | 将接口加入桥接设备 | Bridge=br0 |
VLAN | 将接口加入 VLAN | VLAN=vlan10 |
示例:
[Network]
Address=192.168.1.100/24
Address=2001:db8::100/64
Gateway=192.168.1.1
Gateway=2001:db8::1%eth0 # IPv6 网关需指定网卡名
DNS=8.8.8.8
DHCP=no
(4) [Address]
段
细化 IP 地址配置(可选,用于高级场景)。
常用参数:
参数 | 说明 | 示例 |
---|---|---|
Address | IP 地址及前缀 | Address=192.168.1.100/24 |
Peer | 点对点连接的远端地址 | Peer=10.0.0.1 |
PreferredLifetime | IP 地址的首选生命周期(秒) | PreferredLifetime=3600 |
示例:
[Address]
Address=192.168.1.100/24
PreferredLifetime=3600
(5) [Route]
段
自定义路由规则(支持 IPv4/IPv6)。
常用参数:
参数 | 说明 | 示例 |
---|---|---|
Destination | 目标网络(CIDR 格式) | Destination=10.0.0.0/24 |
Gateway | 路由网关 | Gateway=192.168.1.1 |
Metric | 路由优先级(数值越小优先级越高) | Metric=100 |
Table | 指定路由表(需预先定义) | Table=100 |
Type | 路由类型(如 unicast 、blackhole ) | Type=blackhole |
示例:
[Route]
Destination=10.0.0.0/24
Gateway=192.168.1.2
Metric=200
(6) [DHCP]
段
配置 DHCP 客户端行为(需在 [Network]
段启用 DHCP=yes
)。
常用参数:
参数 | 说明 | 示例 |
---|---|---|
UseDNS | 是否使用 DHCP 提供的 DNS | UseDNS=yes |
RouteMetric | DHCP 获取路由的优先级 | RouteMetric=100 |
UseHostname | 是否使用 DHCP 提供的主机名 | UseHostname=no |
示例:
[DHCP]
UseDNS=no
RouteMetric=200
3. 典型配置示例
场景 1:静态 IP + 多 IPv6 地址
[Match]
Name=eth0
[Network]
Address=192.168.1.100/24
Address=2001:db8::100/64
Address=2001:db8::101/64
Gateway=192.168.1.1
Gateway=2001:db8::1%eth0
DNS=8.8.8.8
DNS=2001:4860:4860::8888
场景 2:DHCP + 静态 IPv6
[Match]
Name=eth0
[Network]
DHCP=ipv4
Address=2001:db8::100/64
Gateway=2001:db8::1%eth0
场景 3:VLAN 配置
- 创建 VLAN 设备(
vlan10.netdev
):[NetDev] Name=vlan10 Kind=vlan [VLAN] Id=10
- 配置 VLAN 接口(
vlan10.network
):[Match] Name=vlan10 [Network] Address=192.168.10.100/24 Gateway=192.168.10.1
4. 调试与验证
检查配置状态
networkctl status eth0 # 查看接口状态
networkctl list # 列出所有接口
查看日志
journalctl -u systemd-networkd -f # 实时日志
journalctl -u systemd-networkd --since "5 minutes ago" # 最近5分钟日志
验证 DNS 配置
resolvectl status # 查看 DNS 解析状态
5. 常见问题
Q1:配置未生效
- 检查步骤:
- 确认配置文件命名正确(如
10-eth0.network
)。 - 使用
networkctl reload
重新加载配置。 - 检查日志:
journalctl -u systemd-networkd
。
- 确认配置文件命名正确(如
Q2:IPv6 网关配置失败
- 原因:IPv6 网关需指定网卡名称(如
2001:db8::1%eth0
)。 - 验证命令:
ip -6 route show default
Q3:DNS 解析失败
- 解决方法:
- 确保
DNS=
参数已配置。 - 重启服务:
systemctl restart systemd-resolved
- 确保
6. 总结
- 优势:
- 轻量、高效,与 systemd 深度集成。
- 支持复杂网络拓扑(VLAN、桥接、隧道等)。
- 适用场景:
- 服务器、容器、嵌入式设备等静态网络环境。
- 需通过代码管理的自动化部署场景。
通过灵活使用 systemd-networkd
的配置文件,可以实现从简单到复杂的网络需求。
以下是 systemd-networkd
配置文件的详细说明,帮助您自定义网络设置:
配置文件结构
-
文件位置:
- 配置文件通常位于
/etc/systemd/network/
,命名格式为<优先级>-<网卡名>.network
(如10-ens33.network
)。
- 配置文件通常位于
-
基本组成:
[Match]
:定义匹配规则(如网卡名称、MAC地址)。[Network]
:配置网络参数(IP、网关、DNS等)。[Route]
(可选):定义静态路由。[RoutingPolicyRule]
(可选):定义策略路由。
核心配置段说明
1. [Match] 段
- 作用:匹配网络接口。
- 常用参数:
[Match] Name=ens33 # 按网卡名匹配 MACAddress=aa:bb:cc:dd:ee:ff # 按MAC地址匹配 Driver=e1000e # 按驱动名匹配
2. [Network] 段
- 作用:定义网络核心参数。
- 常用参数:
[Network] Address=192.168.1.10/24 # IPv4地址(CIDR格式) Address=2001:db8::1/64 # IPv6地址 Gateway=192.168.1.1 # 默认网关(IPv4) Gateway=fe80::1 # 默认网关(IPv6) DNS=8.8.8.8 # DNS服务器(可多个,空格分隔) DNS=2001:4860:4860::8888 Domains=example.com # DNS搜索域 IPv6PrivacyExtensions=true # 启用IPv6临时地址 IPv6AcceptRA=false # 禁用IPv6路由器通告
3. [Route] 段(静态路由)
- 作用:定义静态路由规则。
- 示例:
[Route] Destination=10.0.0.0/8 # 目标网络 Gateway=192.168.1.254 # 下一跳网关 Metric=100 # 路由优先级
4. [RoutingPolicyRule] 段(策略路由)
- 作用:基于条件(如源IP、端口)定义路由规则。
- 示例:
[RoutingPolicyRule] From=192.168.1.100 # 匹配源IP To=203.0.113.45 # 匹配目标IP Table=200 # 使用路由表200 Priority=100 # 规则优先级
多IP配置技巧
-
同一接口多IP:
[Network] Address=192.168.1.10/24 Address=192.168.1.11/24 Address=2001:db8::1/64 Address=2001:db8::2/64
-
混合IPv4/IPv6网关:
Gateway=192.168.1.1 # IPv4默认网关 Gateway=fe80::1 # IPv6默认网关
DNS高级配置
-
DNS优先级:
DNS=8.8.8.8 2001:4860:4860::8888 # 按顺序查询
-
DNSSEC与缓存:
DNSSEC=true # 启用DNSSEC验证 DNSSECNegativeTrustAnchors= # 配置DNSSEC信任锚 LLDP=true # 启用LLDP协议(网络设备发现)
配置验证与调试
-
检查配置语法:
sudo systemd-networkd-wait-online --interface=ens33 --timeout=10
-
查看生效配置:
sudo networkctl status ens33
-
日志排查:
journalctl -u systemd-networkd -n 50 --no-pager
注意事项
- 缩进规则:使用空格(非Tab),层级对齐。
- 优先级冲突:避免多个配置文件匹配同一接口。
- 重启生效:修改后执行
sudo systemctl restart systemd-networkd
。
通过灵活组合这些配置段,您可以实现复杂网络需求(如多IP负载均衡、策略路由、混合IPv4/IPv6环境)。
Ubuntu-server-16.04 设置多个ip和多个ipv6
在Ubuntu Server 16.04中为单个网卡配置多个IPv4和IPv6地址,需通过修改网络配置文件实现。以下是分步指南:
一、配置多个IPv4地址
-
编辑网络配置文件
sudo nano /etc/network/interfaces
-
添加接口别名(以
eth0
为例):# 主接口配置 auto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1 # 第一个别名(IPv4地址) auto eth0:0 iface eth0:0 inet static address 192.168.1.101 netmask 255.255.255.0 # 第二个别名(IPv4地址) auto eth0:1 iface eth0:1 inet static address 192.168.1.102 netmask 255.255.255.0
二、配置多个IPv6地址
-
静态配置IPv6地址:
# 主接口IPv6配置 iface eth0 inet6 static address 2001:db8::100 netmask 64 gateway 2001:db8::1 # 第一个IPv6别名 iface eth0 inet6 static address 2001:db8::101 netmask 64 # 第二个IPv6别名 iface eth0 inet6 static address 2001:db8::102 netmask 64
或使用接口别名(推荐):
# 第一个IPv6别名 auto eth0:0 iface eth0:0 inet6 static address 2001:db8::101 netmask 64 # 第二个IPv6别名 auto eth0:1 iface eth0:1 inet6 static address 2001:db8::102 netmask 64
三、重启网络服务
sudo systemctl restart networking
# 或
sudo service networking restart
四、验证配置
-
检查IPv4地址:
ip addr show eth0
-
检查IPv6地址:
ip -6 addr show eth0
-
测试连通性:
ping 192.168.1.101 ping6 2001:db8::101
注意事项
- 网关设置:仅主接口需要配置网关,别名接口无需重复设置。
- 防火墙规则:若启用
ufw
,需允许新IP的流量:sudo ufw allow from 192.168.1.101 to any sudo ufw allow from 2001:db8::101 to any
- 备份配置:修改前备份
/etc/network/interfaces
文件。
完整配置示例
auto eth0
iface eth0 inet static
address 192.168.1.100/24
gateway 192.168.1.1
auto eth0:0
iface eth0:0 inet static
address 192.168.1.101/24
auto eth0:1
iface eth0:1 inet static
address 192.168.1.102/24
iface eth0 inet6 static
address 2001:db8::100/64
gateway 2001:db8::1
iface eth0 inet6 static
address 2001:db8::101/64
iface eth0 inet6 static
address 2001:db8::102/64
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto ens33
iface ens33 inet dhcp
iface ens33 inet static
address 18.164.157.141/8 <font size=5 color=#0000ff><b> 缩进不是必须, 没有缩进也可以</b></font>
# This is an autoconfigured IPv6 interface
iface ens33 inet6 auto
auto ens34
iface ens34 inet dhcp
iface ens34 inet static
address 11.164.157.141
#address 11.164.157.142 <font size=5 color=#0000ff><b> 一个iface下只能有一个address</b></font>
#address 11.164.15.141 <font size=5 color=#0000ff><b> 不能多个address</b></font>
#address 11.164.15.142
netmask 255.0.0.0
iface ens34 inet static
address 11.164.157.142/8
iface ens34 inet static
address 11.164.157.143
netmask 8
iface ens34 inet6 static
address fc11::b164:7fe/16
#address fc11::b164:7fe1/16 <font size=5 color=#0000ff><b> 一个iface下只能有一个address</b></font>
#address fc11::b164:7fe:1/16 <font size=5 color=#0000ff><b> 不能多个address</b></font>
iface ens34 inet6 static
address fc11::b164:7fe1
netmask 16
auto ens34:2
iface ens34:2 inet static
address 11.164.15.142/8
iface ens34:2 inet6 static
address fc11::1647:7fe/16
iface ens34:2 inet6 static
address fc11::1647:7fe1/16
iface ens34:2 inet6 static
address fc11::1647:7fe2
netmask 16
up ip address add 11.164.15.143/8 dev ens34
post-up ip address add 11.164.15.144/8 dev ens34
up ip -6 addr add fc11::1647:7fe1:1/16 dev ens34
up ip -6 address add fc11::1647:7fe1:2/16 dev ens34
post-up ip -6 addr add fc11::1647:7fe:1:1/16 dev ens34
post-up ip -6 address add fc11::1647:7fe:1:2/16 dev ens34
up ifconfig ens34 inet6 add fc11::1647:7fe:1:3/16
post-up ifconfig ens34 inet6 add fc11::1647:7fe:1:4/16
Ubuntu-server-16.04 设置多个ip和多个ipv6
Ubuntu-server-18 设置多个ip和多个ipv6
在 Ubuntu Server 18.04 上配置多个 IPv4 和 IPv6 地址的步骤如下(使用 Netplan 作为网络配置工具):
步骤 1:确认网卡名称
首先查看当前网卡名称(如 ens33
、enp0s3
等):
ip a
步骤 2:编辑 Netplan 配置文件
Ubuntu 18.04 的 Netplan 配置文件通常位于 /etc/netplan/
目录下,文件名可能是 50-cloud-init.yaml
或 01-netcfg.yaml
。
备份并编辑配置文件:
sudo cp /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.bak
sudo nano /etc/netplan/50-cloud-init.yaml
示例配置(静态多 IP + 多 IPv6)
network:
version: 2
renderer: networkd # Ubuntu 18.04 默认使用 networkd
ethernets:
ens33: # 替换为你的网卡名称
addresses:
- 192.168.1.100/24 # 主 IPv4 地址
- 192.168.1.101/24 # 第二个 IPv4 地址
- "2001:db8::100/64" # 主 IPv6 地址(引号避免 YAML 解析问题)
- "2001:db8::101/64" # 第二个 IPv6 地址
gateway4: 192.168.1.1 # IPv4 网关
gateway6: 2001:db8::1 # IPv6 网关
nameservers:
addresses:
- 8.8.8.8 # IPv4 DNS
- 2001:4860:4860::8888 # IPv6 DNS
步骤 3:应用配置
sudo netplan apply
验证配置
-
检查 IP 地址:
ip a show ens33
应看到多个 IPv4 和 IPv6 地址。
-
测试连通性:
ping -4 google.com -c 3 # IPv4 测试 ping -6 google.com -c 3 # IPv6 测试
常见问题解决
1. IPv6 地址无法访问
- 确保 IPv6 地址的网关和前缀(如
/64
)配置正确。 - 检查路由器是否允许静态 IPv6 地址分配。
2. 多个网关冲突
- 如果 IPv4 和 IPv6 使用不同网关,确保
gateway4
和gateway6
字段分开配置(如示例所示)。
3. YAML 格式错误
- 注意缩进必须为空格(不能使用 Tab)。
- IPv6 地址建议用引号包裹(避免 YAML 解析异常)。
附加配置选项
1. 动态获取 IPv6 地址(DHCPv6)
ens33:
dhcp6: true # 启用 DHCPv6
addresses:
- 192.168.1.100/24
2. 禁用 IPv6 自动配置
ens33:
dhcp6: false
accept-ra: false # 关闭 IPv6 自动配置(RA)
关键注意事项
- 网卡名称:务必通过
ip a
确认实际网卡名称。 - IPv6 地址格式:必须包含前缀长度(如
/64
)。 - 配置文件路径:Ubuntu 18.04 默认配置文件可能为
50-cloud-init.yaml
,而非00-installer-config.yaml
。
如果有其他需求(如 VLAN 或绑定网卡),请提供更多细节!
Ubuntu-server-20 设置多个ip和多个ipv6
在 Ubuntu Server 20.04 上配置多个 IPv4 和 IPv6 地址的步骤如下(基于 Netplan 工具,适用于 Ubuntu 17.10 及更新版本):
步骤 1:确认网卡名称
查看当前网卡名称(如 ens33
、enp0s3
等):
ip a
步骤 2:编辑 Netplan 配置文件
Ubuntu 20.04 默认使用 Netplan 配置文件 /etc/netplan/00-installer-config.yaml
(具体文件名可能因安装方式不同而略有差异)。
备份并编辑配置文件:
sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak
sudo nano /etc/netplan/00-installer-config.yaml
示例配置(静态多 IP + 多 IPv6)
network:
version: 2
renderer: networkd # Ubuntu 20.04 默认使用 networkd
ethernets:
ens33: # 替换为你的网卡名称
addresses:
- 192.168.1.100/24 # 主 IPv4 地址
- 192.168.1.101/24 # 第二个 IPv4 地址
- "2001:db8::100/64" # 主 IPv6 地址(引号避免 YAML 解析问题)
- "2001:db8::101/64" # 第二个 IPv6 地址
routes:
- to: default
via: 192.168.1.1 # IPv4 网关
- to: default
via: 2001:db8::1 # IPv6 网关
nameservers:
addresses:
- 8.8.8.8 # IPv4 DNS
- 2001:4860:4860::8888 # IPv6 DNS
dhcp4: false # 关闭 IPv4 DHCP
dhcp6: false # 关闭 IPv6 DHCP
accept-ra: false # 关闭 IPv6 自动配置(RA)
步骤 3:应用配置
sudo netplan apply
验证配置
-
检查 IP 地址:
ip a show ens33
输出应包含所有配置的 IPv4 和 IPv6 地址。
-
测试连通性:
ping -4 8.8.8.8 -c 3 # IPv4 测试 ping -6 2001:4860:4860::8888 -c 3 # IPv6 测试
常见问题解决
1. IPv6 地址无法访问
- 确保 IPv6 网关和前缀(如
/64
)配置正确。 - 检查路由器是否允许静态 IPv6 地址分配。
- 禁用自动配置(
accept-ra: false
)以确保静态地址生效。
2. Netplan 配置错误
- 使用命令检查语法:
sudo netplan generate
- 确保缩进为空格(禁止 Tab),YAML 对格式敏感。
3. 多网关冲突
- 如果 IPv4/IPv6 使用不同网关,需通过
routes
字段分别指定(如示例所示)。
附加配置选项
1. 混合静态与动态地址
ens33:
addresses:
- 192.168.1.100/24
- "2001:db8::100/64"
dhcp4: true # 同时启用 DHCPv4
dhcp6: false
2. 仅配置多个 IPv4 地址
ens33:
addresses:
- 192.168.1.100/24
- 192.168.1.101/24
gateway4: 192.168.1.1
关键注意事项
- 网卡名称:通过
ip a
确认实际网卡名称,错误名称会导致配置失败。 - IPv6 地址格式:
- 必须包含前缀长度(如
/64
)。 - 建议用双引号包裹 IPv6 地址(避免 YAML 解析错误)。
- 必须包含前缀长度(如
- 配置文件路径:Ubuntu 20.04 默认配置文件为
00-installer-config.yaml
(若使用云镜像可能是50-cloud-init.yaml
)。
扩展场景
配置多个网卡
如需为不同网卡分配地址,可添加多个网卡配置:
ethernets:
ens33:
addresses: [...]
enp0s8:
addresses: [...]
如果需要更复杂的配置(如 VLAN、绑定网卡),请提供具体需求!
Ubuntu-server-22 设置多个ip和多个ipv6
在 Ubuntu Server 22.04 上配置多个 IPv4 和 IPv6 地址的步骤如下(基于 Netplan 工具,适用于静态地址配置):
步骤 1:确认网卡名称
查看当前网卡名称(例如 ens33
、enp0s3
):
ip a
步骤 2:编辑 Netplan 配置文件
Ubuntu 22.04 默认的 Netplan 配置文件通常为 /etc/netplan/00-installer-config.yaml
(若通过云镜像安装可能是 50-cloud-init.yaml
)。
备份并编辑配置文件:
sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak
sudo nano /etc/netplan/00-installer-config.yaml
示例配置(多 IPv4 + 多 IPv6)
network:
version: 2
renderer: networkd # Ubuntu 22.04 默认使用 networkd
ethernets:
ens33: # 替换为你的网卡名称
addresses:
- 192.168.1.100/24 # 主 IPv4 地址
- 192.168.1.101/24 # 第二个 IPv4 地址
- "2001:db8::100/64" # 主 IPv6 地址(建议用引号包裹)
- "2001:db8::101/64" # 第二个 IPv6 地址
routes:
- to: default # IPv4 默认路由
via: 192.168.1.1 # IPv4 网关
metric: 100 # 可选:路由优先级
- to: default # IPv6 默认路由
via: 2001:db8::1 # IPv6 网关
metric: 100
nameservers:
addresses:
- 8.8.8.8 # IPv4 DNS
- 2001:4860:4860::8888 # IPv6 DNS
dhcp4: false # 关闭 IPv4 DHCP
dhcp6: false # 关闭 IPv6 DHCP
accept-ra: false # 关闭 IPv6 路由宣告(确保静态配置生效)
步骤 3:应用配置
sudo netplan apply
验证配置
-
检查 IP 地址:
ip a show ens33
输出应包含所有配置的 IPv4 和 IPv6 地址。
-
测试连通性:
ping -4 8.8.8.8 -c 3 # IPv4 测试 ping -6 2001:4860:4860::8888 -c 3 # IPv6 测试
常见问题解决
1. IPv6 地址无法访问
- 确认 IPv6 网关和前缀(如
/64
)正确。 - 检查路由器是否允许手动分配 IPv6 地址。
- 确保
accept-ra: false
以禁用自动配置冲突。
2. Netplan 配置错误
- 使用命令检查语法:
sudo netplan generate
- 确保缩进为空格(禁止 Tab),YAML 格式敏感。
3. 多网关优先级冲突
- 为 IPv4/IPv6 路由添加
metric
参数(如示例所示),数值越小优先级越高。
附加配置选项
1. 动态与静态地址混合
ens33:
addresses:
- 192.168.1.100/24 # 静态 IPv4
- "2001:db8::100/64" # 静态 IPv6
dhcp4: true # 同时启用 DHCPv4 获取其他地址
2. 仅配置多个 IPv4 地址
ens33:
addresses:
- 192.168.1.100/24
- 192.168.1.101/24
routes:
- to: default
via: 192.168.1.1
关键注意事项
- 网卡名称:必须通过
ip a
确认实际名称,错误名称会导致配置失败。 - IPv6 地址格式:
- 必须包含前缀长度(如
/64
)。 - 使用双引号包裹 IPv6 地址(避免 YAML 解析错误)。
- 必须包含前缀长度(如
- 配置文件路径:Ubuntu 22.04 默认配置文件为
/etc/netplan/00-installer-config.yaml
。
扩展场景
为多网卡配置不同地址
ethernets:
ens33:
addresses: [192.168.1.100/24, "2001:db8::100/64"]
enp0s8:
addresses: [10.0.0.100/24, "2001:db8:1::100/64"]
如需更高级配置(如 VLAN、绑定网卡或 IPv6 隐私扩展),请提供具体需求!
Ubuntu-server-24 设置多个ip和多个ipv6
在 Ubuntu Server 24.04 上配置多个 IPv4 和 IPv6 地址的步骤如下(基于 Netplan,Ubuntu 24.04 的网络配置逻辑与 22.04 类似,但需注意配置文件的默认路径和语法细节):
步骤 1:确认网卡名称
通过以下命令查看网卡名称(如 enp0s3
、ens33
):
ip a
步骤 2:编辑 Netplan 配置文件
Ubuntu 24.04 的默认 Netplan 配置文件通常为 /etc/netplan/00-installer-config.yaml
(若使用云镜像可能是 50-cloud-init.yaml
)。
备份并编辑配置文件:
sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak
sudo nano /etc/netplan/00-installer-config.yaml
示例配置(多 IPv4 + 多 IPv6)
network:
version: 2
renderer: networkd # Ubuntu Server 默认使用 networkd
ethernets:
enp0s3: # 替换为你的网卡名称
addresses:
- 192.168.1.100/24 # 主 IPv4 地址
- 192.168.1.101/24 # 第二个 IPv4 地址
- "2001:db8::100/64" # 主 IPv6 地址(建议引号包裹)
- "2001:db8::101/64" # 第二个 IPv6 地址
routes:
- to: default # IPv4 默认路由
via: 192.168.1.1 # IPv4 网关
metric: 100 # 可选:路由优先级
- to: default # IPv6 默认路由
via: 2001:db8::1 # IPv6 网关
metric: 100
nameservers:
addresses:
- 8.8.8.8 # IPv4 DNS
- 2001:4860:4860::8888 # IPv6 DNS
dhcp4: false # 关闭 IPv4 DHCP
dhcp6: false # 关闭 IPv6 DHCP
accept-ra: false # 关闭 IPv6 路由宣告(避免与静态配置冲突)
步骤 3:应用配置
sudo netplan apply
验证配置
-
检查 IP 地址:
ip a show enp0s3
输出应包含所有配置的 IPv4 和 IPv6 地址(示例如下):
inet 192.168.1.100/24 ... inet 192.168.1.101/24 ... inet6 2001:db8::100/64 ... inet6 2001:db8::101/64 ...
-
测试连通性:
ping -4 8.8.8.8 -c 3 # IPv4 测试 ping -6 2001:4860:4860::8888 -c 3 # IPv6 测试
常见问题解决
1. IPv6 地址未生效
- 检查网关和前缀:确保 IPv6 网关(
2001:db8::1
)和前缀(/64
)与本地网络一致。 - 关闭 RA:若路由器发送路由宣告(RA),需设置
accept-ra: false
避免动态地址覆盖静态配置。 - 防火墙规则:检查
ufw
或iptables
是否阻止 IPv6 流量。
2. Netplan 配置语法错误
- 检查缩进:YAML 要求严格使用空格(禁用 Tab)。
- 验证配置:
sudo netplan generate # 检查语法 sudo netplan apply --debug # 调试模式
3. 多网关优先级冲突
- 为 IPv4/IPv6 路由添加
metric
参数(如metric: 100
),数值越小优先级越高。
附加配置选项
1. 混合静态与动态地址
enp0s3:
addresses:
- 192.168.1.100/24 # 静态 IPv4
- "2001:db8::100/64" # 静态 IPv6
dhcp4: true # 同时启用 DHCPv4 获取其他地址
2. 仅配置多个 IPv4 地址
enp0s3:
addresses:
- 192.168.1.100/24
- 192.168.1.101/24
routes:
- to: default
via: 192.168.1.1
关键注意事项
- 网卡名称:必须通过
ip a
确认实际名称,错误名称会导致配置失败。 - IPv6 地址格式:
- 必须包含前缀长度(如
/64
)。 - 使用双引号包裹 IPv6 地址(避免 YAML 解析错误)。
- 必须包含前缀长度(如
- 配置文件路径:Ubuntu 24.04 默认配置文件为
/etc/netplan/00-installer-config.yaml
。
扩展场景
1. 为多网卡分配不同地址
ethernets:
enp0s3:
addresses: [192.168.1.100/24, "2001:db8::100/64"]
enp0s4:
addresses: [10.0.0.100/24, "2001:db8:1::100/64"]
2. 启用 IPv6 隐私扩展
enp0s3:
addresses:
- "2001:db8::100/64"
ipv6-privacy: true # 启用临时 IPv6 地址
如需更高级配置(如 VLAN、绑定网卡或自定义路由),请提供具体需求!
systemd-networkd 与 NetworkManager 比较
以下是 systemd-networkd 与 NetworkManager 的详细对比,涵盖设计目标、功能特性、适用场景及优缺点:
1. 定位与设计目标
特性 | systemd-networkd | NetworkManager |
---|---|---|
开发背景 | 作为 systemd 生态的一部分,专为 Linux 系统集成设计 | 由 Red Hat 主导开发,面向桌面和移动设备的动态网络管理 |
目标用户 | 服务器、容器、轻量级系统 | 桌面用户、笔记本、移动设备 |
核心目标 | 轻量、快速、与 systemd 深度集成 | 动态网络管理(Wi-Fi、VPN、热点等) |
2. 功能对比
功能 | systemd-networkd | NetworkManager |
---|---|---|
网络类型支持 | ✅ 以太网、VLAN、绑定接口、桥接等基础网络 | ✅ 以太网、Wi-Fi、蓝牙、移动宽带、VPN、虚拟网络 |
动态网络管理 | ❌ 仅支持静态配置或简单 DHCP | ✅ 支持自动切换网络(如 Wi-Fi 漫游)、连接优先级 |
图形界面 | ❌ 无 | ✅ 提供 GUI(如 GNOME 网络设置)和 TUI(nmtui ) |
配置文件格式 | ✅ INI 格式(.network 、.link 等文件) | ✅ Keyfile 格式(/etc/NetworkManager/ 下) |
IPv6 支持 | ✅ 完整支持(SLAAC、DHCPv6、静态地址) | ✅ 完整支持 |
路由策略 | ✅ 支持多路由表、策略路由 | ✅ 支持,但配置较复杂 |
DNS 管理 | ✅ 依赖 systemd-resolved | ✅ 内置 DNS 管理,支持动态更新 |
热插拔处理 | ✅ 自动检测网卡插拔 | ✅ 高级事件处理(如飞行模式切换) |
云集成 | ✅ 适合云环境和自动化部署 | ✅ 支持 Cloud-Init,但较少用于服务器 |
3. 性能与资源占用
指标 | systemd-networkd | NetworkManager |
---|---|---|
内存占用 | 极低(作为 systemd 一部分共享资源) | 较高(需维护复杂状态和插件) |
启动速度 | ✅ 快(与系统启动并行) | ❌ 较慢(独立服务初始化) |
依赖项 | ✅ 仅依赖 systemd | ❌ 依赖 GLib、DBus、多个插件 |
4. 配置方式对比
systemd-networkd
- 配置文件路径:
/etc/systemd/network/*.network
- 示例配置(静态 IP):
[Match] Name=eth0 [Network] Address=192.168.1.100/24 Gateway=192.168.1.1 DNS=8.8.8.8
- 优点:配置简洁、易版本控制、适合自动化部署。
- 缺点:缺少动态网络适配能力。
NetworkManager
- 配置方式:
- 图形界面(GUI):如 GNOME 设置。
- 命令行工具:
nmcli
、nmtui
。 - 配置文件:
/etc/NetworkManager/system-connections/*.nmconnection
。
- 示例命令(添加连接):
nmcli con add type ethernet ifname eth0 ip4 192.168.1.100/24 gw4 192.168.1.1
- 优点:灵活、支持动态网络切换。
- 缺点:配置文件复杂,适合手动管理。
5. 适用场景
场景 | 推荐工具 | 理由 |
---|---|---|
服务器/数据中心 | ✅ systemd-networkd | 轻量、稳定、易集成到自动化工具(Ansible 等) |
桌面/笔记本 | ✅ NetworkManager | 支持 Wi-Fi、VPN、图形界面,适应网络环境变化 |
嵌入式系统 | ✅ systemd-networkd | 低资源占用,无需复杂网络管理 |
容器/虚拟机 | ✅ systemd-networkd | 快速启动,无需额外服务 |
混合网络环境 | ⚠️ 两者结合 | 需避免冲突(如同时启用时优先使用 NetworkManager) |
6. 优缺点总结
工具 | 优点 | 缺点 |
---|---|---|
systemd-networkd | ✅ 轻量、快速、低依赖 ✅ 适合静态网络和自动化 | ❌ 无图形界面 ❌ 动态网络支持有限 |
NetworkManager | ✅ 动态网络管理强大 ✅ 支持多种连接类型 | ❌ 资源占用高 ❌ 服务器环境可能过于复杂 |
7. 如何选择?
- 选择 systemd-networkd 如果:
- 你管理的是服务器或容器。
- 需要极简、稳定的网络配置。
- 使用自动化工具部署网络。
- 选择 NetworkManager 如果:
- 你使用的是桌面或笔记本。
- 需要动态切换网络(如 Wi-Fi 和有线网络)。
- 依赖图形界面或复杂网络功能(如 VPN)。
8. 冲突处理
若系统同时安装了 systemd-networkd
和 NetworkManager
,需确保仅启用一个服务:
# 禁用 NetworkManager
sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager
# 启用 systemd-networkd
sudo systemctl enable systemd-networkd
sudo systemctl start systemd-networkd
通过以上对比,可根据实际需求选择合适的工具。服务器推荐 systemd-networkd,桌面推荐 NetworkManager。
systemd-networkd
和 NetworkManager
是 Linux 中两种主流网络管理工具,各有优劣,适用于不同场景。以下是它们的对比:
1. 核心定位
-
systemd-networkd:
- 轻量级网络配置工具,集成于
systemd
生态。 - 专注于基础网络配置(IP、路由、DNS),适合服务器/容器环境。
- 轻量级网络配置工具,集成于
-
NetworkManager:
- 功能全面的网络管理守护进程。
- 支持动态网络(WiFi、移动宽带)、VPN、多网卡复杂路由等,适合桌面/笔记本。
2. 功能对比
功能 | systemd-networkd | NetworkManager |
---|---|---|
静态IP/DHCP | ✅ 支持 | ✅ 支持 |
动态网络(WiFi) | ❌ 需配合 wpa_supplicant | ✅ 原生支持 |
VPN(IPSec/OpenVPN) | ❌ 需额外工具 | ✅ 原生支持 |
移动宽带(3G/4G) | ❌ 需额外工具 | ✅ 原生支持 |
网络共享/NAT | ❌ 需配合 iptables | ✅ 原生支持 |
多网卡负载均衡 | ❌ 需手动配置 | ✅ 原生支持 |
网络状态监控 | ✅ 基础支持 | ✅ 高级监控(GUI/CLI) |
3. 配置方式
-
systemd-networkd:
- 静态配置:通过
/etc/systemd/network/*.network
文件定义。 - 动态配置:依赖外部工具(如
wpa_supplicant
)。 - 优点:配置稳定,适合服务器。
- 缺点:动态网络支持有限。
- 静态配置:通过
-
NetworkManager:
- 动态配置:通过
nmcli
命令行或 GUI 工具(如nmtui
)。 - 静态配置:支持
/etc/NetworkManager/system-connections/
配置文件。 - 优点:灵活,适合复杂网络环境。
- 缺点:配置可能因版本差异不稳定。
- 动态配置:通过
4. 适用场景
-
选择 systemd-networkd:
- 服务器、容器、嵌入式系统。
- 需要简单、稳定的静态网络配置。
- 避免引入额外依赖(如桌面环境)。
-
选择 NetworkManager:
- 桌面、笔记本电脑。
- 需要动态网络切换(如 WiFi、移动宽带)。
- 需要 VPN、网络共享等高级功能。
5. 性能与资源
-
systemd-networkd:
- 轻量级,资源占用低。
- 启动速度快,适合资源受限环境。
-
NetworkManager:
- 功能丰富,资源占用较高。
- 启动稍慢,但对现代硬件影响可忽略。
6. 兼容性
-
systemd-networkd:
- 深度集成
systemd
,适合使用systemd
的发行版(如 Ubuntu 18.04+、RHEL 8+)。 - 不兼容非
systemd
系统(如 Alpine Linux)。
- 深度集成
-
NetworkManager:
- 支持广泛,兼容主流发行版(包括非
systemd
系统)。 - 提供统一 API,方便与其他工具集成。
- 支持广泛,兼容主流发行版(包括非
总结
- 追求极简稳定 → 选
systemd-networkd
。 - 需要动态/高级网络功能 → 选
NetworkManager
。 - 实际部署中,两者可共存(需配置优先级),例如用
systemd-networkd
管理静态接口,NetworkManager
管理动态 WiFi。
以下是 systemd-networkd 和 NetworkManager 的详细对比,基于功能、适用场景、配置方式等维度:
1. 核心定位与设计目标
特性 | systemd-networkd | NetworkManager |
---|---|---|
设计目标 | 轻量级、稳定、基础网络配置,适合服务器和嵌入式设备。 | 动态、多功能网络管理,适合桌面环境和复杂网络场景。 |
集成性 | systemd 生态的一部分,与 systemd-resolved (DNS)、systemd-timesyncd (NTP)深度集成。 | 独立工具,提供图形界面和命令行工具(nmcli ),支持多种网络类型和协议。 |
2. 功能对比
功能 | systemd-networkd | NetworkManager |
---|---|---|
配置方式 | 通过纯文本配置文件(.ini 格式,路径 /etc/systemd/network/ )静态配置。 | 支持图形界面、命令行(nmcli )和动态配置(如 Wi-Fi、VPN)。 |
支持的网络类型 | 有线网络、静态/动态IP(DHCP),支持 VLAN、网桥等虚拟网络。 | 有线、Wi-Fi、蓝牙、VPN、移动宽带等,支持复杂网络策略和动态切换。 |
动态管理能力 | 有限,仅支持基础的 DHCP 和静态配置。 | 强大,可自动连接 Wi-Fi、动态切换网络、管理多个网络配置文件。 |
无线网络支持 | 不直接支持,需配合 wpa_supplicant 配置无线网络。 | 直接支持,内置 Wi-Fi 和蓝牙管理功能。 |
DNS管理 | 依赖 systemd-resolved 管理 DNS。 | 内置 DNS 管理,可动态更新 DNS 设置。 |
多网络配置 | 通过配置文件手动管理多个网络接口或 IP 地址。 | 支持多配置文件(如家庭、办公网络),一键切换。 |
3. 适用场景
场景 | systemd-networkd | NetworkManager |
---|---|---|
服务器/嵌入式设备 | 推荐:轻量、稳定,适合静态网络配置。 | 不推荐:功能过重,且不需要图形界面或动态网络切换。 |
桌面环境 | 不推荐:缺乏图形界面和动态网络管理功能。 | 推荐:支持 Wi-Fi、VPN、多网络配置,适合桌面用户。 |
资源限制环境 | 推荐:占用资源少,适合资源有限的设备。 | 不推荐:占用资源较多,依赖图形库。 |
复杂网络需求 | 例如 VLAN、网桥等虚拟网络配置可行,但需手动配置。 | 支持更复杂的策略路由、多网络接口动态管理。 |
4. 配置复杂度与用户友好性
方面 | systemd-networkd | NetworkManager |
---|---|---|
配置方式 | 命令行/文本配置:需手动编辑配置文件(如 /etc/systemd/network/10-static.network )。 | 图形界面 + 命令行:通过 nm-connection-editor 或 nmcli 简单配置。 |
学习曲线 | 较陡峭,需熟悉 .ini 格式和 systemd 生态。 | 较平缓,图形界面直观,命令行工具 nmcli 功能丰富。 |
实时修改生效 | 需重启服务或重载配置(systemctl restart systemd-networkd )。 | 支持动态修改,无需重启(如 nmcli con up )。 |
5. 与其他服务的冲突
- systemd-networkd:
- 需禁用
NetworkManager
、Netplan
、dhcpcd
等其他网络管理工具。 - 与
systemd-resolved
深度集成,需确保/etc/resolv.conf
指向systemd-resolved
。
- 需禁用
- NetworkManager:
- 会接管所有网络接口,需禁用
systemd-networkd
、NetworkManager
的其他实例或传统网络工具(如ifupdown
)。
- 会接管所有网络接口,需禁用
6. 示例配置对比
静态IP配置
-
systemd-networkd:
[Match] Name=eth0 [Network] Address=192.168.1.100/24 Gateway=192.168.1.1 DNS=8.8.8.8
-
NetworkManager(命令行):
nmcli con add type ethernet con-name "Static-Conn" ifname eth0 ip4 192.168.1.100/24 gw4 192.168.1.1 nmcli con mod "Static-Conn" +ipv4.dns "8.8.8.8" nmcli con up "Static-Conn"
7. 总结
选择建议 |
---|
使用 systemd-networkd:当需要轻量级、稳定且无需图形界面的网络配置时(如服务器、嵌入式设备)。 |
使用 NetworkManager:当需要动态管理网络、支持 Wi-Fi/VPN 或在桌面环境中使用时。 |
附:快速切换指南
从 NetworkManager 切换到 systemd-networkd
# 安装 systemd-networkd
sudo apt install systemd-networkd
# 禁用 NetworkManager
sudo systemctl disable --now NetworkManager
# 启用并配置 systemd-networkd
sudo systemctl enable --now systemd-networkd
从 systemd-networkd 切换回 NetworkManager
# 安装 NetworkManager
sudo apt install network-manager
# 禁用 systemd-networkd
sudo systemctl disable --now systemd-networkd
# 启用 NetworkManager
sudo systemctl enable --now NetworkManager
通过以上对比,可根据具体需求选择适合的工具。对于服务器环境,systemd-networkd
是更优解;对于桌面用户,NetworkManager
提供了更便捷的网络管理体验。
systemd-networkd
和 NetworkManager
是 Linux 系统中用于管理网络连接的两个工具,它们各有特点,以下是对它们的详细比较:
设计目标
- systemd - networkd:它是
systemd
系统和服务管理器的一部分,设计初衷是与systemd
生态系统紧密集成,为系统提供简洁、高效且自动化的网络配置。其主要面向服务器环境,着重于静态网络配置和系统启动时的网络初始化。 - NetworkManager:它的设计目标是提供一个用户友好、动态的网络管理解决方案,适用于各种环境,尤其是桌面系统。它能够自动检测网络连接的变化,如无线网络的接入点变化、有线网络的插拔等,并自动调整网络配置。
配置方式
- systemd - networkd:使用
.network
和.netdev
等配置文件进行配置,这些文件通常位于/etc/systemd/network/
目录下。配置文件采用 INI 格式,适合通过脚本或自动化工具进行批量配置。例如,以下是一个简单的eth0.network
配置文件示例:
[Match]
Name=eth0
[Network]
DHCP=yes
- NetworkManager:既可以通过图形界面(如 GNOME 桌面环境中的网络设置面板)进行配置,也可以使用命令行工具
nmcli
或nmtui
进行配置。这种多样化的配置方式使得普通用户也能轻松管理网络连接。例如,使用nmcli
命令连接到一个无线网络:
nmcli device wifi connect <SSID> password <PASSWORD>
动态性和自动连接能力
- systemd - networkd:在动态网络环境中的表现相对较弱。它更侧重于静态配置,虽然也支持一些动态配置选项,如 DHCP,但对于频繁变化的网络环境(如移动设备在不同的无线网络之间切换)的适应能力不如
NetworkManager
。 - NetworkManager:具有强大的动态连接管理能力。它能够自动检测网络连接的变化,如无线网络信号强度的变化、有线网络的插拔等,并自动切换到最佳的网络连接。同时,它还支持自动连接到已知的无线网络,无需用户手动干预。
日志和调试
- systemd - networkd:与
systemd
的日志系统集成紧密,可以使用journalctl
命令查看详细的网络配置和运行日志。这对于服务器管理员来说非常方便,可以快速定位和解决网络问题。例如,查看systemd - networkd
的日志:
journalctl -u systemd-networkd
- NetworkManager:有自己的日志系统,可以通过修改
/etc/NetworkManager/NetworkManager.conf
文件中的log_level
选项来调整日志的详细程度。同时,也可以使用journalctl
命令查看相关日志。
安全性
- systemd - networkd:由于其配置相对静态,减少了因动态配置带来的安全风险。但在复杂的网络环境中,可能需要手动配置一些安全策略,如防火墙规则等。
- NetworkManager:在连接到不安全的网络时,可能会存在一定的安全风险。不过,它也提供了一些安全选项,如加密连接、VPN 支持等,可以通过配置来增强网络安全性。
适用场景
- systemd - networkd:适用于服务器环境,尤其是那些需要静态网络配置、对系统资源占用要求较低、对自动化和脚本化配置有较高需求的场景。例如,数据中心的服务器、嵌入式系统等。
- NetworkManager:适用于桌面系统、笔记本电脑和移动设备等动态网络环境,用户更注重易用性和自动连接功能。例如,家庭用户的笔记本电脑、办公室的桌面电脑等。
在Linux系统中,systemd-networkd
和NetworkManager
都是常用的网络管理工具,但它们的设计目标和适用场景有所不同。以下是它们的比较:
设计目标与适用场景
- systemd-networkd
- 设计目标:作为systemd的一部分,
systemd-networkd
旨在为服务器、嵌入式系统等提供基础的网络配置和管理功能。它专注于静态网络配置,适用于需要手动配置网络接口的系统。 - 适用场景:服务器环境、云环境、容器以及嵌入式设备等,特别是当系统需要简洁高效的网络配置时。
- 设计目标:作为systemd的一部分,
- NetworkManager
- 设计目标:
NetworkManager
是一个全面的网络管理工具,注重用户体验和动态网络切换,适用于桌面和移动设备。 - 适用场景:桌面和笔记本电脑,特别是在需要频繁切换网络连接的场景,如Wi-Fi和以太网之间切换,或者需要连接VPN时。
- 设计目标:
功能特性
- 配置方式
- systemd-networkd:通过配置文件(位于
/etc/systemd/network/
目录下)来管理网络接口,支持.network
和.netdev
配置文件。它主要关注静态配置,但也支持通过DHCP、IPv6和VLAN等协议来动态配置网络。 - NetworkManager:支持图形用户界面(如GNOME网络管理器、KDE网络管理器等)和命令行工具(如
nmcli
)。它使用.nmconnection
文件来管理不同的网络连接。
- systemd-networkd:通过配置文件(位于
- 支持的网络类型
- systemd-networkd:支持传统的有线网络、无线网络和虚拟网络接口的配置。
- NetworkManager:支持有线网络、无线网络(Wi-Fi)、VPN(包括OpenVPN、IPSec等)、桥接、网络共享等多种网络接口类型。
- 动态配置能力
- systemd-networkd:虽然主要用于静态配置,但它也支持通过DHCP、IPv6等协议来动态配置网络。
- NetworkManager:提供自动连接的功能,能够自动获取DHCP地址、DNS设置等,适用于动态网络环境。
性能与资源占用
- systemd-networkd:设计上更简洁、快速且资源占用低,适合在服务器和容器等环境中使用。
- NetworkManager:功能更全面,但相对复杂,资源占用相对较高。
总结
- 如果你使用的是服务器、嵌入式设备或容器,且需要简洁高效的网络配置,
systemd-networkd
是一个很好的选择。 - 如果你使用的是桌面或笔记本电脑,需要灵活的动态网络管理和友好的用户体验,
NetworkManager
更适合你。