Noticias de empresas y economí­a digital

El caso del email de las 500 millas.

Aquí­ tenéis un problema que os sonará imposible.. Casi me da pena contarlo a una audiencia más amplia; era una buena anécdota para contar en conferencias 🙂 La historia ha sido alterada ligeramente para proteger a los culpables, ignorar detalles irrelevantes y hacerla en general más amena.

Me encontraba trabajando como administrador de los sistemas de correo de un campus universitario hace algunos años cuando recibí­ una llamada del encargado del departamento de estadí­stica. (continúa…)

“Estamos teniendo un problema para enviar emails fuera del departamento.”

“¿Cuál es el problema?” pregunté yo

“No podemos enviar emails más allá de 500 millas” explicó el jefe de departamento.

Me atraganté con el café. “¿Podrí­as repetirlo?”

“No podemos enviar emails a más de 500 millas del departamenteo” repitió. “En realidad un poco más, unas 520 millas pero no más.”

“Um… El correo electrónico no funciona de esa forma, generalmente.” dije tratando de no dejar entrever pánico en mi voz. Uno no debe mostrar pánico cuando está hablando con un jefe de departamento, incluso aunque sea de un departamento tan pobre como el de estadí­stica. “¿Qué te hace pensar que no puedes enviar emails a más de 500 millas?

“No es lo que *yo piense*” repitio testarudamente. “Mira, cuando nos dimos cuenta por primera vez hace unos dí­as..”

“¿Esperasteis unos DíAS?” interrumpí­ con un ligero temblor en mi voz. “Y no habéis podido enviar emails en todo este tiempo”

“No hemos podido enviar emails a más de..”

“500 millas, sí­.” acabé su frase. “Lo entiendo. Pero por qué no avisasteis antes?”

“Bueno, no habí­amos recopilado suficientes datos como para estar seguros de lo que estaba ocurriendo hasta ahora.” Lógico, estoy hablando con el jefe del departamento de *estadí­stica*. “Además, le pregunté a uno de los geostadí­sticos para que lo investigasen..”

“Geostadí­sticos..”

“.. Sí­, y ha elaborado un mapa que muestra que el radio dentro del cual podemos enviar emails es justo de un poco más de 500 millas. Hay algunos destinos dentro de ese radio a los que no llegamos o a los que llegamos esporádicamente, pero no podemos llegar más allá de ese radio.”

“Ya veo”, dije y puse la cabeza entre mis manos. “¿Cuándo empezó todo esto? Hace unos dí­as has dicho, ¿cambió algo en vuestros sistemas en ese momento?”

“Bueno, el consultor vino, parcheó nuestro servidor y lo reinició. Pero le llamé y me dijo que no habí­a tocado nada del sistema de correo.”

“De acuerdo, déjame echarle un vistazo y te llamaré más tarde”, dije, sin creerme que le estaba siguiendo la corriente. No era el dí­a de los inocentes. Intenté recordar si alguien me debí­a alguna broma pesada.

Inicié sesión en el servidor de su departamento y envié algunos emails de prueba. Estábamos en el Triángulo de Investigación del Norte de Carolina, y un email de prueba a mi propia cuenta llegaba sin problemas. Lo mismo con uno enviado a Richmond, Atlanta y Washington. Otro enviado a Princetown (400 millas) funcionó igualmente.

Pero cuando intentaba enviar un email a Memphis (600 millas) fallaba. Boston, fallaba. Detroit, fallaba. Saqué mi libreta de direcciones y empecé a afinar. New York (420 millas) funcionaba, pero Providence (580 millas) fallaba.

Estaba empezando a pensar si habí­a perdido el juicio. Intenté enviar un email a un amigo que viví­a en Carolina del Norte pero cuyo ISP estaba en Seattle. Gracias a dios, fallaba. Si el problema hubiese tenido que ver con la localización del recipiente humano y no con el del servidor creo que me habrí­a echado a llorar.

Después de haber establecido –incrédulamente– que la incidencia reportada era cierta y reproducible me puse a mirar el sendmail.cf. Parecí­a bastante normal, de hecho me resultaba familiar.

Lo comparé con el sendmail.cf de mi directorio home. No habí­a sido alterado; era el sendmail.cf que yo habí­a escrito. Y estaba bastante seguro de no haber activado la opción “FALLAR_EMAIL_500_MILLAS”. Como último recurso conecté por telnet al puerto SMTP. El servidor me respondió alegremente con un banner de sendmail de SunOS.

Espera un minuto, ¿un banner de sendmail de SunOS? En ese momento Sun todaví­a distribuí­a Sendmail 5 junto al sistema operativo aunque Sendmail 8 ya era bastante estable. Siendo como soy un buen administrador de sistemas habí­a estandarizado la red en Sendmail 8. Y también como buen administrador que soy habí­a escrito un sendmail.cf que usaba los agradables y descriptivos nombres de variables y de opciones que estaban disponibles en Sendmail 8 en lugar de los códigos de puntuación crí­pticos que se usaban en
Sendmail 5.

Todas las piezas encajaron de golpe y me atraganté de nuevo con el café que ya estaba frí­o. Cuando el consultor actualizó la versión de SunOS rebajó la versión de Sendmail. La actualización dejó el sendmail.cf tranquilo aunque ahora fuese para otra versión.

Lo que ocurrí­a era que Sendmail 5 — o al menos la versión que distribuí­a Sun tení­a algunas modificaciones — podí­a trabajar con archivos de configuración de Sendmail 8 ya que todas las reglas se habí­an mantenido inalteradas. Pero las nuevas opciones con nombres largos las veí­a como basura y las ignoraba. Y el ejecutable de sendmail no traí­a valores por defecto compilados así­ que todas las variables para las que no encontraba una declaración explí­cita y válida en el sendmail.cf se poní­an a 0.

Una de las opciones que se puso a 0 fue el tiempo de espera para conectar a un servidor SMTP remoto. Experimentaciones con esta máquina en particular con su carga tí­pica daban que un timeout de 0 abortarí­a una conexión en aproximadamente 3 ms.

Una extraña caracterí­stica de la red de nuestro campus es que estaba 100% switcheada. Un paquete saliente no se retrasarí­a hasta llegar al router del lado opuesto al que conectase. Así­ que el tiempo de conexión para un host remoto ligeramente cargado en una red cercana estarí­a determinado por la velocidad de la luz en lugar de por retrasos incidentales del router.

Sintiendo un ligero mareo escribí­ en mi shell:

$ units
1311 units, 63 prefixes

You have: 3 millilightseconds
You want: miles
* 558.84719
/ 0.0017893979

“500 millas, o un poco más.” trey

Publicaciones