El problema
El descubrimiento de iscsiadm se agota cuando ambas interfaces están activas, pero funciona bien con una sola interfaz activa.
# iscsiadm -m discovery -t st -p x.x.x.x iscsiadm: connect to x.x.x.x timed out iscsiadm: connect to x.x.x.x timed out
La solución
Este problema podría ocurrir cuando dos o más interfaces Ethernet están conectadas a la misma subred o cuando la conexión iSCSI está configurada para usar una interfaz específica. En tales casos, cuando los paquetes se entregan a la interfaz incorrecta, el sistema operativo pensará que se envió a un puerto cerrado o a un destino incorrecto y se agota el tiempo de espera. Para resolver este problema, debemos configurar para aceptar paquetes enrutados asimétricamente en ambas interfaces del cliente iSCSI en el que recibimos este mensaje de error:
1. Establezca net.ipv4.conf.all.arp_ignore de sysctl en 1 para obligar a cada interfaz a responder solo solicitudes ARP para sus propias direcciones. O establezca net.ipv4.conf.[INTERFACE].arp_ignore en 1 para cada interfaz que sea una ruta al almacenamiento iscsi.
Por ejemplo, en /etc/sysctl.conf :
# vi /etc/sysctl.conf net.ipv4.conf.all.rp_filter=0 net.ipv4.conf.all.arp_ignore=1 net.ipv4.conf.all.arp_announce=2
O bien, configurarlo solo para las interfaces relevantes (suponiendo que sean eth0 y eth1):
# vi /etc/sysctl.conf net.ipv4.conf.eth0.rp_filter=0 net.ipv4.conf.eth0.arp_ignore = 1 net.ipv4.conf.eth0.arp_announce=2 net.ipv4.conf.eth1.rp_filter=0 net.ipv4.conf.eth1.arp_ignore = 1 net.ipv4.conf.eth1.arp_announce=2
2. Aplique la configuración usando el siguiente comando:
# sysctl -p /etc/sysctl.conf
3. Compruebe si la nueva configuración se aplicó con éxito:
# sysctl -a
4. Ahora, elimine los archivos antiguos de /var/lib/iscsi/ifaces:
# rm -rf /var/lib/iscsi/ifaces
Esto debería resolver el tiempo de espera de detección de iscsi cuando se configuran dos interfaces.
Para CentOS/RHEL 7
Tenga en cuenta que si el sistema tiene instalado CentOS/RHEL 7, ingrese los parámetros sysctl anteriores en el archivo /etc/sysctl.d/99-sysctl.conf y luego ejecute el siguiente comando para volver a leer la configuración del archivo de configuración:
# sysctl --system
Notas
Este problema puede ocurrir si una conexión iSCSI está configurada para usar una interfaz de red específica. Si los paquetes iscsi se envían a la interfaz incorrecta, Linux responderá como si los datos se enviaran a un puerto cerrado y enviará un paquete RST. Mientras los datos recibidos provengan de la interfaz incorrecta, la conexión permanecerá interrumpida y no se podrá restaurar.
Esto puede ocurrir cuando varios adaptadores están conectados a la misma subred. De forma predeterminada, Linux responderá a todas las solicitudes ARP para cualquiera de las direcciones IP del sistema, independientemente de la interfaz de la que provenga la solicitud ARP. Si una interfaz diferente responde a la solicitud ARP de la dirección IP de la conexión iscsi, el tráfico se enrutará a la interfaz incorrecta y la conexión fallará. Activar arp_ignore obliga a una interfaz de red a responder solo solicitudes ARP para sus propias direcciones. Esto evita la respuesta ARP desde la interfaz incorrecta y mantiene el funcionamiento de la conexión iscsi.