por que dhcp ouviria a porta 80

1

Eu tenho um servidor CentOS com o isc dhcpd e o servidor web apache 2 em execução. Alguns minutos atrás eu tentei reiniciar o apache:

/etc/init.d/httpd restart

O reinício falhou com:

Starting httpd: (98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down

Apache estava reclamando que a porta 80 já foi tomada. Eu executei

netstat -ntap

para ver quem está escutando na porta 80. E foi dhcpd. Desde antes de reiniciar o apache e o dhcpd estavam rodando simultaneamente, eu acho que o que aconteceu foi que logo após o apache estar desligado, o dhcp notou que a porta 80 está livre e começou a ouvi-la. Alguém sabe em que casos o dhcpd faria isso e por quê? Tentei reproduzir isso algumas vezes, mas sem sorte.

    
por facha 14.10.2010 / 13:12

4 respostas

4

O protocolo DHCP usa números de porta 67 e 68. dhcpd não pode sair do azul começar a ouvir porta 80 'porque é grátis'. E mais uma coisa, usando a opção t em netstat você lista apenas o protocolo TCP. Como você vê o servidor dhcp que está usando o protocolo UDP? Você provavelmente interpretou mal a saída netstat .

    
por 14.10.2010 / 13:59
1

I've tried to reproduce that a couple of times but with no luck.

Isso porque, depois que o apache sair, o soquete ainda pode permanecer aberto em segundo plano até que os buffers associados sejam drenados de dados. O tempo entre o kill e o início do processo do apache pode ser menor que o tempo necessário para drenar os buffers no soquete de escuta e um novo processo não conseguirá ligar ao endereço de escuta recebendo um novo soquete até que o antigo seja realmente fechado. Sobre a parte do dhcpd, você certamente interpretou mal a saída do netstat se estamos falando de uma instalação normal do centos e pessoas normais usando-a.

    
por 14.10.2010 / 14:33
1

Enquanto eu concordo completamente com você que isso é impossível, faz isso o tempo todo para mim.

[root@host ~]# service httpd stop
Stopping httpd:                                            [  OK  ]
[root@host ~]# service httpd start
Starting httpd: (98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
                                                           [FAILED]

e depois:

[root@host ~]# netstat -anp | grep :80
tcp        0      0 :::80                       :::*                        LISTEN      21276/dhcpd         

Sim, a porta 80 está sendo acampada pelo dhcpd. De qualquer forma agora nós redefinimos para o estado original:

[root@host ~]# service dhcpd stop
Shutting down dhcpd:                                       [  OK  ]
[root@host ~]# service httpd start
Starting httpd:                                            [  OK  ]
[root@host ~]# service dhcpd start
Starting dhcpd:                                            [  OK  ]
[root@host ~]# netstat -anp | grep :80
tcp        0      0 :::80                       :::*                        LISTEN      27577/httpd         

As tentativas imediatamente após este trabalho funcionam corretamente, mas posso reproduzir isso sempre que o servidor estiver sendo executado por um tempo.

    
por 22.03.2011 / 03:33
1

Acredito que encontrei a causa desse problema. Nós utilizamos uma aplicação PHP que mantém o arquivo de configuração dos hosts DHCP e uma alteração neste arquivo fará com que o PHP execute código para reiniciar o serviço DHCP. Quando esse código é executado, ele gera um processo para reiniciar o processo DHCP. Esse processo gerado herda as portas do Apache que estão "enfileiradas". Uma vez que o processo Apache é interrompido, o processo DHCP agora possui a porta 80. Você pode corrigir esse problema desabilitando o ipv6 inteiramente no servidor ou reconfigurando o Apache para utilizar apenas o ipv4.

    
por 13.08.2013 / 17:51