Mi servidor NFS tiene 3 interfaces:0: 1 GB,1: 10 GB,2: 10Gb.
Iface 0 solo se usa con fines administrativos y 1/2 son para dos montajes diferentes.
Todas las interfaces están en la misma subred (/24).
| servidor | ----> iface 0/1/2 ----> |interruptor privado| ----> |todos los clientes|
Mis clientes están configurados para conectarse a nfs a través de interfaces1y2.
$ 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)
...
donde cara1y2son 172.1.1.{1,2}, respectivamente. La cara 0 es 172.1.1.5.
Mi problema es que en el servidor veo todo el tráfico yendo a iface.0, vía descarga. caras1y2no mostrar tráfico.
Esto ocurre igual para los 10 clientes conectados al servidor nfs.
¿Qué está provocando que el tráfico vaya a iface?0¿Y cómo puedo forzar el tráfico del cliente nfs a través de la interfaz configurada?
Respuesta1
Para que esto funcione, debe configurar reglas y tablas de enrutamiento independientes para las tres interfaces inet y habilitarlas arp_filter
.
También es posible que desee probar esto primero en un entorno de máquina virtual, ya que puede interrumpir fácilmente cualquier conexión durante los siguientes pasos y definitivamente habrá algunos problemas.
Primero habilitar arp_filter
.
sysctl net.ipv4.conf.default.arp_filter=1
Para hacerlo permanente, agregue esto a su archivo /etc/sysctl.conf
. Dependiendo de su distribución, también puede colocarlo en un archivo debajo /etc/sysctl.d/
.
echo net.ipv4.conf.default.arp_filter = 1 >> /etc/sysctl.conf
Ahora agreguemos las tablas de enrutamiento.
cat << TABLES >> /etc/iproute2/rt_tables
101 rt1
102 rt2
103 rt3
TABLES
Suponiendo que tiene una /24
máscara de red y su puerta de enlace predeterminada es 172.1.1.254
. Además, las interfaces 0, 1 y 2 son eth0
, eth1
y eth2
en el siguiente ejemplo podrían no coincidir con su configuración, por lo que tendría que adoptarla.
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 que estas tablas y reglas de enrutamiento sean permanentes, debe agregar los pasos anteriores a la configuración de su NIC. En un sistema basado en RHEL, sería el siguiente.
Rutas y reglas 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
Rutas y reglas 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
Rutas y reglas 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
Podría ser más fácil, como ya se describió en los comentarios, usar diferentes subredes para las interfaces y asignar alias de IP en los clientes para las diferentes subredes.
Probé esto en un entorno de VM con un servidor NFS CentOS7.