Linux:通过伪装的两个接口寻址相同的IP范围(不同的网络)

网络工程 纳特 linux 脱氧核糖核酸
2022-03-03 00:04:37

不确定是否可以完成:由于传统设置,有两个单独的网络都使用相同的 C 类子网 192.168.0.0/24。我有一个带有两个物理接口的 Linux 机器,其中每个接口在该子网中都有一个(不同的)IP。

我想做的是添加 NAT 或伪装,使我能够访问第二个接口后面的网络,就好像它有另一个 IP 子网一样。即对 10.0.1.100 的任何请求都应该通过 eth2 接口发出,而对 192.168.1.100 的请求应该通过 eth1 发出。理想情况下,源 IP 应该看起来好像位于 192/24 子网中。即任何重写都应该只发生在本地盒子上。

路由表已相应设置:到 10/8 的流量设置为使用来自 192/24 子网的本地 IP 通过 dev eth2 传输,到 192/24 子网的流量被路由到 eth1。

但是,尝试添加 DNAT 来重写目标地址不起作用,因为这发生在预路由步骤中,并且重写会将任何流量重定向到具有 192/24 子网路由的第一个接口。

也许伪装可以工作,但在阅读了网络层的结构后,我不确定它是否可以或应该完成。

这是一个滑稽的设置,设置一个单独的盒子来做一些 NATing 可能更容易,但我觉得这里有一些有趣的东西要学习,所以很高兴听到在这个主题上更有经验的人的意见😅

1个回答

这是 VRF 的工作——又名 netns。虽然大多数以主机为中心的操作系统将允许多个接口位于同一个数字子网中,但当它们实际上不是同一个网络时,其行为有些不可预测。Real Routers™ 不允许您这样做,因此必须将不同的接口放在不同的域中。在 linux 上,这是通过网络命名空间子系统(“netns”)完成的

一旦两个 192.168.0.0/24 被隔离,应该可以在它们之间进行 NAT。