了解 Netplan IP 地址表示法

pto*_*tor 1 networking netplan

我对 Netplan 配置有一些疑问,但找不到任何相关信息:

  1. 我发现为了表示 IP 地址,您必须使用关键字addresses

    配置接口 ( enp3s0) 或 DNS 服务器 ( nameservers) 的 IP 地址时会发生这种情况,但配置网关 ( gateway4) 时不会发生这种情况:

    network:
      version: 2
      renderer: networkd
      ethernets:
        enp3s0:
          addresses:
            - 10.10.10.2/24
          nameservers:
            addresses: [8.8.8.8, 1.1.1.1]
          gateway4: 10.10.10.1
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我见过三种不同的 IP 表示法

    • 直接在 之后:,例如
    gateway4: 10.10.10.1
    
    Run Code Online (Sandbox Code Playgroud)
    • 在新行中使用-, 例如
    enp3s0:
      addresses:
        - 10.10.10.2/24
    
    Run Code Online (Sandbox Code Playgroud)
    • 使用[], 就像在
    nameservers:
      addresses: [8.8.8.8, 1.1.1.1]
    
    Run Code Online (Sandbox Code Playgroud)

    我对何时使用它们有点困惑。

小智 5

答案在于对 YAML 语法的理解。

YAML 使用键/值对。一组键/值对就是一个“映射”。值(在键/值对中)可以是单个标量、列表或映射。列表可以是标量列表、列表或映射。列表可以放在一行中,用方括号 [] 括起来并用逗号分隔,也可以将列表放在单独的行中,并在每个列表元素的开头使用连字符。如果我们不考虑多文档功能,YAML 文件的顶层是一个映射。

这里的 ip 地址是一个标量列表,列表中只有一个元素。

  addresses:
  - 10.10.10.2/24
Run Code Online (Sandbox Code Playgroud)

这里的 IP 地址是两个标量的列表,但所有元素都在一行上。

  addresses: [8.8.8.8, 1.1.1.1]
Run Code Online (Sandbox Code Playgroud)

这里的 IP 地址是一个标量。

  gateway4: 10.10.10.1
Run Code Online (Sandbox Code Playgroud)

正如您可能猜到的,如果您愿意,可以像这样重写前两个。

  addresses: [10.10.10.2/24]

  addresses:
  - 8.8.8.8
  - 1.1.1.1
Run Code Online (Sandbox Code Playgroud)

因此,看起来只能有一个网关(标量),但可以有多个名称服务器地址以及分配给一个接口的多个地址。