You've made the assumption:
each server will get a different MAC address. For example, Server 1 will connect to eth1, and Server 2 will connect to eth2, and Server 3 will connect to eth3.
However that is not correct. As per the Linux kernel bonding documentation:
different peers use different hardware addresses
But not every peer will use a different hardware address.
The load balancing algorithm is based around a hash table, you need to use more than three hosts on the same broadcast domain to achieve equal load balancing across all slaves.
If you had a large number of hosts communicating with your bond, say tens or hundreds of hosts on the same broadcast domain, then the number of hosts would be fairly equal across all bond slaves.
For the sort of load balancing you're after, you might be better using Mode 2 or Mode 4 with xmit_hash_policy
set to layer2+3
or layer3+4
, however that will only do transmit load balancing, it would be up to the switch to provide similar inbound load balancing.
(Note: layer3+4
is not compatible with Mode 4, your switch may or may not complain if it is configured that way, try it and see)
Really, if you want your three Windows systems to communicate with your Linux system over different interfaces, then the only 100% reliable way to do this is to separate the interfaces at Layer 2 - have each of your eth1/eth2/eth3 in a different VLAN with a different IP, and the Windows systems each know the Linux system by that different IP.