我有一台 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
具有特殊含义:ACCEPT
DROP
ACCEPT
表示“应该桥接”和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