Tráfego NFS indo para interface com endereço IP diferente, mas com a mesma sub-rede

1

Meu servidor NFS tem três interfaces: 0 : 1Gb, 1 : 10Gb, 2 : 10Gb.

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 por meio das interfaces 1 e 2 .

$ 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 iface 1 e 2 sã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 iface 0 , via nload. Ifaces 1 e 2 não mostram tráfego.

Isso é o mesmo para todos os 10 clientes conectados ao servidor nfs.

O que está causando tráfego para iface 0 e como posso forçar o tráfego do cliente nfs pela interface configurada?

    
por Mike Lui 12.03.2018 / 18:16

1 resposta

0

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.

    
por 13.03.2018 / 12:27

Tags