Para fazer isso funcionar, você precisa configurar tabelas e regras de roteamento separadas para todas as três interfaces inet e ativar arp_filter
.
Você também pode querer testá-lo em um ambiente de VM, já que pode facilmente interromper qualquer conexão durante as próximas etapas e definitivamente haverá alguns hickups.
Primeiro, ative o arp_filter
.
sysctl net.ipv4.conf.default.arp_filter=1
Para torná-lo permanente, adicione isso ao seu /etc/sysctl.conf
. Dependendo da sua distribuição, você também pode colocá-lo em um arquivo abaixo de /etc/sysctl.d/
.
echo net.ipv4.conf.default.arp_filter = 1 >> /etc/sysctl.conf
Agora vamos adicionar as tabelas de roteamento.
cat << TABLES >> /etc/iproute2/rt_tables
101 rt1
102 rt2
103 rt3
TABLES
Supondo que você tenha uma máscara de rede /24
e seu gateway padrão é 172.1.1.254
. Além disso, a interface 0, 1 e 2 são eth0
, eth1
e eth2
no exemplo a seguir, que podem não corresponder à sua configuração, então você teria que adotá-la.
ip route add 172.1.1.0/24 dev eth0 src 172.1.1.5 table rt1
ip route add table rt1 default via 172.1.1.254 dev eth0
ip rule add table rt1 from 172.1.1.5
ip route add 172.1.1.0/24 dev eth1 src 172.1.1.1 table rt2
ip route add table rt2 default via 172.1.1.254 dev eth1
ip rule add table rt2 from 172.1.1.1
ip route add 172.1.1.0/24 dev eth2 src 172.1.1.2 table rt3
ip route add table rt3 default via 172.1.1.254 dev eth2
ip rule add table rt2 from 172.1.1.2
Para tornar permanentes essas tabelas e regras de roteamento, você deve adicionar as etapas acima à sua configuração de NIC. Em um sistema baseado em RHEL, isso seria o seguinte.
Rotas e regras para eth0
.
cat << ROUTE > /etc/sysconfig/network-scripts/route-eth0
172.1.1.0/24 dev eth0 src 172.1.1.5 table rt1
table rt1 default via 172.1.1.254 dev eth0
ROUTE
cat << RULE > /etc/sysconfig/network-scripts/rule-eth0
table rt1 from 172.1.1.5
RULE
Rotas e regras para eth1
.
cat << ROUTE > /etc/sysconfig/network-scripts/route-eth1
172.1.1.0/24 dev eth1 src 172.1.1.1 table rt2
table rt2 default via 172.1.1.254 dev eth1
ROUTE
cat << RULE > /etc/sysconfig/network-scripts/rule-eth1
table rt2 from 172.1.1.1
RULE
Rotas e regras para eth2
.
cat << ROUTE > /etc/sysconfig/network-scripts/route-eth2
172.1.1.0/24 dev eth2 src 172.1.1.2 table rt3
table rt3 default via 172.1.1.254 dev eth2
ROUTE
cat << RULE > /etc/sysconfig/network-scripts/rule-eth2
table rt3 from 172.1.1.2
RULE
Pode ser mais fácil, conforme descrito nos comentários, usar apenas sub-redes diferentes para as interfaces e atribuir aliases de IP nos clientes para as diferentes sub-redes.
Eu testei isso em um ambiente de VM com um servidor NOS CentOS7.