Endereço IP errado do cliente DHCP no Ubuntu 18.04

2

Estou passando por um problema estranho em que minha caixa do Ubuntu 18.04 (servidor) recebe um endereço IP incorreto durante a inicialização do servidor DHCP. A execução do dhclient após a inicialização na interface resulta no IP direito sendo adicionado à interface.

O servidor DHCP é uma caixa do Windows onde uma reserva foi configurada manualmente usando o endereço MAC mostrado por ip addr no Ubuntu (sem dois pontos):

5: eno4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:26:b9:82:44:27 brd ff:ff:ff:ff:ff:ff
    inet 10.10.11.162/23 brd 10.10.11.255 scope global dynamic eno4
       valid_lft 689861sec preferred_lft 689861sec
    inet6 fe80::226:b9ff:fe82:4427/64 scope link
       valid_lft forever preferred_lft forever

Meu 50-courtin-networking.cfg (cloud-init cfg)

network:
  version: 2
  ethernets:

    bcm:
      match:
        name: eno*
      dhcp4: true
      dhcp6: false

Entradas Journalctl para DHCP:

#journalctl | grep -Ei 'dhcp''
Jul 12 10:10:56 skprov2 systemd-networkd[1160]: eno1: DHCP lease lost
Jul 12 10:10:57 skprov2 systemd-networkd[1160]: eno4: DHCP lease lost
Jul 12 10:11:00 skprov2 systemd-networkd[1160]: eno1: DHCPv4 address 10.10.11.157/23 via 10.10.10.254
Jul 12 10:11:02 skprov2 systemd-networkd[1160]: eno4: DHCPv4 address 10.10.11.162/23 via 10.10.10.254

Chamando manualmente o dhclient após o login (verbose):

# dhclient -v eno4
Internet Systems Consortium DHCP Client 4.3.5
Copyright 2004-2016 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/eno4/00:26:b9:82:44:27
Sending on   LPF/eno4/00:26:b9:82:44:27
Sending on   Socket/fallback
DHCPREQUEST of 10.10.10.40 on eno4 to 255.255.255.255 port 67 (xid=0x4cb8a62d)
DHCPACK of 10.10.10.40 from 10.10.10.10
bound to 10.10.10.40 -- renewal in 294538 seconds.

10.10.10.10 é o servidor DHCP correto e 10.10.10.40 é o IP configurado nele. No Windows DHCP, a concessão incorreta (.162) mostra um longo "ID Exclusivo" que não contém nenhum endereço MAC presente na caixa do Ubuntu: 032e827c00020000ab11d0fc617dced58a43

Qual é o caminho certo para evitar isso? Negar concessões para o longo UID? De onde vem esse UID? A NIC está integrada em um servidor Dell PowerEdge R710.

    
por NoMad 12.07.2018 / 11:37

2 respostas

2

A causa do problema é que a configuração de rede interna do Ubuntu 18.04 não usa mais o endereço Mac do NIC como o ID padrão para solicitações DHCP.

O comportamento tradicional (e acredito que "sensato") pode ser restaurado adicionando dhcp-identifier: mac à configuração no arquivo /etc/netplan/xxx.yaml (cloud-init) da seguinte forma:

network:
    renderer: networkd
    version: 2
    ethernets:
        nicdevicename:
            dhcp4: true
            dhcp-identifier: mac

Onde "nicdevicename" é o nome do seu dispositivo de rede

Use

sudo netplan apply

para experimentar a nova configuração. Se você receber algum erro, observe que o recuo preciso é muito importante nos arquivos .yaml.

    
por 23.10.2018 / 23:37
3

Negar o contrato não funcionará. Não há como o networkd saber por que está sendo negado, então ele não irá magicamente mudar para um tipo de ID diferente se você o fizer. Você tem que fazer isso manualmente.

Se a sua versão do systemd for recente o suficiente e você tiver controle direto sobre os arquivos de configuração gravados pelo cloud-init, será possível dizer ao systemd-networkd para enviar um ID de cliente baseado no endereço MAC através do arquivo *.network :

[DHCP]
ClientIdentifier=mac

Mas se você sabe que systemd-networkd será sempre usado, você pode simplesmente atribuir a concessão correta à ID de cliente 032e827c00020000ab11d0fc617dced58a43 , porque é isso que systemd-networkd sempre enviará para aquela máquina. (Ele gera o ID com base em /etc/machine-id .)

Os clientes do Mos DHCP, incluindo o dhclient, fornecem um campo de ID do cliente do tipo '01' (baseado em MAC). Outro tipo comum é '00' (nome de domínio). No entanto, por padrão, o systemd-networkd fornece um ID de cliente "opaco" que foi gerado a partir do conteúdo de / etc / machine-id.

De acordo com o protocolo DHCP, as concessões são escolhidas pelo ID do cliente primeiro (desde que o cliente forneça uma opção de "ID do cliente", que pode ou não ser baseado em MAC), o endereço MAC somente se o cliente não enviou um ID.

Portanto, quando você está configurando uma reserva, todos os bons servidores DHCP permitem que você insira o ID do cliente ou o endereço MAC. Se você digitar apenas o endereço MAC, suponho que um ID de cliente do tipo '01 '(baseado em MAC) seja automaticamente implícito. Pode haver uma caixa de seleção chamada "Ignorar ID do cliente", que é conveniente para você, mas viola tecnicamente a especificação do DHCP.

(Por exemplo, tenho dois adaptadores Wi-Fi com diferentes MACs, mas configurei o sistema operacional para enviar o mesmo ID de cliente, independentemente do adaptador conectado. Dessa forma, recebo o mesmo endereço por meio de ambos).

    
por 12.07.2018 / 11:45