Atraso do agente de marionete ao criar novo certificado

1
root@testpgmaster:/# puppetd --test
info: Creating a new SSL key for testpgmaster
warning: peer certificate won't be verified in this SSL session
info: Caching certificate for ca
warning: peer certificate won't be verified in this SSL session
warning: peer certificate won't be verified in this SSL session
info: Creating a new SSL certificate request for testpgmaster
info: Certificate Request fingerprint (md5): C9:83:59:EF:6A:B8:16:31:B6:92:5D:70:F1:67:39:4F
warning: peer certificate won't be verified in this SSL session
warning: peer certificate won't be verified in this SSL session
warning: peer certificate won't be verified in this SSL session
Exiting; no certificate found and waitforcert is disabled
root@testpgmaster:/# 

Esta é uma saída normal e o resultado é, conforme esperado, a criação adequada da solicitação de certificado. O problema é que quase toda vez que o aviso é mostrado, há um atraso de cerca de dois minutos.

Ao executar o mesmo comando com o strace, então, na saída de strings caóticas, eu tenho, em algum lugar:

socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 6
fcntl(6, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(6, F_SETFL, O_RDWR|O_NONBLOCK)    = 0
connect(6, {sa_family=AF_INET, sin_port=htons(8140), sin_addr=inet_addr("10.0.2.15")}, 16) = -1 EINPROGRESS (Operation now in progress)
...
[lots of intermediate output]
...
select(7, [6], [], [], {119, 999900})   <- The pause occurs here

AFAIU, isso significa que ele bloqueia enquanto espera que o mestre de marionetes responda a algo.

O puppetmaster corre o passageiro no apache2, escutando na porta 8140. Ele também tem um firewall, mas a porta 8140 permite o agente. Na verdade, o agente é um contêiner openvz rodando dentro da máquina que atua como mestre; o contêiner usa NAT e o host faz o encaminhamento; certamente poderia haver um problema com a configuração de tudo isso, mas o problema ocorre apenas quando a mensagem "warning: peer certificate não será verificada nesta sessão SSL"; em todos os outros casos, tudo corre sem problema.

    
por Antonis Christofides 14.02.2012 / 18:00

1 resposta

2

O problema ocorreu quando o mestre de marionetes estava tentando resolver o nome do cliente de seu endereço IP. Devido a uma configuração incorreta do firewall, os pacotes UDP de entrada estavam sendo filtrados, o que significa que qualquer consulta DNS expirou.

Eu localizei o problema executando wireshark no mestre de marionetes, pois suspeitava que fosse um tempo limite de rede e esperava encontrar o culpado observando os poucos pacotes que ocorreram logo antes da pausa. De fato funcionou. É estranho que a falha total do DNS não tenha causado nenhum outro problema; Uma razão é que eu estava usando um proxy apt, o que significa que o apt-get não fazia solicitações de DNS.

    
por 16.02.2012 / 14:23