在 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 地址未生效
sudo systemctl status systemd-networkd # 检查 systemd-networkd
journalctl -u systemd-networkd # 查看日志
2. IPv6 网关配置错误
2001:db8::1%ens33
)。ip -6 route
3. DNS 解析失败
nameservers
或 DNS
字段已指定正确的 DNS 服务器。systemd-resolved
:sudo systemctl restart systemd-resolved
关键注意事项
ip a
确认实际名称。/64
)。 扩展配置
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 地址,适用于负载均衡、多服务隔离等场景。
在 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 配置文件的详细说明,涵盖文件结构、常用配置段和参数含义,帮助你灵活管理网络接口。
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 配置
vlan10.netdev
):[NetDev]
Name=vlan10
Kind=vlan
[VLAN]
Id=10
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 网关配置失败
2001:db8::1%eth0
)。ip -6 route show default
Q3:DNS 解析失败
DNS=
参数已配置。systemctl restart systemd-resolved
6. 总结
通过灵活使用 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] 段(策略路由)
[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
注意事项
sudo systemctl restart systemd-networkd
。通过灵活组合这些配置段,您可以实现复杂网络需求(如多IP负载均衡、策略路由、混合IPv4/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> 缩进不是必须, 没有缩进也可以
# 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 一个iface下只能有一个address
#address 11.164.15.141 不能多个address
#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 一个iface下只能有一个address
#address fc11::b164:7fe:1/16 不能多个address
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.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 地址无法访问
/64
)配置正确。2. 多个网关冲突
gateway4
和 gateway6
字段分开配置(如示例所示)。3. 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
确认实际网卡名称。/64
)。50-cloud-init.yaml
,而非 00-installer-config.yaml
。如果有其他需求(如 VLAN 或绑定网卡),请提供更多细节!
在 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 地址无法访问
/64
)配置正确。accept-ra: false
)以确保静态地址生效。2. Netplan 配置错误
sudo netplan generate
3. 多网关冲突
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
确认实际网卡名称,错误名称会导致配置失败。/64
)。00-installer-config.yaml
(若使用云镜像可能是 50-cloud-init.yaml
)。 扩展场景
配置多个网卡
如需为不同网卡分配地址,可添加多个网卡配置:
ethernets:
ens33:
addresses: [...]
enp0s8:
addresses: [...]
如果需要更复杂的配置(如 VLAN、绑定网卡),请提供具体需求!
在 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 地址无法访问
/64
)正确。accept-ra: false
以禁用自动配置冲突。2. Netplan 配置错误
sudo netplan generate
3. 多网关优先级冲突
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
确认实际名称,错误名称会导致配置失败。/64
)。/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.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 地址未生效
2001:db8::1
)和前缀(/64
)与本地网络一致。accept-ra: false
避免动态地址覆盖静态配置。ufw
或 iptables
是否阻止 IPv6 流量。2. Netplan 配置语法错误
sudo netplan generate # 检查语法
sudo netplan apply --debug # 调试模式
3. 多网关优先级冲突
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
确认实际名称,错误名称会导致配置失败。/64
)。/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 的详细对比,涵盖设计目标、功能特性、适用场景及优缺点:
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
[Match]
Name=eth0
[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
NetworkManager
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. 如何选择?
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
生态。NetworkManager:
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:
5. 性能与资源
systemd-networkd:
NetworkManager:
6. 兼容性
systemd-networkd:
systemd
,适合使用 systemd
的发行版(如 Ubuntu 18.04+、RHEL 8+)。systemd
系统(如 Alpine Linux)。NetworkManager:
systemd
系统)。总结
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. 与其他服务的冲突
NetworkManager
、Netplan
、dhcpcd
等其他网络管理工具。systemd-resolved
深度集成,需确保 /etc/resolv.conf
指向 systemd-resolved
。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
系统和服务管理器的一部分,设计初衷是与 systemd
生态系统紧密集成,为系统提供简洁、高效且自动化的网络配置。其主要面向服务器环境,着重于静态网络配置和系统启动时的网络初始化。配置方式
.network
和 .netdev
等配置文件进行配置,这些文件通常位于 /etc/systemd/network/
目录下。配置文件采用 INI 格式,适合通过脚本或自动化工具进行批量配置。例如,以下是一个简单的 eth0.network
配置文件示例:[Match]
Name=eth0
[Network]
DHCP=yes
nmcli
或 nmtui
进行配置。这种多样化的配置方式使得普通用户也能轻松管理网络连接。例如,使用 nmcli
命令连接到一个无线网络:nmcli device wifi connect <SSID> password <PASSWORD>
动态性和自动连接能力
NetworkManager
。日志和调试
systemd
的日志系统集成紧密,可以使用 journalctl
命令查看详细的网络配置和运行日志。这对于服务器管理员来说非常方便,可以快速定位和解决网络问题。例如,查看 systemd - networkd
的日志:journalctl -u systemd-networkd
/etc/NetworkManager/NetworkManager.conf
文件中的 log_level
选项来调整日志的详细程度。同时,也可以使用 journalctl
命令查看相关日志。安全性
适用场景
在Linux系统中,systemd-networkd
和NetworkManager
都是常用的网络管理工具,但它们的设计目标和适用场景有所不同。以下是它们的比较:
设计目标与适用场景
systemd-networkd
旨在为服务器、嵌入式系统等提供基础的网络配置和管理功能。它专注于静态网络配置,适用于需要手动配置网络接口的系统。NetworkManager
是一个全面的网络管理工具,注重用户体验和动态网络切换,适用于桌面和移动设备。功能特性
/etc/systemd/network/
目录下)来管理网络接口,支持.network
和.netdev
配置文件。它主要关注静态配置,但也支持通过DHCP、IPv6和VLAN等协议来动态配置网络。nmcli
)。它使用.nmconnection
文件来管理不同的网络连接。性能与资源占用
总结
systemd-networkd
是一个很好的选择。NetworkManager
更适合你。