AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-341057

ncoghlan's questions

Martin Hope
ncoghlan
Asked: 2021-07-15 00:57:04 +0800 CST

iptables NETMAP 不能可靠地调整多播 UDP 数据包的源地址

  • 0

在嵌入式/物联网用例中,我有一个运行 Linux 的管理主机,它需要能够与多个网络通信,每个网络都使用一组通用的静态 IP 地址。

这主要工作正常,包括 UDP 多播流量,给定:

  • 每个嵌入式网络的网络链接(称它们eth1为 ,eth2等)
  • 每个不同的嵌入式网络都有一个单独的 Linux 网络命名空间(称它们ns1为 ,ns2等)
  • 每个网络命名空间和根命名空间之间的对等链接(从网络命名空间端调用它们peer1,等,从根命名空间端调用它们 , 等)peer2veth1veth2
  • 每个命名空间中的 iptables NETMAP 规则将冲突的静态 IP 子网(调用它192.168.0.x)映射到一组非冲突的静态 IP 子网(调用它们192.168.1.x,192.168.2.x等等)
  • 每个网络命名空间内的一个smcrouted实例,用于转发多播组注册
  • 对等链接的根命名空间侧的不同(非 NAT)子网中的单独 IP 地址,以解决此问题的主题(调用它192.168.(x+100).1)

要尝试可视化流量:

[|root namespace|::veth1] <-> [peer1::(namespace ns1)::eth1] <-> embedded network
[|              |::veth2] <-> [peer2::(namespace ns2)::eth2] <-> embedded network
... etc ...

ns1静态 IP 子网的示例 NETMAP 规则:

sudo -n ip netns exec ns1 iptables -t nat -A PREROUTING -d 192.168.1.0/24 -i peer1 -j NETMAP --to 192.168.0.0/24
sudo -n ip netns exec ns1 iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o peer1 -j NETMAP --to 192.168.1.0/24

ns1smcrouted支持的多播组的示例配置规则:

mgroup from eth1 group 239.255.60.60
mgroup from peer1 group 239.255.60.60
mroute from eth1 group 239.255.60.60 to peer1
mroute from peer1 source 192.168.101.1 group 239.255.60.60 to eth1

这个问题的实际主题是NETMAP源IP调整中有一个奇怪的故障,我无法解释,只能解决。

我的预期行为:

  • 网络命名空间内的 UDP 多播订阅将看到未修改的 pre-NETMAP192.168.0.x源地址
  • 根命名空间内的 UDP 多播订阅将看到修改后的 NETMAP192.168.1.x源地址

不过,这不是发生的事情。相反,两个命名空间中的订阅者要么看到 NETMAP 之前的 192.168.0.x 源地址,要么他们看到 192.168.1.x 之后的 NETMAP 地址。

配置中规则的source过滤器用于防止多播路由循环,否则该循环会在服务器切换到第二组行为时启动。mroute from peer1smcroute

到目前为止,我还无法确定导致两种状态之间转换的原因,只能在源地址信息看起来错误时通过基于活动网络命名空间或源网络接口进行调整来解决应用层的问题。

提出问题的目的是帮助确定以下哪一项适用:

  • 预计这不会起作用,在应用程序层进行补偿是可以做到的最好的(考虑到在 Linux 容器环境中使用网络命名空间,这似乎不太可能)
  • 在内核、iptables 或 smcroute 中需要配置(或未配置)其他东西,以防止错误行为发生

(注意:这是一个非常深奥、非常具体的问题,所以我想知道网络工程是否更合适,但是https://networkengineering.stackexchange.com/questions/64744/linux-local-multicast-egress-follows -forward-chain-when-smcroute-is-active明确表示这是用于使用商业路由器等,而不是用于 Linux 网络名称空间配置。我不太清楚 Server Fault 与 Unix & Linux 堆栈交换之间的界限但是,在配置 Linux 服务器时)

iptables linux-networking network-namespace
  • 1 个回答
  • 261 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve