El Caso de los Correos de 500 Millas

Leonardo Herrera
Creado: 24/12/2002
Última Actualización: 21/9/2004

El caso de los Correos de 500 millas:

He aquí un problema que sonaba imposible. Casi lamento publicar esta historia a una audiencia tan grande, pues es una gran historia para contar acompañado de unas copas en alguna conferencia. La historia está ligeramente alterada en orden de proteger a los inocentes, eludir algunos puntos irrelevantes o aburridos, y básicamente para hacer el cuento completo más entretenido.

Algunos años atrás, trabajaba manteniendo los sistemas de correo en el campus cuando recibí una llamada del rector del departamento de estadística.

“Tenemos un problema enviando correo fuera del departamento.”

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

“No podemos enviar correo más allá de 500 millas”, explicó el rector.

Me atraganté con mi café. “¿Me puede repetir, por favor?”

“No podemos enviar correo más allá de 500 millas desde acá”, repitió. “Un poco más, realmente. Digamos, 520 millas. Pero no más.”

“Hm... el correo electrónico no funciona de esa forma, generalmente”, expliqué, tratando de disimular el pánico en mi voz. Uno no demuestra pánico al hablar con un rector, incluso de un departamento venido a menos como Estadísticas. “¿Qué le hace pensar que no puede enviar correo más allá de 500 millas?”

“No es lo que yo pienso”, respondió el rector. “Verá, cuando primero notamos este comportamiento, algunos días atras...”

“¿Esperaron algunos días?” interrumpí, con un temblor en mi voz. “¿Y no pudieron enviar correo todo este tiempo?”

“Podíamos enviar correo. Sólo que no más allá de...”

“500 millas, sí”, finalicé por él. “Entiendo eso. Pero, ¿porqué no llamaron antes?”

“Bien, no teníamos suficientes datos para estar seguros de lo que pasaba hasta ahora”. Por supuesto, es el rector de Estadísticas. “Bueno, le pedí a una persona de geoestadísticas que averiguara más...”

“Geoestadísticas...”

“...sí, y ella produjo un mapa mostrando el radio donde podíamos enviar correo, y resultó ser de poco más de 500 millas. Hay un número de destinaciones dentro del radio que tampoco podíamos acceder, o acceder esporádicamente, pero no podemos enviar correo más allá de este radio.”

“Ya veo”, dije, tomándome la cabeza. “¿Cuando comenzó a suceder? Me dijo unos días atras, pero, ¿hubo algún cambio en sus sistemas en esos días?”

“Un consultor vino y parchó nuestro servidor y lo reinició. Pero le llamamos, y nos dijo que no tocó nuestro sistema de correos”.

“Okay, déjeme darle un vistazo, y le llamaré después”, dije, apenas creyendo el cuento. No era Primero de Abril. Traté de recordar si alguien me debía alguna broma.

Ingresé a su servidor, y envié algunos correos de prueba. Esto fue en el Research Triangle de Carolina del Norte, y un correo de prueba enviado a mi cuenta funcionó sin problemas. Igualmente para correos enviados a Richmond, Atlanta y Washington. Otro a Princeton (a 400 millas) funcionó.

Pero entonces intenté enviar un correo a Memphis (600 millas). Fallo. Boston, fallo. Detroit, fallo. Saqué mi cuaderno de direcciones y traté de aproximar de la mejor manera. Nueva York (420 millas) funcionó, pero Providence (580 millas) falló.

Me comencé a preguntar si acaso hubiese perdido mi cordura. Traté enviando un correo a un amigo que vivía en California, pero su ISP estaba en Seattle. Gracias a Dios, falló. Si el problema hubiese tenido que ver con la geografía del receptor y no su servidor de correo, estoy seguro que habría estallado en llanto.

Habiendo establecido que -increíblemente- el problema reportado era en efecto verdadero, di una mirada al archivo sendmail.cf. Se veía bastante normal. En efecto, hasta se veía familiar.

Efectué un diff contra mi propio sendmail.cf. No tenía alteraciones -era, en efecto, mi propio sendmail.cf. Y estaba casi seguro de no haber activado la opción “FALLAR_CORREO_SOBRE_500_MILLAS”. Con pesar, me conecté mediante telnet al puerto SMTP. El servidor me recibió feliz con su mensaje SunOS.

Un momento... ¿un mensaje SunOS? En ese tiempo, Sun aún distribuía sendmail 5 con su sistema, a pesar de que Sendmail 8 estaba bastante maduro. Siendo un buen administrador, había estandarizado en Sendmail 8. Y por la misma razón, había escrito un sendmail.cf que usaba las opciones de autodocumentación y nombres de variable disponibles en Sendmail 8 en vez de los crípticos códigos de puntuación que usaba Sendmail 5.

De pronto, todo se vino encima, de sopetón, y me volví a atragantar con los restos de mi -ahora helado- café. Cuando el consultor “parchó el servidor” aparentemente actualizó la versión de SunOS, con ello desactualizando Sendmail. El proceso, amigablemente, dejó el archivo sendmail.cf intacto, a pesar de que ahora era de una versión distinta.

Sucedió que Sendmail 5 -al menos, la versión que entregaba Sun, que tenía algunos chaflanes- podía trabajar con el archivo de configuración de Sendmail 8, y la mayor parte de las reglas permanecían intactas. Pero no pudo entender las nuevas opciones de configuración, por lo tanto escogió ignorarlas. Y el binario no tenía opciones por defecto para la mayor parte de estas opciones, así que al no encontrar la configuración adecuada, dejó todo en cero.

Uno de las opciones dejadas en cero fue el timeout de conección al servidor remoto. Un poco de experimentación determinó que en esta máquina en particular, con su carga típica, un timeout en cero abortaba una conección en poco más de tres milisegundos.

Una rara característica en el campus en ese tiempo era que la red estaba 100% sobre switches. Un paquete saliente no incurría en un delay de router hasta que llegaba a un punto de presencia lejano, así que el tiempo de conección a un servidor remoto con poca sobrecarga en una red cercana era básicamente regida por la distancia al destino en vez de incidentales esperas de router.

Sintiendome ligeramente inquieto, escribí lo siguiente en mi consola:

$ units
1311 units, 63 prefixes

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

500 millas, o un poco más.

Este sitio es mantenido con ePublish