Especifique el puerto remoto que se usará para el correo a través de exim4
Pregunta
Tengo un sistema Debian Etch de valores, utilizando Exim4. Los dominios son en su mayoría locales, pero hay algunos que son remotos. Para manejar la entrega de correo remoto, uso el archivo de configuración de Debian:
/etc/exim4/hubbed_hosts
Este archivo enumera los nombres de dominio y las máquinas MX remotas para entregar. Por ejemplo:
example.org: mx.example.com
example.com: mx2.example.com
Mirando el archivo de configuración exim4 veo que se usa de la siguiente manera:
hubbed_hosts:
debug_print = "R: hubbed_hosts for $domain"
driver = manualroute
domains = "${if exists{CONFDIR/hubbed_hosts}\
{partial-lsearch;CONFDIR/hubbed_hosts}\
fail}"
route_data = ${lookup{$domain}partial-lsearch{CONFDIR/hubbed_hosts}}
transport = remote_smtp
El problema que tengo es que algunos de los hosts que estoy usando necesitan que su correo sea enviado a un puerto no estándar. Desafortunadamente, el archivo hubbed_hosts de Debian no funciona si intento cambiarlo para incluir un puerto:
example.org: mx1.example.org:2525
example.com: 1.2.3.4.2525
¿Es posible permitir dinámicamente que se especifique el puerto?
Solución 2
Esperaba algo un poco más dinámico, y esta solución funciona:
port = ${if exists{/etc/exim4/ports.list}\
{${lookup{$domain}lsearch{/etc/exim4/ports.list}\
{$value}{25}}}{25}}
Entonces, un archivo simple puede tener una lista de puertos por dominio:
example.org: 2525
example.com: 26
Otros consejos
Esto es realmente compatible de manera predeterminada sin ningún cambio en su configuración exim4.
En hubbed_hosts, se separan los hosts con dos puntos y se especifica un número de puerto con dos puntos dobles. EX:
domain1: server1:server2::port:server3
domain2: server1::port
domain3: server1:server2
Para obtener más información, visite http: / /www.exim.org/exim-html-current/doc/html/spec_html/ch20.html#SECID122
Probablemente podría usar el operador $ {extract} para permitirle combinar los números de puerto y los nombres de host, como en el ejemplo de su pregunta original.
Algo como (sin probar):
route_data = ${extract{1}{:}{${lookup{$domain}partial-lsearch{CONFDIR/hubbed_hosts}}}}
realice un nuevo transporte que especifique el puerto
remote_hub_2525:
driver = smtp
port = 2525
y luego cree un enrutador para los dominios que necesitan una entrega no estándar
non_standard_hub:
driver = manualroute
domains = example.org : example.com
transport = remote_hub_2525
no_more