CGNAT y cómo evitar la caducidad de sesiones con conexiones de larga duración

Es sabido por todos que las direcciones IPv4 se están agotando en todo el planeta. Hace tiempo que son un recurso escaso y caro.

Ante esa perspectiva, los ISPs tienen dos opciones:

  • Migrar a IPv6 o, en el caso de operadores móviles de nueva creación, desplegar desde un primer momento IPv6 de forma nativa.

    Esta sería la opción recomendable, pero todavía hoy existen equipos de red con soporte IPv6 mediocre. Un problema aún mayor es que la mayor parte de los servicios disponibles en internet siguen prestándose exclusivamente a través de IPv4.

    Es decir, aunque la red del operador sea IPv6 nativa, casi todo su tráfico tendrá que pasar a través de conversores IPv4 <-> IPv6.

  • Dado el último párrafo, otra posibilidad es colocar toda la red del ISP detrás de sistemas NAT de escala masiva, los llamados Carrier-grade NAT (CGNAT). Un proveedor con millones de usuarios podría conectar a internet a través de un pequeño número de direcciones IP tipo IPv4.

    Ni que decir tiene que esta es la opción común en los ISPs en España.

Leer más…

Backup doméstico seguro con Linux, cifrado y ZFS (VII): Volvemos a la tarjeta microSD original

Tras todo este proceso y algo de limpieza, nos preparamos para mover el servicio de vuelta a la tarjeta microSD de 4 GB. No quiero desperdiciar una microSD rápida e innecesariamente grande para mis necesidades.

Advertencia

Este documento supone que no estamos usando LVM en el disco duro de nuestro portátil. Es mi caso, ya que uso ZFS.

Si no es así, hay que tener mucho cuidado con comandos como vgchange. Revisa los parámetros permitidos en el manual para indicar sobre qué grupos de volúmenes LVM actuar.

Backup doméstico seguro con Linux, cifrado y ZFS (VII): Actualización y reconfiguración del sistema

2   Actualización a Ubuntu 16.04

Veo lo siguiente al conectar a mi servidor ProLiant por SSH:

New release '16.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Leer más…

Backup doméstico seguro con Linux, cifrado y ZFS (VII): Cambio de tarjeta microSD y redimensionamiento LUKS/LVM/FS

Este artículo documenta el proceso de actualización de mi sistema de backup doméstico, en producción desde 2014.

1   Antecedentes y motivación

Algunos antecedentes que tal vez deberías leer antes de meterte con este artículo:

Leer más…

IMAP4 NOTIFY addon for Thunderbird! (Thunderbird 60 compatible!)

Warning: I publish this addon as is. It is a Proof Of Concept. It works well enough for my needs, and I don't have the time neither the Javascript and Thunderbird internals expertise to create a real addon usable by regular users.

Sorry for that. I already invested too much time on this. I am a consultant, btw, so you could just pay me :-).

This code is BSD licensed.

In IMAP4 NOTIFY addon for Thunderbird! I proposed an ugly addon to add IMAP4 notify to Mozilla Thunderbird. I have been enjoying that addon for four years (since late 2014) and I forgot about it. Cool.

In november 2018 Mozilla published Thunderbird 60 and my addon was disabled as "incompatible".

OK, I thought, I will check it out when I have a spare cycle.

So I used Thunderbird 60 for like two weeks without my notify addon.

My friend, what a hell.

Leer más…

Desactivar el espacio de intercambio (swap) en Raspbian

Por defecto, Raspbian en una Raspberry PI utiliza parte de la tarjeta de memoria microSD como espacio de intercambio o swap. Como norma general, me parece mala idea por varios motivos:

  • Es casi seguro que tu tarjeta microSD sea lenta. Es más rápido hacer swap sobre un disco duro USB. Obviamente esto puede cambiar con el paso del tiempo y el progreso tecnológico.
  • Por defecto, el espacio de intercambio configurado es muy pequeño, de unos 100 Megabytes.
  • El número de escrituras en una tarjeta microSD es limitado. Nos interesa reducir las escrituras en lo posible.

Dados los puntos anteriores, si la Raspberry PI está tan desesperada como para tirar del espacio de intercambio a) el rendimiento se va a resentir bastante, b) la vida de la tarjeta microSD se va a reducir de forma apreciable y c) el espacio de intercambio asignado es muy pequeño y, por lo general, será inútil a menos que lo reconfiguremos.

En mis instalaciones Raspbian opto por desactivar el espacio de intercambio en la tarjeta microSD. Para ello ejecuto estos comandos:

# update-rc.d dphys-swapfile remove
# rm /var/swap

Solo veo una situación donde el uso del espacio de intercambio en una Raspberry PI esté justificado: Necesitamos mucha memoria RAM, pero nuestro working set es pequeño. Para liberar RAM tendríamos que incrementar considerablemente el tamaño del espacio de intercambio y/o utilizar tecnologías como ZRAM o ZSWAP.

Detección de presencia por ARP, o cómo saber si tu hijo está en casa (II): Ahora con AsyncIO

En Detección de presencia por ARP, o cómo saber si tu hijo está en casa publiqué un programa Python que notifica por Telegram cuando un dispositivo concreto se conecta o desconecta de tu red. Antes de seguir leyendo, te recomiendo que repases ese artículo.

El código me ha servido bien, pero tiene algunos detalles que no me acaban de gustar:

  • Una vez por minuto se lanzan cientos de procesos Ping para sondear la red. Aunque la Raspberry PI donde está funcionando este sensor va sobrada de recursos y no he tenido problemas con esas avalanchas, resulta algo poco elegante.
  • Lanzo un proceso externo para leer la tabla ARP.

Publico aquí una nueva versión del código Python, esta vez usando la biblioteca asyncio de Python 3:

Leer más…

Generación en Python de certificados X.509 con "Subject Alternative Name" y una entidad de certificación privada (o autofirmados)

Hay infinidad de recetas OpenSSL en internet para generar certificados X.509 autofirmados o firmados por una autoridad de certificación privada, pero lo cierto es que, cuando entra el juego el Subject Alternative Name, la cosa se complica mucho.

Subject Alternative Name o SAN es una extensión de X.509 que permite que un mismo certificado X.509 cubra varios nombres diferentes. Esto es muy útil, por ejemplo, si tenemos un servidor web que atiende varios dominios distintos y queremos protegerlos con un único certificado X.509.

Utilizar OpenSSL, la opción habitual, para generar un certificado X.509 con SAN es un auténtico dolor de muelas, como puedes ver en mi artículo Generación de certificados X.509 autofirmados con "Subject Alternative Name". En fin, masoquismo. No obstante, el uso de SAN se ha hecho obligatorio desde 2016. Los navegadores (Firefox 48, Chrome 58) e incluso algunas bibliotecas Python nos obligan a ello.

Considerando eso, que tenía la necesidad de generar fácilmente un montón de certificados X.509 con SAN firmados por una Autoridad de certificación privada y que generarlos a mano con OpenSSL era un infierno... Pues eso, toca picar código:

Leer más…

Elimina los mensajes duplicados en tu IMAP4 (III)

La solución propuesta en Elimina los mensajes duplicados en tu IMAP4 (II) funciona perfectamente y es rápida si nuestro servidor IMAP4 mantiene un índice actualizado de las fechas de entrada de cada mensaje en cada buzón. En Dovecot, mi servidor IMAP4, los índices son automáticos: Si se busca por un campo determinado, se creará un índice apropiado de forma automática. Ese índice se gestionará y actualizará automáticamente. Si transcurre un tiempo sin utilizarse, el índice se destruye de forma transparente.

Hace un año tenía varios scripts IMAP4 que utilizaban esos índices de forma rutinaria. Utilizar los índices varias veces por semana los mantenía vivos. Perfecto.

En este tiempo he ido actualizando mis scripts para utilizar la sincronización nativa IMAP4 descrita en RFC 5162 (actualizada en RFC 7162). Al no usar los índices, Dovecot los ha ido eliminando.

¿Ya no son necesarios?.

Tras meses, he vuelto a necesitar hacer limpieza de mensajes duplicados. Sin índices, he tenido que cancelar el proceso antes de terminar, cuando llevaba prácticamente diez horas de trabajo generando índices para ser utilizados una sola vez y ser destruídos de nuevo dentro de unas semanas.

Así que paré el script Python de limpieza y preparé una nueva versión que tenía en mente hace mucho:

Leer más…