多个虚拟网络接口之间的负载平衡

pra*_*tri 6 linux networking

我有一个 AWS 实例,其中多个虚拟网络接口都具有不同的弹性 IP。由于我从这台机器上爬取,因此 IP 经常被阻止。通过所有这些接口分发传出流量将阻止它,因为它们都映射到不同的弹性 IP。

eth0      Link encap:Ethernet  HWaddr 0A:E6:A3:DD:F1:E0  
          inet addr:10.0.0.120  Bcast:10.0.0.127  Mask:255.255.255.128
          inet6 addr: fe80::8e6:a3ff:fedd:f1e0/64 Scope:Link

eth0:0    Link encap:Ethernet  HWaddr 0A:E6:A3:DD:F1:E0  
          inet addr:10.0.0.122  Bcast:10.0.0.127  Mask:255.255.255.128
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth0:1    Link encap:Ethernet  HWaddr 0A:E6:A3:DD:F1:E0  
          inet addr:10.0.0.18  Bcast:10.0.0.127  Mask:255.255.255.128
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
Run Code Online (Sandbox Code Playgroud)

我想以循环方式从所有网络接口发送我的传出流量。由于这些是虚拟接口,我无法使用iproute2包来实现这一点。有人可以告诉我如何实现这一目标吗?

phe*_*mer 4

您可以使用该iproute2套件来实现此目的。将源 IP 分配给接口别名这一事实对此问题没有影响。

假设您的默认网关是 10.0.0.1

ip route del default
ip route add default via 10.0.0.1 dev eth0 src 10.0.0.122
Run Code Online (Sandbox Code Playgroud)

就是这样。只需用第二行替换默认路由,替换10.0.0.122为您想要路由流量的源 IP。


如果您想同时使用所有 IP,只需为它们分配特定的子网即可:

ip route add 64.0.0.0/2 via 10.0.0.1 dev eth0 src 10.0.0.122
ip route add 128.0.0.0/2 via 10.0.0.1 dev eth0 src 10.0.0.18
Run Code Online (Sandbox Code Playgroud)

这将使任何出站流量能够64.0.0.0 - 127.255.255.255使用10.0.0.122128.0.0.0 - 191.255.255.255使用10.0.0.18。所有其他流量将使用默认值10.0.0.120


IP 分配给接口别名 (eth0:0) 的事实绝对没有影响。IProute2(或者实际上是内核)并不关心。
是的,我在我的家庭网络上尝试过,效果很好。