当前位置: 首页 > article >正文

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:确认网卡名称
通过以下命令查看网卡名称(如 ens33enp0s3):

ip a

     步骤 2:备份并编辑 Netplan 配置文件
Ubuntu Server 的 Netplan 配置文件通常位于 /etc/netplan/ 目录下,文件名类似 00-installer-config.yaml50-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

     验证配置

  1. 检查 IP 地址

    ip a show ens33
    

    输出应包含所有配置的 IPv4 和 IPv6 地址。

  2. 测试连通性

    ping -4 8.8.8.8 -c 3        # IPv4 测试
    ping -6 2001:4860:4860::8888 -c 3  # IPv6 测试
    

方法二:直接使用 systemd-networkd
     步骤 1:禁用其他网络管理工具
确保关闭 NetworkManagernetworking.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:确保 nameserversDNS 字段已指定正确的 DNS 服务器。
  • 重启 systemd-resolved
    sudo systemctl restart systemd-resolved
    

关键注意事项

  1. 网卡名称:必须通过 ip a 确认实际名称。
  2. IPv6 地址格式
    • 必须包含前缀长度(如 /64)。
    • 建议用双引号包裹(避免 YAML 解析错误)。
  3. 服务冲突:确保仅启用一种网络管理工具(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

记录需要配置的网卡名称(例如 eth0enp0s3)。


步骤 2:禁用其他网络管理工具
确保关闭 NetworkManagernetworking.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匹配设备类型(如 ethervlanType=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-LANWakeOnLan=magic
Port设置网卡端口类型(如 miiPort=光纤

示例

[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
DNSDNS 服务器地址DNS=8.8.8.8
Domains域名搜索列表Domains=example.com
DHCP启用 DHCP(yes/no/ipv4/ipv6DHCP=ipv4
IPv6PrivacyExtensions启用 IPv6 隐私扩展IPv6PrivacyExtensions=yes
Bridge将接口加入桥接设备Bridge=br0
VLAN将接口加入 VLANVLAN=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 地址配置(可选,用于高级场景)。
常用参数

参数说明示例
AddressIP 地址及前缀Address=192.168.1.100/24
Peer点对点连接的远端地址Peer=10.0.0.1
PreferredLifetimeIP 地址的首选生命周期(秒)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路由类型(如 unicastblackholeType=blackhole

示例

[Route]
Destination=10.0.0.0/24
Gateway=192.168.1.2
Metric=200

     (6) [DHCP]
配置 DHCP 客户端行为(需在 [Network] 段启用 DHCP=yes)。
常用参数

参数说明示例
UseDNS是否使用 DHCP 提供的 DNSUseDNS=yes
RouteMetricDHCP 获取路由的优先级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 配置

  1. 创建 VLAN 设备(vlan10.netdev):
    [NetDev]
    Name=vlan10
    Kind=vlan
    
    [VLAN]
    Id=10
    
  2. 配置 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:配置未生效

  • 检查步骤
    1. 确认配置文件命名正确(如 10-eth0.network)。
    2. 使用 networkctl reload 重新加载配置。
    3. 检查日志:journalctl -u systemd-networkd

     Q2:IPv6 网关配置失败

  • 原因:IPv6 网关需指定网卡名称(如 2001:db8::1%eth0)。
  • 验证命令
    ip -6 route show default
    

     Q3:DNS 解析失败

  • 解决方法
    1. 确保 DNS= 参数已配置。
    2. 重启服务:
      systemctl restart systemd-resolved
      

6. 总结

  • 优势
    • 轻量、高效,与 systemd 深度集成。
    • 支持复杂网络拓扑(VLAN、桥接、隧道等)。
  • 适用场景
    • 服务器、容器、嵌入式设备等静态网络环境。
    • 需通过代码管理的自动化部署场景。

通过灵活使用 systemd-networkd 的配置文件,可以实现从简单到复杂的网络需求。










以下是 systemd-networkd 配置文件的详细说明,帮助您自定义网络设置:


配置文件结构

  1. 文件位置

    • 配置文件通常位于 /etc/systemd/network/,命名格式为 <优先级>-<网卡名>.network(如 10-ens33.network)。
  2. 基本组成

    • [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配置技巧

  1. 同一接口多IP

    [Network]
    Address=192.168.1.10/24
    Address=192.168.1.11/24
    Address=2001:db8::1/64
    Address=2001:db8::2/64
    
  2. 混合IPv4/IPv6网关

    Gateway=192.168.1.1      # IPv4默认网关
    Gateway=fe80::1          # IPv6默认网关
    

DNS高级配置

  1. DNS优先级

    DNS=8.8.8.8 2001:4860:4860::8888  # 按顺序查询
    
  2. DNSSEC与缓存

    DNSSEC=true              # 启用DNSSEC验证
    DNSSECNegativeTrustAnchors=  # 配置DNSSEC信任锚
    LLDP=true                # 启用LLDP协议(网络设备发现)
    

配置验证与调试

  1. 检查配置语法

    sudo systemd-networkd-wait-online --interface=ens33 --timeout=10
    
  2. 查看生效配置

    sudo networkctl status ens33
    
  3. 日志排查

    journalctl -u systemd-networkd -n 50 --no-pager
    

注意事项

  1. 缩进规则:使用空格(非Tab),层级对齐。
  2. 优先级冲突:避免多个配置文件匹配同一接口。
  3. 重启生效:修改后执行 sudo systemctl restart systemd-networkd

通过灵活组合这些配置段,您可以实现复杂网络需求(如多IP负载均衡、策略路由、混合IPv4/IPv6环境)。



















Ubuntu-server-16.04 设置多个ip和多个ipv6

在Ubuntu Server 16.04中为单个网卡配置多个IPv4和IPv6地址,需通过修改网络配置文件实现。以下是分步指南:


一、配置多个IPv4地址

  1. 编辑网络配置文件

    sudo nano /etc/network/interfaces
    
  2. 添加接口别名(以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地址

  1. 静态配置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

四、验证配置

  1. 检查IPv4地址

    ip addr show eth0
    
  2. 检查IPv6地址

    ip -6 addr show eth0
    
  3. 测试连通性

    ping 192.168.1.101
    ping6 2001:db8::101
    

注意事项

  1. 网关设置:仅主接口需要配置网关,别名接口无需重复设置。
  2. 防火墙规则:若启用ufw,需允许新IP的流量:
    sudo ufw allow from 192.168.1.101 to any
    sudo ufw allow from 2001:db8::101 to any
    
  3. 备份配置:修改前备份/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:确认网卡名称
首先查看当前网卡名称(如 ens33enp0s3 等):

ip a

步骤 2:编辑 Netplan 配置文件
Ubuntu 18.04 的 Netplan 配置文件通常位于 /etc/netplan/ 目录下,文件名可能是 50-cloud-init.yaml01-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

验证配置

  1. 检查 IP 地址

    ip a show ens33
    

    应看到多个 IPv4 和 IPv6 地址。

  2. 测试连通性

    ping -4 google.com -c 3    # IPv4 测试
    ping -6 google.com -c 3    # IPv6 测试
    

常见问题解决

     1. IPv6 地址无法访问

  • 确保 IPv6 地址的网关和前缀(如 /64)配置正确。
  • 检查路由器是否允许静态 IPv6 地址分配。

     2. 多个网关冲突

  • 如果 IPv4 和 IPv6 使用不同网关,确保 gateway4gateway6 字段分开配置(如示例所示)。

     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)

关键注意事项

  1. 网卡名称:务必通过 ip a 确认实际网卡名称。
  2. IPv6 地址格式:必须包含前缀长度(如 /64)。
  3. 配置文件路径: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:确认网卡名称
查看当前网卡名称(如 ens33enp0s3 等):

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

验证配置

  1. 检查 IP 地址

    ip a show ens33
    

    输出应包含所有配置的 IPv4 和 IPv6 地址。

  2. 测试连通性

    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

关键注意事项

  1. 网卡名称:通过 ip a 确认实际网卡名称,错误名称会导致配置失败。
  2. IPv6 地址格式
    • 必须包含前缀长度(如 /64)。
    • 建议用双引号包裹 IPv6 地址(避免 YAML 解析错误)。
  3. 配置文件路径: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:确认网卡名称
查看当前网卡名称(例如 ens33enp0s3):

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

验证配置

  1. 检查 IP 地址

    ip a show ens33
    

    输出应包含所有配置的 IPv4 和 IPv6 地址。

  2. 测试连通性

    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

关键注意事项

  1. 网卡名称:必须通过 ip a 确认实际名称,错误名称会导致配置失败。
  2. IPv6 地址格式
    • 必须包含前缀长度(如 /64)。
    • 使用双引号包裹 IPv6 地址(避免 YAML 解析错误)。
  3. 配置文件路径: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:确认网卡名称
通过以下命令查看网卡名称(如 enp0s3ens33):

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

验证配置

  1. 检查 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 ...
    
  2. 测试连通性

    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 避免动态地址覆盖静态配置。
  • 防火墙规则:检查 ufwiptables 是否阻止 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

关键注意事项

  1. 网卡名称:必须通过 ip a 确认实际名称,错误名称会导致配置失败。
  2. IPv6 地址格式
    • 必须包含前缀长度(如 /64)。
    • 使用双引号包裹 IPv6 地址(避免 YAML 解析错误)。
  3. 配置文件路径: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-networkdNetworkManager 的详细对比,涵盖设计目标、功能特性、适用场景及优缺点:


1. 定位与设计目标

特性systemd-networkdNetworkManager
开发背景作为 systemd 生态的一部分,专为 Linux 系统集成设计由 Red Hat 主导开发,面向桌面和移动设备的动态网络管理
目标用户服务器、容器、轻量级系统桌面用户、笔记本、移动设备
核心目标轻量、快速、与 systemd 深度集成动态网络管理(Wi-Fi、VPN、热点等)

2. 功能对比

功能systemd-networkdNetworkManager
网络类型支持✅ 以太网、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-networkdNetworkManager
内存占用极低(作为 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 设置。
    • 命令行工具:nmclinmtui
    • 配置文件:/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-networkdNetworkManager,需确保仅启用一个服务

# 禁用 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-networkdNetworkManager 是 Linux 中两种主流网络管理工具,各有优劣,适用于不同场景。以下是它们的对比:


1. 核心定位

  • systemd-networkd

    • 轻量级网络配置工具,集成于 systemd 生态。
    • 专注于基础网络配置(IP、路由、DNS),适合服务器/容器环境。
  • NetworkManager

    • 功能全面的网络管理守护进程。
    • 支持动态网络(WiFi、移动宽带)、VPN、多网卡复杂路由等,适合桌面/笔记本。

2. 功能对比

功能systemd-networkdNetworkManager
静态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-networkdNetworkManager 的详细对比,基于功能、适用场景、配置方式等维度:


1. 核心定位与设计目标

特性systemd-networkdNetworkManager
设计目标轻量级、稳定、基础网络配置,适合服务器和嵌入式设备。动态、多功能网络管理,适合桌面环境和复杂网络场景。
集成性systemd 生态的一部分,与 systemd-resolved(DNS)、systemd-timesyncd(NTP)深度集成。独立工具,提供图形界面和命令行工具(nmcli),支持多种网络类型和协议。

2. 功能对比

功能systemd-networkdNetworkManager
配置方式通过纯文本配置文件(.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-networkdNetworkManager
服务器/嵌入式设备推荐:轻量、稳定,适合静态网络配置。不推荐:功能过重,且不需要图形界面或动态网络切换。
桌面环境不推荐:缺乏图形界面和动态网络管理功能。推荐:支持 Wi-Fi、VPN、多网络配置,适合桌面用户。
资源限制环境推荐:占用资源少,适合资源有限的设备。不推荐:占用资源较多,依赖图形库。
复杂网络需求例如 VLAN、网桥等虚拟网络配置可行,但需手动配置。支持更复杂的策略路由、多网络接口动态管理。

4. 配置复杂度与用户友好性

方面systemd-networkdNetworkManager
配置方式命令行/文本配置:需手动编辑配置文件(如 /etc/systemd/network/10-static.network)。图形界面 + 命令行:通过 nm-connection-editornmcli 简单配置。
学习曲线较陡峭,需熟悉 .ini 格式和 systemd 生态。较平缓,图形界面直观,命令行工具 nmcli 功能丰富。
实时修改生效需重启服务或重载配置(systemctl restart systemd-networkd)。支持动态修改,无需重启(如 nmcli con up)。

5. 与其他服务的冲突

  • systemd-networkd
    • 需禁用 NetworkManagerNetplandhcpcd 等其他网络管理工具。
    • systemd-resolved 深度集成,需确保 /etc/resolv.conf 指向 systemd-resolved
  • NetworkManager
    • 会接管所有网络接口,需禁用 systemd-networkdNetworkManager 的其他实例或传统网络工具(如 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-networkdNetworkManager 是 Linux 系统中用于管理网络连接的两个工具,它们各有特点,以下是对它们的详细比较:

设计目标

  • systemd - networkd:它是 systemd 系统和服务管理器的一部分,设计初衷是与 systemd 生态系统紧密集成,为系统提供简洁、高效且自动化的网络配置。其主要面向服务器环境,着重于静态网络配置和系统启动时的网络初始化。
  • NetworkManager:它的设计目标是提供一个用户友好、动态的网络管理解决方案,适用于各种环境,尤其是桌面系统。它能够自动检测网络连接的变化,如无线网络的接入点变化、有线网络的插拔等,并自动调整网络配置。

配置方式

  • systemd - networkd:使用 .network.netdev 等配置文件进行配置,这些文件通常位于 /etc/systemd/network/ 目录下。配置文件采用 INI 格式,适合通过脚本或自动化工具进行批量配置。例如,以下是一个简单的 eth0.network 配置文件示例:
[Match]
Name=eth0

[Network]
DHCP=yes
  • NetworkManager:既可以通过图形界面(如 GNOME 桌面环境中的网络设置面板)进行配置,也可以使用命令行工具 nmclinmtui 进行配置。这种多样化的配置方式使得普通用户也能轻松管理网络连接。例如,使用 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-networkdNetworkManager都是常用的网络管理工具,但它们的设计目标和适用场景有所不同。以下是它们的比较:

设计目标与适用场景

  • systemd-networkd
    • 设计目标:作为systemd的一部分,systemd-networkd旨在为服务器、嵌入式系统等提供基础的网络配置和管理功能。它专注于静态网络配置,适用于需要手动配置网络接口的系统。
    • 适用场景:服务器环境、云环境、容器以及嵌入式设备等,特别是当系统需要简洁高效的网络配置时。
  • NetworkManager
    • 设计目标NetworkManager是一个全面的网络管理工具,注重用户体验和动态网络切换,适用于桌面和移动设备。
    • 适用场景:桌面和笔记本电脑,特别是在需要频繁切换网络连接的场景,如Wi-Fi和以太网之间切换,或者需要连接VPN时。

功能特性

  • 配置方式
    • systemd-networkd:通过配置文件(位于/etc/systemd/network/目录下)来管理网络接口,支持.network.netdev配置文件。它主要关注静态配置,但也支持通过DHCP、IPv6和VLAN等协议来动态配置网络。
    • NetworkManager:支持图形用户界面(如GNOME网络管理器、KDE网络管理器等)和命令行工具(如nmcli)。它使用.nmconnection文件来管理不同的网络连接。
  • 支持的网络类型
    • systemd-networkd:支持传统的有线网络、无线网络和虚拟网络接口的配置。
    • NetworkManager:支持有线网络、无线网络(Wi-Fi)、VPN(包括OpenVPN、IPSec等)、桥接、网络共享等多种网络接口类型。
  • 动态配置能力
    • systemd-networkd:虽然主要用于静态配置,但它也支持通过DHCP、IPv6等协议来动态配置网络。
    • NetworkManager:提供自动连接的功能,能够自动获取DHCP地址、DNS设置等,适用于动态网络环境。

性能与资源占用

  • systemd-networkd:设计上更简洁、快速且资源占用低,适合在服务器和容器等环境中使用。
  • NetworkManager:功能更全面,但相对复杂,资源占用相对较高。

总结

  • 如果你使用的是服务器、嵌入式设备或容器,且需要简洁高效的网络配置,systemd-networkd是一个很好的选择。
  • 如果你使用的是桌面或笔记本电脑,需要灵活的动态网络管理和友好的用户体验,NetworkManager更适合你。




















http://www.kler.cn/a/597315.html

相关文章:

  • 【AIGC 前沿】蓝耘 MaaS 搭载海螺 AI 视频,开启视频创作 “芯” 时代
  • 自定义reset50模型转换到昇腾om
  • ubuntu高并发内核参数调优 - (集群服务端调优)
  • docker compose部署minio报错
  • 【后端】【djanog】【进阶】【models】自定义模型方法 (`Model Methods`)——封装业务逻辑
  • 物联网 - JetLinks与ThingsBoard技术选型对比
  • liquid-dsp下windows的编译
  • 跨境电商IP安全生死线,住宅代理与浏览器指纹攻防实录
  • 阿里云国际站代理商:如何构建交互式安全分析看板?
  • CCF开源发展委员会常委会会议召开,共绘开源新蓝图
  • JavaScript事件
  • ref setState 合成事件
  • 第十六届蓝桥杯康复训练--5
  • 单片机原理与应用笔记
  • Excel(进阶篇):powerquery详解、PowerQuery的各种用法,逆透视表格、双行表头如何制作透视表、不规则数据如何制作数据透视表
  • 【Vitis AIE】FPGA图像处理 11 双线性插值 Bilinear Interpolation
  • 使用 ncurses 库创建文本用户界面:基础函数详解
  • 淘宝历史价格数据获取指南:API 与爬虫方案的合法性与效率对比
  • Baklib智能内容推荐的核心是什么?
  • 康谋方案 | AVM合成数据仿真验证方案