未应用 netplan 中的设置

未应用 netplan 中的设置

需要一些建议。我有两个网络接口,我为每个接口配置单独的 IP 和路由。

network:
  ethernets:
    enp4s0:
      dhcp4: no
      dhcp6: no
      addresses:
        - 192.168.0.222/24
    enp2s5:
      dhcp4: no
      dhcp6: no
      addresses:
        - 192.168.1.5/24
  version: 2
  renderer: networkd

我按 sudonetplan——调试应用我发现这些设置没有应用到其中一个接口,我做错了什么?

DEBUG:no netplan generated NM configuration exists
DEBUG:enp4s0 not found in {}
DEBUG:enp2s5 not found in {'enp4s0': {'dhcp4': False, 'dhcp6': False, 'addresses': ['192.168.0.222/24']}}
DEBUG:Merged config:
network:
  bonds: {}
  bridges: {}
  ethernets:
    enp2s5:
      addresses:
      - 192.168.1.5/24
      dhcp4: false
      dhcp6: false
    enp4s0:
      addresses:
      - 192.168.0.222/24
      dhcp4: false
      dhcp6: false
  ovs_ports: {}
  vlans: {}
  wifis: {}

为什么网络适配器 enp4s0 的设置未应用?为什么此适配器的设置最终会应用到另一个适配器 (enp2s5)?

答案1

我遇到了错误DEBUG: enp3s0 not found in {},但我决定继续并保持原样。接口的状态结构应确定是否存在工作配置。您可能需要考虑在重新启动后进行这些更改。解决方法:创建一个正在运行的配置视图以重新加载并访问视图。从一开始,您需要执行命令来确认配置并重新启动。但在此之前,您需要确保配置适合此目的。在搜索此问题时,我遇到了几个提示,类似的问题DEBUG:可能是由于接口之间缺乏交互造成的。这是它们之间没有桥梁或隧道。当事件最终被处理时,您会崩溃,因为发送方必须在 netplan 配置中引用桥梁或隧道本身存在的悬空指针。发送方不需要知道任何收件人。收件人当然知道发送方;至少他知道发送给他的消息类型,就像在您之前的配置中一样,在重新启动之前,侦听器知道他应该订阅的事件。

在这种情况下,应该提到这样一个事实:使用生成器处理二进制数据是一种不加考虑的延伸。从一种类型转移到另一种类型的机制必须以某种方式清晰(它不能包含不可打印的部分)。如果您想要一个可用于处理二进制数据或任何其他与指针无关的数据的配置,那么您迟早会得到一个怪物。如果开发人员没有使用警告/错误预防措施,生成器可以做到这一点,并且会很容易地做到这一点。

sudo netplan --debug generate显示:

DEBUG: 18: 16: 37.189: We have some netdefs, pass them through a final round of validation
DEBUG: 18: 16: 37.189: enp3s0: setting default backend to 1
DEBUG: 18: 16: 37.189: Configuration is valid
DEBUG: 18: 16: 37.189: lo: setting default backend to 1
DEBUG: 18: 16: 37.189: Configuration is valid
DEBUG: 18: 16: 37.190: Generating output files ..
DEBUG: 18: 16: 37.190: NetworkManager: definition enp3s0 is not for us (backend 1)
DEBUG: 18: 16: 37.190: NetworkManager: definition lo is not for us (backend 1)

上述源代码是我 netplan 的简化部分实现,我提供它是为了更清楚地显示哪个部分是错误的,我想简化解决问题的答案。我认为主要问题是,Configuration is valid它按照我想要的方式工作。这意味着您的生成器已在未经通知的情况下启用了 netdefs 截断。在配置中读取、写入yaml不会导致任何问题。这就是为什么我没有发现源中没有找到接口的不匹配问题 -_-!绑定是固定管道的一部分,因此如果您想使用它,则需要从重新加载后创建的另一个集合继承。我想保持DEBUG: enp4s5 not found in {}原样,我认为这完全取决于你对空虚的定义。使用这些命令来声明此代码已被剥离但有效:

sudo netplan try
sudo netplan generate
sudo netplan apply
reboot

转换为整数也是“合理的”,因为你得到的是截断值。然后你看看错误。如果你使用的是 systemd-networkd:

networkctl
journalctl -b -u systemd-networkd

============================================================================

有提示导致错误的原因可能DEBUG: enp3s0 not found in {}是设置了Kind =。这意味着错误的分配导致了生成器错误。检查此内部错误:

NetDev has no Kind configured in /etc/systemd/network/10-netplan-lo.netdev. Ignoring
NetDev has no Kind configured in /etc/systemd/network/10-netplan-enp3s0.netdev. Ignoring

基于Kind =调用类似方法的调用堆栈的工作理论gre, veth将使整个范围(包括交互区域)无效,从而防止流量路由方法失败。此时,元素引用的场景尚未初始化(显然),而是基于以下条件强制执行的:

 Name = - the name of the interface. This option is required.
 Kind = - kind of interface. For example, bridge, bond, vlan, veth, sit, etc. This option is required.

我的解决方法是使Kind =接口之间可调用,并使用添加的条目找到源,因此根据您的需要,这可能是一个选项。要验证概念设计,请在重新启动后在接口之间进行路由,但由您自行决定,最终 DEBUG: enp3s0 not found in {}将总计。

相关内容