Meu servidor NFS possui 3 interfaces:0: 1GB,1: 10 GB,2: 10 GB.
Iface 0 é usado apenas para fins administrativos e 1/2 é para duas montagens diferentes.
Todas as interfaces estão na mesma sub-rede (/24).
| servidor | ----> iface 0/1/2 ----> |interruptor privado| ----> |todos os clientes|
Meus clientes estão configurados para se conectar ao NFS via interfaces1e2.
$ mount
...
iface1:/home on /home type nfs4 (rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.1.1.3,local_lock=none,addr=172.1.1.1)
iface2:/scratch on /scratchlair type nfs4 (rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.1.1.3,local_lock=none,addr=172.1.1.2)
...
Onde iface1e2são 172.1.1.{1,2}, respectivamente. Iface 0 é 172.1.1.5.
Meu problema é que no servidor estou vendo todo o tráfego indo para o iface0, via nload. Ifaces1e2não mostre nenhum tráfego.
O mesmo vale para todos os 10 clientes conectados ao servidor NFS.
O que está fazendo com que o tráfego vá para o iface0e como posso forçar o tráfego do cliente NFS na interface configurada?
Responder1
Para fazer isso funcionar, você precisa configurar tabelas e regras de roteamento separadas para todas as três interfaces inet e ativar o arp_filter
.
Você também pode querer testar isso primeiro em um ambiente de VM, pois pode facilmente interromper qualquer conexão durante as próximas etapas e definitivamente haverá alguns problemas.
Primeiro habilite arp_filter
.
sysctl net.ipv4.conf.default.arp_filter=1
Para torná-lo permanente, adicione isso ao seu arquivo /etc/sysctl.conf
. Dependendo da sua distribuição, você também pode colocá-lo em um arquivo abaixo /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 /24
máscara de rede e seu gateway padrão seja 172.1.1.254
. Além disso, as interfaces 0, 1 e 2 são e eth0
, no exemplo a seguir, podem não corresponder à sua configuração, portanto, você terá que adotá-las.eth1
eth2
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 essas tabelas e regras de roteamento permanentes, você deve adicionar as etapas acima à configuração da sua NIC. Em um sistema baseado em RHEL, 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, apenas usar sub-redes diferentes para as interfaces e atribuir aliases de IP nos clientes para as diferentes sub-redes.
Eu testei isso em um ambiente VM com um servidor CentOS7 NFS.