Acho que você deve ler sobre as interfaces bonding .
Se você quiser balancear a carga usando duas interfaces, o sistema ao qual você está se conectando tem que "falar" exatamente o mesmo protocolo LB que você faz.
Senão você perderá pacotes.
Então, eu tenho dois NICs:
eth0
eth1
e eu tenho vários endereços IP atribuídos a cada um:
auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet static
address 10.0.0.194
netmask 255.255.255.0
gateway 10.0.0.1
network 10.0.0.0
auto eth0:0
allow-hotplug eth0:0
iface eth0:0 inet static
address 10.0.0.253
netmask 255.255.255.0
auto eth0:1
allow-hotplug eth0:1
iface eth0:1 inet static
address 10.0.0.252
netmask 255.255.255.0
auto eth0:2
allow-hotplug eth0:2
iface eth0:2 inet static
address 10.0.0.251
netmask 255.255.255.0
auto eth1
allow-hotplug eth1
iface eth1 inet static
address 10.0.0.74
netmask 255.255.255.0
gateway 10.0.0.1
network 10.0.0.0
auto eth1:0
allow-hotplug eth1:0
iface eth1:0 inet static
address 10.0.0.105
netmask 255.255.255.0
auto eth1:1
allow-hotplug eth1:1
iface eth1:1 inet static
address 10.0.0.104
netmask 255.255.255.0
auto eth1:2
allow-hotplug eth1:2
iface eth1:2 inet static
address 10.0.0.106
netmask 255.255.255.0
Eu também configurei o ip route da seguinte forma:
sudo ip route add 10.0.0.0/24 dev eth0 table eth0
sudo ip route add default via 10.0.0.1 dev eth0 table eth0
sudo ip route add 10.0.0.0/24 dev eth1 table eth1
sudo ip route add default via 10.0.0.1 dev eth1 table eth1
sudo ip rule add from 10.0.0.194 table eth0
sudo ip rule add from 10.0.0.74 table eth1
Agora, quando executo os seguintes comandos, tudo funciona bem. Recebo meu IP externo:
curl --interface eth0 http://ipecho.net/plain ; echo
curl --interface eth0:0 http://ipecho.net/plain ; echo
curl --interface eth0:1 http://ipecho.net/plain ; echo
curl --interface eth0:2 http://ipecho.net/plain ; echo
curl --interface eth1 http://ipecho.net/plain ; echo
No entanto, quando eu corro:
curl --interface eth1:0 http://ipecho.net/plain ; echo
Nada acontece. Eu obviamente estraguei minhas rotas ou algo assim. Alguém pode me ajudar? Obrigado.
rota ip
default via 10.0.0.1 dev eth0
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.194
10.0.0.0/24 dev eth1 proto kernel scope link src 10.0.0.74
route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
EDITAR:
Então eu encontrei isso, que é o que estou tentando fazer, no entanto, não quero especificar nenhuma sub-rede. Eu só quero que ele faça um round-robin nos pedidos.
Acho que você deve ler sobre as interfaces bonding .
Se você quiser balancear a carga usando duas interfaces, o sistema ao qual você está se conectando tem que "falar" exatamente o mesmo protocolo LB que você faz.
Senão você perderá pacotes.
Se você estiver tentando balancear a carga entre dois nics físicos, convém procurar uma conexão em ponte. A razão pela qual o seu segundo nic não está respondendo, é porque o caminho que você tem para ele é o mesmo caminho que você tem para o seu primeiro nic. Assim, todas as interfaces virtuais sob nic 2, incluindo o próprio nic, estão tentando direcionar para o primeiro nic, o que não é possível a menos que você conecte o nic. É fácil, no Linux, criar conexões em ponte e você também pode criar pontes virtuais para as interfaces virtuais.
Ter várias NICs conectadas à mesma rede pode causar colisões adicionais. A menos que você configure a rede com cuidado, não funcionará. E é bastante improvável que o último link seja o seu gargalo; se for, você provavelmente está melhor com um NIC de alta velocidade (e hardare upstream para corresponder).
Toda a idéia de rede IP é que você tem uma NIC em cada rede. Uma configuração como a que você tem é extremamente desalinhada com o que normalmente é feito, e (se legal mesmo) é improvável que tenha sido resolvida e que qualquer mau comportamento seja corrigido.
Tags networking ip routing router linux