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

4

Versão resumida

Eu sei que essa pergunta é muito parecida com outras e realmente procurei na Internet por respostas, mas parece que nenhuma abordagem está funcionando ou as soluções parecem ser "complicadas de serem as melhores práticas" (tentarei explicar). Eu estou procurando uma maneira segura em como desativar o DHCP na linha de comando (para usar em scripts).

Antecedentes

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 assim. Editar o /etc/network/interfaces é um pouco complicado, porque é gerado pelo 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, mas alguns posts sugerem que será meus testes mostraram que ele foi reiniciado “aleatoriamente”, se o dhclient for morto), eu tenho que remover ou arquivos dhclient.leases vazios, e o resolv.conf?

Desespero

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

Existe realmente nenhum comando para isso? Espero ter ignorado isso.

    
por Mister Henson 01.08.2013 / 15:22

5 respostas

3

Vou tentar dar um breve exemplo do que você pode fazer, 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 esse 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 está 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 o pressuposto 2) remova resolvconf ou remova /etc/resolv.conf se for um symlink e substitua-o por um arquivo estático

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

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

perl -i -pe 's/^(\s*allow-hotplug)/# /g' /etc/network/interfaces
    
por Manwe 08.08.2013 / 14:51
1

Você pode usar "systemctl" se estiver 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 seguinte maneira.

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, mas você também não deve desabilitar isso.

systemctl disable wickedd-dhcp6.service
    
por Sahil Singh 11.09.2015 / 05:46
0

A maneira padrão mais fácil de corrigir isso é simples: basta informar ao 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 , é tão simples .

    
por Oli 01.08.2013 / 15:42
0

O que dizer de simplesmente parar o dhcp-client com pkill dhclient ?

    
por Clausi 06.08.2013 / 09:12
0

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 .

Para que, na próxima reinicialização, o DHCP não seja acionado.

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

    
por meda 07.10.2014 / 23:17