同一子网上的多个接口中断 PTP

同一子网上的多个接口中断 PTP

我有一台 PC(“主 PC”),它有两个接口 mgbe0 和 mgbe1。这两个接口都连接到另一台 PC A 和 B(mgbe0->“A”,mbge1->“B”)。PC A 和 B 都在子网 2 上:192.168.2.xxx,我无法更改这一点。因此,要连接到其他 PC,我需要主 PC 上的两个接口都在子网 2 上。在谷歌搜索后,我发现我需要一个桥接器来将两个接口设置为相同的 IP 地址。这是我的 netplan 配置:

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    mgbe0:
      dhcp4: no
    mgbe1:
      dhcp4: no
  bridges:
    br0:
      dhcp4: no
      addresses:
        - 192.168.2.86/24
      interfaces:
        - mgbe0
        - mgbe1

通过此配置,主 PC 可以 ping 和 ssh 到其他两台 PC,并且 PC A 和 PC B 都可以 ping/ssh 到主 PC。

但出现了一个问题:PC A(连接到 mbge0)通过 PTP(精确时间协议)与 mgbe0 时钟同步。但当我设置桥接时,PTP 不起作用。这可能是因为完整的路径延迟测量(即延迟请求和延迟响应)没有完成。

我该如何配置网桥以允许这些请求工作?或者是否可以将 mgbe0 和 mgbe1 放在同一子网上的不同 IP 地址上?如果可以,我该怎么做?

感谢您的帮助!

答案1

PTP(IEEE 1588-2019)支持两种不同的传输:第 2 层和第 3 层(UDP)。

UDP 是两者中最为常见的一种,因此我假设您正在使用它。在这种情况下,您处于一种“进退维谷”的境地:

  • LinuxPTP不支持桥接,因此您无法将其配置为使用br0
  • mgbe0没有 IP 地址,因此它无法发送 UDP 数据报(位于 IP 之上)。

特别是,如果您使用 PTPv2.1混合PTP(我个人更喜欢这种方式,因为它是最有效的网络利用方式),那么您需要能够接收多播 UDP 数据报以及发送和接收单播 UDP 数据报。

因此,您需要“以某种方式”诱骗 Linuxmgbe0使用 的源 IP发送 PTP 数据报br0,同时确保收到的 PTP 数据报被转发到 LinuxPTP。

你的情况似乎与这个邮件列表主题中的情况类似Linux 的 netdev邮件列表:RFC:Linux 桥接器上通过 UDPv4/UDPv6 实现的 PTP 边界时钟。不幸的是,这个线程没有找到一个通用的解决方案,仅是一种解决方法使用ebtables在内核中移动数据报:

ebtables --table broute --append BROUTING --protocol 0x88F7 --jump DROP

ebtables --table broute --append BROUTING --protocol 0x0800 --ip-protocol udp --ip-destination-port 320 --jump DROP
ebtables --table broute --append BROUTING --protocol 0x0800 --ip-protocol udp --ip-destination-port 319 --jump DROP

ebtables --table broute --append BROUTING --protocol 0x86DD --ip6-protocol udp --ip6-destination-port 320 --jump DROP
ebtables --table broute --append BROUTING --protocol 0x86DD --ip6-protocol udp --ip6-destination-port 319 --jump DROP

注意:乍一看,这似乎会完全破坏 PTP。毕竟,它会过滤 PTP 流量并DROP对其进行保护。但是,表BROUTING中的链对于和目标broute具有特殊含义:ACCEPTDROPACCEPT表示“应该桥接”和DROP“应该路由”

因此,这些规则的意思是,发送到端口 319 和 320(即 PTP)的 UDP 数据包应该被路由,而不是桥接。这意味着它们由桥的组成成员接口处理,而不是桥本身。

如果我理解得没错的话(我不能保证,因为我实际上只是在 10 分钟前开始写这个答案时才开始了解它),mgbe0需要有一个有效的 IP 配置才能工作。因此,您需要修改您的网络计划配置如下:

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    mgbe0:
      dhcp4: no
      addresses:
        - 192.168.2.85/24 # or whatever
    mgbe1:
      dhcp4: no
  bridges:
    br0:
      dhcp4: no
      addresses:
        - 192.168.2.86/24
      interfaces:
        - mgbe0
        - mgbe1

相关内容