Como usar redes em ponte com LibVirt e KVM

Como usar redes em ponte com LibVirt e KVM

LibVirt é um software de código aberto e gratuito que fornece API para gerenciar vários aspectos das máquinas virtuais. No Linux, é comumente usado em conjunto com KVM e Qemu. Entre outras coisas, o LibVirt é usado para criar e gerenciar redes virtuais. A rede padrão criada quando o LibVirt é usada é chamada de "padrão" e usa Nat (Tradução de endereços de rede) e encaminhamento de pacotes para conectar os sistemas emulados com o mundo "externo" (tanto o sistema host quanto a Internet). Neste tutorial, veremos como criar uma configuração diferente usando Rede de rede em ponte.

Neste tutorial, você aprenderá:

  • Como criar uma ponte virtual
  • Como adicionar uma interface física a uma ponte
  • Como tornar a configuração da ponte persistente
  • Como modificar as regras de firmware para permitir o tráfego para a máquina virtual
  • Como criar uma nova rede virtual e usá -la em uma máquina virtual
Como usar redes em ponte com LibVirt e KVM

Requisitos de software e convenções usadas

Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Distribuição Independente
Programas LibVirt, iProute, BRCTL
Outro Privilégios administrativos para criar e manipular a interface da ponte
Convenções # - requer que os comandos linux -comidos sejam executados com privilégios de raiz diretamente como usuário root ou por uso de sudo comando
$-exige que o Linux-Commands seja executado como um usuário não privilegiado regular

A rede "padrão"

Quando libvirt está em uso e o libvirtd Daemon está em execução, uma rede padrão é criada. Podemos verificar se essa rede existe usando o Virsh utilidade, que na maioria da distribuição Linux geralmente vem com o libvirt-client pacote. Para invocar o utilitário para exibir todas as redes virtuais disponíveis, devemos incluir o Lista de rede Subcomando:

$ sudo virsh list list --ath 


No exemplo acima, usamos o --todos opção para garantir também o inativo As redes estão incluídas no resultado, que normalmente deve corresponder ao exibido abaixo:

Nome Estado AutoStart Persistente -------------------------------------------- Padrão Ativo sim Sim 

Para obter informações detalhadas sobre a rede e, eventualmente, modificá -las, podemos invocar Virsh com o editar Subcomando, em vez disso, fornecendo o nome da rede como argumento:

$ sudo virsh net-edit inadim 

Um arquivo temporário contendo o xml A definição de rede será aberta em nosso editor de texto favorito. Nesse caso, o resultado é o seguinte:

 Padrão 168F6909-715C-4333-A34B-F74584D26328          

Como podemos ver, a rede padrão é baseada no uso do Virbr0 ponte virtual e usa Nat conectividade baseada para conectar as máquinas virtuais que fazem parte da rede ao mundo exterior. Podemos verificar se a ponte existe usando o IP comando:

$ ip link show tipo ponte 

No nosso caso, o comando acima retorna a seguinte saída:

5: Virbr0: MTU 1500 QDISC NOQUEUE DOBRE DO MODO DO MODO DE PADRÃO PADRÃO QLEN QLEN 1000 Link/éter 52: 54: 00: 48: 3f: 0c Brd FF: FF: FF: FF: FF: FF: FF 

Para mostrar as interfaces que fazem parte da ponte, podemos usar o IP comando e consulta apenas para interfaces que tenham o Virbr0 ponte como mestre:

$ ip link show mestre virbr0 

O resultado da execução do comando é:

6: Virbr0-NIC: MTU 1500 QDISC FQ_Codel Master Virbr0 State Down Modo Padrão Grupo Padrão QLEN 1000 Link/éter 52: 54: 00: 48: 3f: 0c Brd FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: 

Como podemos ver, há apenas uma interface atualmente anexada à ponte, Virbr0-NIC. O Virbr0-NIC A interface é uma interface virtual Ethernet: é criada e adicionada à ponte automaticamente, e seu objetivo é apenas fornecer um estável MAC Endereço (52: 54: 00: 48: 3f: 0c neste caso) para a ponte.

Outras interfaces virtuais serão adicionadas à ponte quando criarmos e lançar máquinas virtuais. Para o bem deste tutorial, criei e lancei uma máquina virtual Debian (Buster); Se relançarmos o comando que usamos acima para exibir as interfaces de escravo da ponte, podemos ver que um novo foi adicionado, vnet0:

$ ip link show mestre virbr0 6: virbr0-nic: mtU 1500 qdisc fq_codel Master virbr0 state down mode bosque padrão padrão qlen 1000 link/éter 52: 54: 00: 48: 3f: 0c Brd FF: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff: ff:: ff: ff: ff: ff: ff:: ff: ff: ff: 48: 3f: 0c Brd FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: FF: :ff 7: vnet0:  mtu 1500 qdisc fq_codel master virbr0 state UNKNOWN mode DEFAULT group default qlen 1000 link/ether fe:54:00:e2:fe:7b brd ff:ff:ff:ff:ff:ff 

Nenhuma interfaces físicas deve ser adicionada ao Virbr0 ponte, já que usa Nat para fornecer conectividade.

Use redes em ponte para máquinas virtuais

A rede padrão fornece uma maneira muito direta de alcançar a conectividade ao criar máquinas virtuais: tudo está "pronto" e trabalha fora da caixa. Às vezes, no entanto, queremos alcançar um ponte completa conexão, onde os dispositivos de hóspedes estão conectados ao host LAN, sem utilizar Nat, Devemos criar uma nova ponte e compartilhar uma das interfaces físicas da Ethernet do host. Vamos ver como fazer esse passo a passo.

Criando uma nova ponte

Para criar uma nova ponte, ainda podemos usar o IP comando. Digamos que queremos nomear esta ponte BR0; Nós executamos o seguinte comando:

$ sudo ip link Adicionar ponte do tipo BR0 

Para verificar se a ponte é criada, fazemos o que antes:

$ sudo link IP Mostrar tipo Bridge 5: Virbr0: MTU 1500 QDISC NOQUEUE Modo Down Modo Padrão Grupo Padrão QLEN 1000 Link/éter 52: 54: 00: 48: 3f: 0c Brd FF: FF: FF: FF: FF: FF 8 : BR0: MTU 1500 QDISC NOOP MODO DO MODO PADRÃO DE PADRÃO QLEN 1000 Link/éter 26: D2: 80: 7c: 55: DD Brd FF: FF: FF: FF: FF: FF 

Como esperado, a nova ponte, BR0 foi criado e agora está incluído na saída do comando acima. Agora que a nova ponte é criada, podemos prosseguir e adicionar a interface física a ela.

Adicionando uma interface física Ethernet à ponte

Nesta etapa, adicionaremos uma interface física do host à ponte. Observe que você não pode usar sua interface Ethernet principal neste caso, pois assim que for adicionada à ponte, você perderá a conectividade, pois perderá seu endereço IP. Nesse caso, usaremos uma interface adicional, ENP0S29U1U1: Esta é uma interface fornecida por um adaptador Ethernet para USB anexado à minha máquina.

Primeiro, garantimos que o estado da interface esteja em alta:

$ sudo ip link Conjunto ENP0S29U1U1 UP 

Para adicionar a interface à ponte, o comando para executar é o seguinte:

$ sudo ip link Conjunto ENP0S29U1U1 Mestre BR0 

Para verificar se a interface foi adicionada à ponte: em vez disso:

$ sudo link IP Show Master BR0 3: ENP0S29U1U1: MTU 1500 QDISC FQ_Codel Master Br0 Modo Up Modo Up Padrão Padrão QLEN 1000 Link/éter 18: A6: F7: 0E: 06: 64 BRD FF: FF: FF: FF: F7: ff 

Atribuindo um endereço IP estático à ponte

Neste ponto, podemos atribuir um endereço IP estático à ponte. Digamos que queremos usar 192.168.0.90/24; nós funcionaríamos:

$ sudo endereço IP Add Dev Br0 192.168.0.90/24 

Para muito que o endereço foi adicionado à interface, executamos:

$ ip addr show BR0 9: BR0: MTU 1500 QDISC NOQUEUE Estado Up Grupo Padrão QLEN 1000 Link/éter 26: D2: 80: 7c: 55: dd Brd ff: FF: FF: FF: FF: FF INET 192.168.0.90/24 SCOPE GLOBAL BR0 Valid_lft Forever preferred_lft para sempre […] 


Tornando a configuração persistente

Nossa configuração de ponte está pronta, no entanto, como é, não sobreviverá a uma reinicialização da máquina. Para tornar nossa configuração persistente, devemos editar alguns arquivos de configuração, dependendo da distribuição que usamos.

Debian e derivados

Na família de distribuições Debian, devemos ter certeza de que o Bridge-Utils o pacote está instalado:

$ sudo apt-get install ponte-utils 

Depois que o pacote for instalado, devemos modificar o conteúdo do /etc/rede/interfaces arquivo:

# Este arquivo descreve as interfaces de rede disponíveis no seu sistema # e como ativá -las. Para mais informações, consulte Interfaces (5). # A interface de rede de loopback automaticamente o loopback # especifique que a interface física que deve ser conectada à ponte # deve ser configurada manualmente, para evitar conflitos com o NetworkManager iface ENP0S29U1U1U1 Manual INE Bridge_ports ENP0S29U1U1 Endereço 192.168.0.90 Broadcast 192.168.0.255 máscara de rede 255.255.255.0 Gateway 192.168.0.1 

Red Hat Family of Distribuições

Na família Red Hat of Distribuições, incluídas no Fedora, devemos manipular scripts de rede dentro do /etc/sysconfig/scripts de rede diretório. Se queremos a ponte não Para ser gerenciado pelo NetworkManager, ou estamos usando uma distribuição mais antiga com uma versão mais antiga do NetworkManager não capaz de gerenciar comutadores de rede, precisamos instalar o Scripts de rede pacote:

$ sudo dnf install scripts de rede 

Depois que o pacote for instalado, precisamos criar o arquivo que configure o BR0 ponte: /etc/sysconfig/network-scripts/ifcfg-Br0. Dentro do arquivo, colocamos o seguinte conteúdo:

Dispositivo = BR0 Type = Bridge BootProto = nenhum ipaddr = 192.168.0.90 Gateway = 192.168.0.1 máscara de rede = 255.255.255.0 onboot = sim atraso = 0 nm_controlled = 0 

Do que modificamos ou criamos o arquivo usado para configurar a interface física, nos conectaremos à ponte, neste caso /etc/sysconfig/network-scripts/ifcfg-enp0s29u1u1:

TIPO = Ethernet bootProto = nenhum nome = enp0s29u1u1 dispositivo = enp0s29u1u1 onboot = sim ponte = bR0 atraso = 0 nm_controlled = 0 

Com nossas configurações prontas, podemos iniciar o rede serviço e habilitá -lo na inicialização:

$ sudo systemctl atabille -agora rede 

Desativando o Filter para a ponte

Para permitir que todo o tráfego seja encaminhado para a ponte e, portanto, para as máquinas virtuais conectadas a ele, precisamos desativar o Netfilter. Isso é necessário, por exemplo, para que a resolução do DNS trabalhe nas máquinas convidadas anexadas à ponte. Para fazer isso, podemos criar um arquivo com o .conf extensão dentro do /etc/sysctl.d diretório, vamos chamá -lo 99-Netfilter-ponte.conf. Dentro dele, escrevemos o seguinte conteúdo:

líquido.ponte.Bridge-NF-CALL-IP6TABLES = 0 NET.ponte.Bridge-NF-Call-Itables = 0 NET.ponte.Bridge-NF-Call-Arptables = 0 

Para carregar as configurações escritas no arquivo, o punho garantimos que o BR_NETFILTER O módulo está carregado:

$ sudo modprobe br_netfilter 

Para carregar o módulo automaticamente na inicialização, vamos criar o /etc/módulos-carga.D/BR_NETFILTER.conf Arquivo: ele deve conter apenas o nome do próprio módulo:

BR_NETFILTER 


Depois que o módulo é carregado, para carregar as configurações que armazenamos no 99-Netfilter-ponte.conf Arquivo, podemos executar:

$ sudo sysctl -p /etc /sysctl.D/99-Netfilter-ponte.conf 

Criando uma nova rede virtual

Neste ponto, devemos definir uma nova "rede" a ser usada por nossas máquinas virtuais. Abrimos um arquivo com nosso editor favorito e colamos o seguinte conteúdo dentro dele, do que salvá -lo como rede de rede em ponte.xml:

 rede de rede em ponte    

Uma vez que o arquivo estiver pronto, passamos sua posição como argumento para o Definir rede Virsh Subcomando:

$ sudo virsh let define network em ponte.xml 

Para ativar a nova rede e fazer para que ela seja iniciada automaticamente, devemos executar:

$ sudo virsh let-start-network em ponte $ sudo virsh net-auStart-network em ponte 

Podemos verificar se a rede foi ativada executando o Virsh list list
comando, novamente:

$ sudo virsh name listad norde de estadoTart persistente ---------------------------------------------------- --------- 

Agora podemos selecionar a rede por nome ao usar o --rede opção:

$ sudo virt-Install \ --vcpus = 1 \--Memória = 1024 \--cdrom = Debian-10.8.0-AMD64-DVD-1.ISO \-Disk Size = 7 \ --os-Variant = Debian10 \-Network Network = Network Bridged 

Se estiver usando o virt-manager Interface gráfica, poderemos selecionar a rede ao criar a nova máquina virtual:

Conclusões

Neste tutorial, vimos como criar uma ponte virtual no Linux e conectar uma interface física Ethernet a ela para criar uma nova "rede" a ser usada em máquinas virtuais gerenciadas com a libvirt. Ao usar o último, é fornecida uma rede padrão para conveniência: fornece conectividade usando o NAT. Quando um uso de uma rede em ponte como a que configuramos neste tutorial, melhoraremos o desempenho e farão das máquinas virtuais parte da mesma sub -rede do host.

Tutoriais do Linux relacionados:

  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Mastering Bash Script Loops
  • Coisas para instalar no Ubuntu 20.04
  • Como trabalhar com a API de Rest WooCommerce com Python
  • Como configurar um servidor OpenVPN no Ubuntu 20.04
  • Arquivos de configuração do Linux: os 30 primeiros mais importantes
  • Mint 20: Melhor que o Ubuntu e o Microsoft Windows?
  • Ubuntu 20.04 truques e coisas que você pode não saber
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Como executar o Raspberry Pi OS em uma máquina virtual com…