如何使用 iptables 让 SNAT 处理 ARP 请求?

How can I get SNAT to work with ARP requests using iptables?

问题陈述
我在不同的网络上有两个节点(N1 和 N2)。它们都连接到公共节点 (Nc) 上的单独接口。我需要从 N1 ping 到 N2.

参考:
N1: IP 地址 172.1.1.96/24
N2: IP 地址 10.1.1.33/24
Nc: lan1 10.1.1.1/24
局域网 172.1.1.1/24

______________________________________________________________
| / Nc \ |
| N1 <------>|开关1 |<--------> |局域网2 <--> 局域网1 | <--------> |开关2 | <--------> N2 |
| _______________________\___________/__________________________ |

尝试次数

我已经在 N1 中添加了一条路由规则,将所有 10.1.1.0/24 数据包发送到 172.1.1.1 (Nc), 以及以下 iptables 规则到 Nc:

iptables -t nat -A POSTROUTING -s 172.1.1.96 -o lan1 -j SNAT --to 10.1.1.79

然后我从 N1 向 N2 发送 ping。 N2 收到 ping 并发送 ARP 请求。此 ARP 未被 Nc 应答,导致 N2 不响应 ping。

问题
如何让 Nc 响应 arp 请求?

备注

我不能使用伪装​​。弄清楚这一点后,我将开始添加我认为使用伪装不可能实现的更复杂的翻译规则。

代理 ARP 是解决方案。通过设置 proxy_arp 或 proxy_arp_pvlan 标志(请参阅 serverfault post 了解使用的说明),Linux 将响应来自 N2[= 的 ARP 请求15=]代表N1.