Questão Existe uma maneira segura de desativar o DHCP na linha de comando?


Versão curta

Eu sei que esta pergunta é muito semelhante a outras e eu realmente procurei na Internet por respostas, mas parece que nenhuma abordagem está funcionando ou as soluções parecem ser "complicadas para serem as melhores práticas" (vou tentar explicar). Eu estou procurando um caminho seguro como desabilitar o DHCP da linha de comando (para usar em scripts).

fundo

Eu estou tentando criar um "Live-Cd" com o Ubuntu Server 12.04 e remastersys (funciona bem). O sistema é, por padrão, configurado para obter o IP com o DHCP durante a inicialização. Tudo bem - o importante é que um script (que é executado após a inicialização) seja capaz (em alguns casos específicos) de definir um IP estático usando ifconfig (não / etc / network / interfaces ):

ifconfig eth0 192.168.0.1

Na verdade, isso também está funcionando, mas o IP só persiste até que o tempo de concessão do DHCP da concessão anteriormente obtida tenha terminado. Um novo IP será atribuído a eth0, que (em resumo) interrompe o sistema. Eu pensei "não é grande coisa, certamente haverá algo como:"

ifconfig eth0 dhcpdisabled

Mas acabei reconhecendo, não funciona tão fácil. Editando o /etc/network/interfaces é um pouco complicado, porque é gerado por remastersys (na verdade, o script de rede do casper).

Eu poderia reescrevê-lo e reiniciar a rede, mas o que acontecerá com o dhclient.leases ativo? Será o DHClient ainda rodando em segundo plano (não deveria alguns posts sugerem que será meus testes mostraram que ele foi reiniciado “aleatoriamente“, se o dhclient for eliminado), eu tenho que remover ou esvaziar arquivos dhclient.leases, e o resolv.conf?

Desespero

Resumindo - na minha opinião, não é realmente tão "direto" e um pouco não "parece estável". Esta questão (156183)  sugerido para remover o pacote do dhclient, mas: Isso resolverá o problema? Isso quebrará outras coisas?

Não há realmente nenhum comando para isso? Espero ter ignorado isso.


4
2017-08-01 13:22


origem


Para visitantes, você não precisa pkill ou remover nada. Uma resposta melhor pode ser encontrada Aqui. - John
John, eu precisava disso de volta naquele dia para um roteiro. Como isso funcionaria aqui? Pipe o arquivo e substituindo uma string? Não parece maduro para mim. - Mister Henson


Respostas:


Vou tentar dar um breve exemplo do que você posso mas não é um exemplo completo, porque a configuração exata, as necessidades, etc. podem diferir bastante.

Primeiro, vamos fazer algumas suposições para tornar este caso mais simples:

  1. Você não está usando o gerenciador de rede
  2. Você não está usando resolvconf, mas o arquivo estático /etc/resolv.conf
  3. Seu arquivo de interfaces não contém allow-hotplug linhas para reconfigurar se o cabo estiver desconectado / conectado.

Vamos configurar nossa variável auxiliar DEV

## your device is eth0
# stop /etc/interface control of the eth0 device, should also stop/kill dhcp for that device
ifdown eth0
## stop dhclient to be sure, don't worry about leases files etc
pkill dhclient
## ubuntu precise calls dhclient with dhclient3
pkill dhclient3
# set ip manually: (NETMASK is quite often 24 == 255.255.255.0) 
ifconfig eth0 up 192.168.0.1/NETMASK
# do you need default gw? (for this example it's 192.168.0.254)
route add default gw  192.168.0.254

## if your /etc/resolv.conf is incorrect add correct nameserver like this:
### 8.8.8.8 = goole open dns
echo 'nameserver 8.8.8.8' > /etc/resolv.conf

Agora, se a suposição 1 for falsa do (pare o gerenciador de rede):

stop network-manager

Para a suposição 2) remova resolvconf ou remover /etc/resolv.conf se é um link simbólico e substituí-lo por um arquivo estático

[ -h /etc/resolv.conf ] && rm /etc/resolv.conf

E para a suposição 3): Isso deve comentar linhas hotplug .. e espero que seja o suficiente

perl -i -pe 's/^(\s*allow-hotplug)/# $1/g' /etc/network/interfaces

3
2017-08-08 12:51



Eu acho que você não tem que usar o pkill duas vezes - pkill dhclient deve matar tanto o dhclient quanto o dhclient3 - ele usa o regex. Talvez use killall em vez disso? - scdmb


Você pode usar "systemctl" se disponível para sua distro. Ele está disponível para a minha distribuição do openSUSE e eu o uso para desativar os serviços da maneira seguinte.

systemctl disable wickedd-dhcp4.service

onde wickedd-dhcp4 é o nome do serviço que manipula a configuração do cliente DHCP no meu sistema. Há também um serviço para a configuração IPv6 dhcp, você não quer desabilitar isso também.

systemctl disable wickedd-dhcp6.service

1
2017-09-11 03:46



Thx mas o Ubuntu foi usado ... - Mister Henson
Só para adicionar, se você quiser liberar o endereço obtido pelo dhcp, depois que o dhcp for executado, você pode fazer "dhclient -r eth0". Não é uma resposta à pergunta principal, mas pode ajudar. - Sahil Singh


A maneira padrão mais fácil de corrigir isso é simples: basta informar ao seu servidor DHCP quais IPs devem ser dados a determinados endereços MAC. Cada roteador que eu já toquei teve esse recurso e se você estiver usando dhcp3-server, Está tão simples.


0
2017-08-01 13:42



Mas na verdade sua resposta está faltando o ponto. Eu assumo que minha pergunta não foi claramente escrita, mas eu a modifiquei. - Mister Henson


Que tal simplesmente parar o dhcp-client com pkill dhclient?


0
2017-08-06 07:12



Obrigado, eu tentei isso e exclui os arquivos de locação, mas de alguma forma ele não funciona (dhclient parece ser reiniciado) ... - Mister Henson
Então, estamos procurando o processo que está reiniciando o dhclient, certo? Apenas para verificar, você poderia verificar se não tem o administrador de rede instalado? E por favor poste o conteúdo de / etc / network / interfaces. THX! - Clausi


Eu uso o seguinte comando para desativar o DHCP no meu servidor.

sudo update-rc.d -f dhcp3-server remove

O que ele faz é remover os links de inicialização do sistema para /etc/init.d/dhcp3-server.

Então, na próxima reinicialização, o DHCP não entra em ação.

É isso, simples, limpo, fácil e seguro.


0
2017-10-07 21:17