如何在 Ubuntu Linux 下设置网络接口亲和性?

如何在 Ubuntu Linux 下设置网络接口亲和性?

我有一个多宿主 Linux 机器,它有 6 个网络接口,我用它来运行一些路由器硬件测试。我希望能够在任意进程上设置“NIC 亲和性”(因为没有更好的术语),这样即使目标 IP 可能对应于本地接口,该进程的所有网络流量都将通过另一个接口路由出去(并由外部设备环回)。理想情况下,一个进程的亲和性设置不会影响另一个进程的亲和性设置。

作为一个示例用例,假设我有 eth0=192.168.0.1 和 eth1=10.0.0.1。以及一个连接到 eth0 和 eth1 的外部路由器,其 IP 分别为 192.168.0.2 和 10.0.0.2。如果我打开 shell 并 ping 10.0.0.1,则不会有任何流量穿过外部连接,因为目的地对应于本地计算机,但如果我以某种方式将 shell 进程的亲和性设置为 eth0,ICMP 流量将通过 eth0 流出,进入外部路由器,然后再次返回 eth1。我想要保证的是外部路由器的遍历,而且由于会有多个路由器,我需要能够绑定到任意 NIC。

这可能吗?根据我迄今为止的搜索,我没有找到任何答案,但没有提到我正在尝试做什么,这让我怀疑我错过了一个重要的考虑因素,因为这似乎不是一个原始问题(只是一个奇怪的问题)。

顺便说一下,这是一个 Ubuntu Linux 11.10 盒子。任何有关类似工作的指示或工具建议都将不胜感激。谢谢!

答案1

在这种情况下,您可能需要退一步,以更一般的方式让我们知道您想要实现的目标,而不是如何实施特定的解决方案。

话虽如此,为了在 Linux 中将进程绑定到特定接口,您需要破解 bind 系统调用 ( man 2 bind)。您可以使用替代库并预加载它们来实现这一点,请参阅如何为不同的进程使用不同的网络接口在超级用户上。

答案2

您可以向新网络添加新的默认路由,然后删除旧的网络亲和性,如下所示。

sudo ip route replace default via 192.168.100.1 dev wlp2s0 proto static metric 50
sudo ip route delete default via 192.168.100.1 dev wlp2s0  proto static  metric 600

这里第二行是度量为 600 的旧路由,第一行是度量为 50 的亲和性

相关内容