Por que o postfix copia o /etc/resolv.conf para seu chroot cedo demais, causando falhas no DNS?

3

Edit: Para qualquer um que tenha esse problema, essa pergunta foi realmente mal feita e / ou entendida e uma melhor descrição do problema (e a solução correta) pode ser encontrada aqui .

Estou tentando configurar o e-mail no meu Raspberry Pi. Eu tenho configurar e configurar o Postfix e tudo geralmente funciona, exceto na inicialização parece que o script /etc/init.d/postfix copie o arquivo /etc/resolv.conf para seu chroot antes de ter sido atualizado. Isso resulta no envio de e-mails com problemas de DNS.

Existe uma melhor descrição deste nesta postagem do blog , juntamente com uma solução alternativa ( injetando um "sleep 5" no script de inicialização).

Estou curioso sobre como / por que isso acontece (e por que isso está afetando apenas o Pi, ou poucas pessoas o suficiente para que ele não tenha sido notado / consertado) e onde o bug realmente está (então eu posso aumentá-lo - é um problema de postfix, ou algo no Pi não se comporta como esperado?).

O arquivo /etc/init.d/postfix tem isso no topo (diz que depende da rede; não tem certeza se isso significa que ele não deve ser iniciado antes que o resolveconf seja feito?)

# Provides:          postfix mail-transport-agent
# Required-Start:    $local_fs $remote_fs $syslog $named $network $time
# Required-Stop:     $local_fs $remote_fs $syslog $named $network
# Should-Start:      postgresql mysql clamav-daemon postgrey spamassassin saslauthd dovecot
# Should-Stop:       postgresql mysql clamav-daemon postgrey spamassassin saslauthd dovecot
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Postfix Mail Transport Agent
# Description:       postfix is a Mail Transport agent

Qual é o mecanismo pretendido para garantir que isso não aconteça?

    
por Danny Tuppeny 27.03.2016 / 11:59

3 respostas

4

O problema está acontecendo por causa das precedências. A inicialização do postfix parece estar terminando o trabalho antes do dhcpcd5.

Uma possível solução para corrigir o /etc/resolv.conf na cadeia postfix depois que o cliente DHCP fizer o trabalho. Sugiro usar dhclient e colocar um script para corrigir o /etc/resolv.conf no diretório /etc/dhcp/dhclient-exit-hooks.d .

Os scripts colocados neste diretório são executados após um IP é obtido por dhcp e esses scripts são muito úteis para tomar as medidas necessárias após obter e / ou alterar um endereço IP.

Eu realmente tenho uma pergunta falando sobre o tema aqui: Melhor método para atuar na mudança do endereço IP do provedor?

O pacote relevante no sistema Debian é isc-dhcp-client , e se não for instalado, pode ser instalado fazendo:

sudo apt-get install isc-dhcp-client

Agora, /etc/network/interfaces precisa ser modificado para usá-lo:

auto eth0
iface eth0

e finalmente:

sudo dpkg --purge dhcpcd5

Na verdade, depois de desinstalar dhcpcd5 (e configurar / etc / network / interfaces junto com @Danny), as precedências foram aplicadas e o problema postfix foi resolvido.

No entanto, com máquinas conectadas diretamente a ISPes e permanentemente ativadas, o script em dhclient-exit-hooks.d também é recomendado, já que o ISP pode causar uma alteração em seu endereço IP.

    
por 27.03.2016 / 12:34
2

No Ubuntu Zesty, o seguinte irá funcionar:

Essa correção provavelmente precisará ser feita após qualquer atualização para o postfix. Postscript falha após a reinicialização porque não espera a rede voltar. Isso faz com que ele perca as entradas em /etc/resolv.conf Deverá copiá-los para /var/spool/postfix/etc/resolv.conf

Altere e / ou adicione o seguinte aos blocos [Unit] desses arquivos systemd:

/lib/systemd/system/[email protected]
/lib/systemd/system/postfix.service

Adicionar ou alterar:

After=network-online.target

Depois de fazer alterações em um servicectl de atualização do serviço:

systemctl daemon-reload

reboot

Nota: o arquivo que realmente importa é o postfix @ .service

    
por 01.05.2017 / 00:14
-1

Colocar um script em /etc/dhcp/dhclient-exit-hooks.d/ no meu framboesa com o jessie 8.0 não fez nada. Mesmo tornando executável não ajudou. Parece que esses scripts não são executados.
Para mim, o problema é outro mau exemplo da complexidade introduzida com o systemd, o network-manager eo resolvconf.
Adicionar uma linha ao /etc/rc.local também não funcionou.
Descobri que no meu sistema /etc/rc.local é executado 18s! antes que o /etc/resolv.conf seja atualizado.
Como o framboesa está em uma LAN local, desativei o mecanismo resolvconf tornando o /etc/resolv.conf imutável, mas mesmo isso não ajudou.
/var/spool/postfix/etc/resolv.conf agora tem as entradas corretas, mas o postfix ainda não é executado corretamente com as entradas suspensas no arquivo mqueue "(nome do host ou do domínio não encontrado. Erro de serviço de nome para name = .... com tipo = MX: Host não encontrado, tente novamente) "
Eu tentei reiniciar o postfix em lote com um atraso de 30s com a seguinte linha em /etc/rc.local ( sleep 30 ; service postfix restart ) &
Infelizmente isso também não funcionou.
Mas se eu fizer o login no sistema e manualmente reiniciar o correio postfix é enviado.
Então eu mudei a entrada para ( sleep 30 ; /etc/init/postfix stop ; sleep 5 ; /etc/init/postfix start ) &
que finalmente resolveu o problema para mim.

    
por 10.08.2017 / 15:54