如何在 Linux 网络命名空间中设置代理 ARP?

如何在 Linux 网络命名空间中设置代理 ARP?

我正在运行一个 veth 对 - 一端在根命名空间(我们称之为inner),另一端(我们称之为outer)在不同的命名空间内。

从命名空间中,我想在outer接口上设置代理 ARP,以便使用 MAC 地址解析给定子网内任何地址的 ARP 查询inner

我尝试从非根命名空间发出: arp -i outer -s 172.44.0.1 22:22:22:22:22:22 netmask 255.255.0.0 pub

其中172.44.0.1是子网中的地址,22:22:22:22:22:22是 的 MAC 地址inner

我明白了SIOCSARP: Invalid argument,但我不明白问题出在哪里。

答案1

自 1999 年和内核系列 2.2 左右以来,已经无法添加pub带有网络掩码的 arp 条目;参见此邮件列表主题

您必须将单独的 proxyarp 条目添加到您的 arp 表中(使用 /16 网络掩码感觉很笨拙),或者通过 在整个接口上启用 proxyarp /proc/sys/net/ipv4/conf/outer/proxy_arp,这将导致您的盒子回复全部arp 查询其具有路由的目的地,前提是目的地不朝向接口outer

你可能能够到达你想去的地方已删除;我还没试过。

相关内容