我正在尝试使用某种路由技巧,希望我的 Linux 服务器能够响应 arp 请求,10.0.0.1
尽管eth0
10.0.0.1
是不是配置的 IPeth0
(在这种情况下内核仍然会这样做)10.0.0.1
是不是路由到该服务器的其他接口(在这种情况下 arp 代理会有所帮助)。
效果应该是其他设备eth0
会将包裹路由到10.0.0.1
我的服务器,然后我可以在PREROUTING
其他表中处理它们。
我可以这样做吗?最好不需要额外的守护进程?
根据要求,这是我的动机(但请注意,这个问题是不是关于如何通过不同方式实现这一目标的建议——我真正感兴趣的是知道上述是否可能,而不是是否合理:-))。
假设10.0.0.1
是公共 IP 地址,并且是唯一路由到相关机器的 IP 地址。系统 ( host
) 包含虚拟机 ( guest
)。我想guest
相信10.0.0.1
是他的,所以给它一个不同的 IP 并进行 nat 不是我想要做的。相反,我host
要
- 有另一个 IP 地址(
192.168.0.1
),非公开路由, - 表现得
eth0
好像它有10.0.0.1
, - 将对 的任何访问重定向
10.0.0.1:2222
到192.168.0.1
,即在本地处理, - 将任何其他流量路由到所连接的
10.0.0.1
虚拟接口。guest
这解释了问题中的两个约束:机器guest
可能不总是处于运行状态,因此提到的路由不会总是存在——这就是排除代理 ARP 的原因。另外,我无法对 进行评估10.0.0.1
,eth0
因为让 Linux 路由发往内核认为是本地地址的包确实很困难。例如,local
根据 ,路由表的优先级为 0 。ip rule
答案1
那么使用 IP 别名(例如 eth0:1 )怎么样?这将导致接口响应 ARP,并允许您使用 iptables 管理其行为。
此外,不清楚为什么 proxy-arp 在这里对您没有帮助,因为您可以使用 iptables 规则中断预期的行为。
你能详细解释一下你想要实现的目标吗?