小编T2P*_*2PS的帖子

nftables:段之间重复的广播数据包

我们有一个 Debian Buster 盒子(nftables 0.9.0,内核 4.19)连接到四个不同的网段。其中三个网段是运行 Syncthing 的设备的所在地,Syncthing 通过向 UDP 端口 21027 广播来运行自己的本地发现。因此,由于广播不跨网段,因此这些设备不能全部“看到”彼此;Buster 盒本身不参与同步集群。

虽然我们可以通过在 Buster 盒子上运行 Syncthing 的发现或中继服务器来解决这个问题,但我们被要求不要使用它们(由于配置和漫游到其他站点的设备的原因)。因此,我们正在寻找基于 nftables 的解决方案;我的理解是,通常不会这样做,但为了使这项工作有效,我们必须:

  • 匹配 UDP 21027 上的传入数据包
  • 将这些数据包复制到需要查看的其他网段接口
  • 更改新数据包的目标 IP 以匹配新网段的广播地址(同时保留源 IP,因为发现协议可以依赖它)
  • 发出新的广播而不会再次重复

只有三个附加段参与设备;所有子网掩码均为/24。

  • 段 A (eth0, 192.168.0.1) 不应转发
  • 网段 B(eth1、192.168.1.1)应仅转发到网段 A
  • 段 C (eth2, 192.168.2.1) 应转发到 A 和 B

到目前为止,我们最接近的工作规则是(为简洁起见,省略了其他 DNAT/MASQ 和本地过滤规则):

table ip mangle {
    chain repeater {
        type filter hook prerouting priority -152; policy accept;
        ip protocol tcp return
        udp dport != 21027 return
        iifname "eth1" ip saddr 192.168.2.0/24 …
Run Code Online (Sandbox Code Playgroud)

nftables

4
推荐指数
1
解决办法
2027
查看次数

标签 统计

nftables ×1