Como você redefine /etc/networking/interfaces
ao usar "nomes previsíveis da interface de rede"?
Versões do Ubuntu anteriores à 15.10 usam nomes de adaptadores de rede como:
eth0
eth1
eth2
Substituir uma placa de rede ou mover uma vm para um novo hypervisor faria com que o Linux aumentasse o número da interface. A exclusão /etc/udev/rules.d/70-peristent-net.rules
tornaria a reutilização do Linux eth0
.
O Ubuntu 15.10 e versões mais recentes usam ' Nomes de interface de rede previsíveis '. O nome do adaptador de rede é derivado do endereço mac.
ens3
ens32
ens192
Ao migrar uma vm, a rede não será iniciada, pois /etc/network/interfaces
ainda faz referência ao antigo adaptador de rede inexistente.
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto ens32
iface ens32 inet dhcp
pre-up sleep 2
Qual é a melhor maneira de redefinir o arquivo / etc / network / interfaces?
Preciso executar esta ação antes de desligar a VM e migrar para um novo hypervisor, pois estou usando o empacotador para criar imagens douradas automatizadas, com base nas imagens douradas do chef / bento .
Descobri que excluir / etc / network / interfaces não funciona, pois o arquivo não é regenerado automaticamente na próxima inicialização após a migração.
Eu tentei editar meu arquivo grub para voltar à convenção de nomenclatura 'eth0'. Enquanto / etc / network / interfaces se refere ao nome antigo (eth0), o vm não recebe um ip e qualquer reinicialização fará com que o vm use a nova convenção de nomenclatura. Também descobri que o systemd sempre terá precedência, a menos que eu possa garantir biosdevname=0
permanentemente a permanência na configuração do grub . Não sabe como aplicar permanentemente este
GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 bios.devname=0"
Se possível, prefiro não usar o init de nuvem ou usar scripts pós-inicialização, pois prefiro manter as imagens douradas o mais limpas possível.
Certamente, esse é um problema que os provedores de nuvem (Azure, AWS, RackSpace, Openstack) já resolveram quando importam vms. Não posso ser a primeira pessoa a tentar migrar uma VM usando nomes de interface de rede previsíveis.
Eu tentei executar esses comandos antes de desligar e migrar o vm
apt-get remove biosdevname -y;
ln -s /dev/null /etc/systemd/network/99-default.link;
Acho que quando migro a vm, isso /etc/network/interfaces
e ip address
ainda me refiro aens32
Respostas:
Acho que o OpenStack usa cloud-init, formato ConfigDrive, e fornece uma configuração de rede que corresponde ao hardware da VM. Fontes:
Se você excluir um script de primeira inicialização, há uma resposta óbvia.
https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/
Voltar para os nomes antigos de interface persistente não é uma das opções documentadas.
A outra alternativa é uma configuração em que as interfaces de rede são ativadas por padrão, independentemente do nome exato. Eu acho que o NetworkManager suporta isso por padrão. O systemd-networkd também pode ser instruído a fazer isso .
Assim que você tiver mais de um dispositivo de rede para uma VM, eles provavelmente precisam de uma configuração específica de qualquer maneira ...
Fora das VMs, há uma vantagem óbvia da abordagem no estilo NetworkManager: um PC pode ter várias interfaces de rede, talvez de tipos diferentes, com apenas uma delas conectada. Por exemplo, isso pode ser visto em algumas placas-mãe premium ou em um sistema em que a primeira interface de rede não funcionou como desejado e uma segunda interface foi instalada em algum momento.
fonte
ln -s /dev/null /etc/systemd/network/99-default.link
não faz diferença. meus vms ainda usam a nova convenção de nomenclatura.Desisti de tentar fazer isso de forma limpa e criei o seguinte hack. Executando o script a seguir, pouco antes de desligar o vm e migrar, o vm terá eth0 como adaptador de rede quando ligado.
A rigor,
apt-get remove biosdevname
não é necessário, pois esse pacote não está instalado por padrão no ubuntu 16.04. Além disso, a adiçãobios.devname=0
aoGRUB_CMDLINE_LINUX_DEFAULT
não é necessária, pois o biosdevname não está instalado. Evita que a rede se quebre se biosdevname estiver instalado no futuro.fonte
Você precisa de nomes previsíveis de interface de rede?
Minha solução foi desinstalar
biosdevname
, e isso resultou de maneira confiável, sempre com interfaces de rede nomeadas como eth0, eth1 e assim por diante. Não encontrei um bom motivo para ter nomes previsíveis de interface de rede nem biosdevname instalados.em
/etc/udev/rules.d/70-persistent-net.rules
é onde você pode modificar o endereço MAC hardware fica nomeado para eth0, eth1, e assim por diante. Normalmente, apago o conteúdo desse arquivo, salve-o como um arquivo em branco, reinicie e, em seguida, tenho uma lista limpa com os adaptadores de rede corretos aparecendo ...^^ onde xx: xx: xx: xx: xx: xx é o endereço mac exclusivo dos seus adaptadores de rede.
Eu sei que você mencionou que a exclusão deste arquivo não é a solução, mas eu posto o exemplo acima porque pelo menos no Suse é
/lib/udev/write_net_rules
que cria esse arquivo. Portanto, veja se o rastreamento posterior desse arquivo ajuda, se for aplicável à sua distribuição, você poderá modificá-lo para resolver seu problema.note que isto é o que eu sei da versão 11 do Suse, que é o antigo modo Init, antes do systemd. Não tenho certeza se isso foi alterado para as versões mais recentes do linux no systemd.
fonte
Deparou-se com esta atualização de hosts do Ubuntu 14.04 para 16.04.
biosdevname
pacote não é instalado por isso recorreram a"biosdevname=0 net.ifnames=0"
em/etc/default.grub
como afirma OP.Eu executo esse script e, se a saída parecer boa, redirecione a saída
/etc/udev/rules.d/70-persistent-net.rules
para criar novas regras do udev, caso o kernel decida enumerar as portas Ethernet em uma ordem diferente.fonte