我有一个带有6个networking接口的多宿主linux机器,用来运行一些路由器硬件的testing。 我希望能够在任意进程上设置“NIC关联”(缺less更好的术语),以便即使目标IP可能对应于本地接口,该进程的所有networking通信也将通过另一个进程路由出去接口(并由外部设备环回)。 理想情况下,一个进程的关联设置不会影响另一个进程。
作为一个示例用例,说我有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,那么没有stream量会穿过外部连接,因为目标对应于本地机器,但是如果我以某种方式将shell进程的亲和性设置为eth0,则ICMPstream量将通过eth0stream出,进入外部路由器,再回到eth1。 这是我想保证的外部路由器的遍历,因为将有多个,我需要能够绑定到任意的网卡。
这可能吗? 鉴于迄今为止我的search,我没有看到答案,但没有提到我想做的事情导致我怀疑我错过了一个重要的考虑,因为这似乎不是一个原来的问题(只是一个奇怪的)。
FWIW,这是一个Ubuntu Linux 11.10盒子。 任何指向类似的工作或build议的工具将不胜感激。 谢谢!
这似乎是一种情况,您可能需要退一步,让我们以更一般的方式了解您正在努力完成的任务,而不是如何实施特定的解决scheme。
也就是说,为了在Linux中设置绑定到特定接口的进程,你需要破解绑定系统调用( man 2 bind )。 您可以使用替代库并预加载它们,请参阅如何在超级用户上使用不同的networking接口进行不同的进程 。
您可以添加新的默认路由到新的networking,然后像下面那样删除旧的networking关联。
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度的亲和度,这是度量