O tráfego NFS fará interface com endereços IP diferentes, mas com a mesma sub-rede

O tráfego NFS fará interface com endereços IP diferentes, mas com a mesma sub-rede

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 /24má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.eth1eth2

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.

informação relacionada