![影响具有多个接口的同一目的地的源地址选择](https://linux22.com/image/766157/%E5%BD%B1%E5%93%8D%E5%85%B7%E6%9C%89%E5%A4%9A%E4%B8%AA%E6%8E%A5%E5%8F%A3%E7%9A%84%E5%90%8C%E4%B8%80%E7%9B%AE%E7%9A%84%E5%9C%B0%E7%9A%84%E6%BA%90%E5%9C%B0%E5%9D%80%E9%80%89%E6%8B%A9.png)
我有一个带有两个网络接口的系统,它们都连接到同一个默认网关。我想在两个接口上对从系统到同一目标 IP 的连接进行负载平衡,并使用每个接口的源 IP。我希望这个解决方案是通用的,适用于我们在系统中运行的任何程序。到目前为止,我观察到的是,Linux 维护一个小型路由缓存,因此一旦建立了前几个连接,就会锁定一条路由。因此,最初的几个连接分布在两个接口的源 IP 上,但最终会收敛到其中一个(我猜想在发生冲突的情况下,有一些逻辑可以锁定以决定哪条路由比其他路由更好)
只有在做出初始路由决策并选择源 IP 后,使用 iptables 才会影响数据包。有没有什么方法可以影响套接字的源 IP 选择,以便在多个接口之间进行负载平衡?
更新:我遇到了可以修改套接字属性的 eBPF,可以利用它来修改所有可用接口(环回接口除外)中循环使用的源地址吗?