Deshabilitar IPv6 en Exim4 para solucionar errores tipo “Network is unreachable”

Quisiera comentar cómo hacerlo porque sinceramente… es un dolor de muelas. Para todos aquellos que bien por gusto o por necesidad utilicéis Exim como MTA en vuestro servidor, os resultará útil. En mi caso Debian es la plataforma que más utilizo y con la que más me he peleado y… ¡sorpresa! Exim4 es el MTA por defecto en el día de hoy para esa distro, y muchas veces se utiliza para enviar mensajes de mantenimiento o de error a una cuenta exterior (por ejemplo, gmail)

Pues bien, el caso es que Exim4 utiliza de una forma un tanto caótica Ipv6, incluso aunque lo hayamos deshabilitado a nivel de sistema. Tendremos que insistir pues en el propio Exim4 para evitar cualquier lookup que haga con Ipv6 ya que suele dar bastantes fallos cuando no puede resolver el nombre de dominio a partir de su dirección Ipv6, apareciendo en el log (/var/log/exim4/mainlog) cosas como esta:

"2014-12-24 13:07:57 1Y3kjN-000092-2G gmail-smtp-msa.l.google.com [2a00:1450:400c:c07::6c] Network is unreachable

A mí me ha pasado de todo: unas veces Exim utilizaba Ipv4 y en otras Ipv6 sin ningún orden aparente, y por lo que he podido leer en foros no soy el único al que esto le ha dado dolor de cabeza. Os comento cómo he deshabilitado el soporte para IPv6 en mi caso:

  • En /etc/exim4/conf.d/main/02_exim4-config_options añadir al principio:
    disable_ipv6
    dns_ipv4_lookup = *
    
  • En /etc/exim4/update-exim4.conf.conf modificamos dc_minimaldns y lo ponemos en "true":
    dc_minimaldns='true'
    
  • Asegurarnos de que en /etc/hosts el primer hostname esté definido como FQDN (nombre de dominio completo). Por ejemplo, considerando que mi IP fuera 192.168.2.130 y mi dominio example.com
    192.168.2.130    example.com      example   
    
  • Actualizamos el fichero de configuración principal de Exim4 y reiniciamos servicio:
    update-exim4.conf
    service exim4 restart
    
  • Por último también tendremos que asegúrate en todo caso de que permites a EXIM mandar mensajes hacia el exterior. Por ejemplo, para dar acceso al SMTP de Gmail por el puerto 587, considerando que la interfaz a utilizar fuera eth0:
    iptables -A OUTPUT -o eth0 -p tcp -d smtp.gmail.com --dport 587 -j ACCEPT
    

Y con esto y un bizcocho…