Acabei de instalar o KVM no meu Ubuntu Server de acordo com este guia: https://help.ubuntu.com/community/KVM/Installation
Em seguida, preparou uma rede em ponte, como mostrado aqui: https://help.ubuntu.com/community/KVM/Networking
Então, criei uma máquina virtual com virt-manager. Eu tentei várias vezes, mas o convidado não conseguiu se conectar à rede! Qualquer ajuda?
ifconfig:
br0 Link encap:Ethernet HWaddr d0:27:88:b0:e4:38
inet addr:192.168.20.100 Bcast:192.168.20.255 Mask:255.255.255.0
inet6 addr: fe80::d227:88ff:feb0:e438/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:62 errors:0 dropped:0 overruns:0 frame:0
TX packets:62 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:10493 (10.4 KB) TX bytes:8433 (8.4 KB)
eth0 Link encap:Ethernet HWaddr d0:27:88:b0:e4:38
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:62 errors:0 dropped:0 overruns:0 frame:0
TX packets:63 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:11361 (11.3 KB) TX bytes:8479 (8.4 KB)
Interrupt:41
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
virbr0 Link encap:Ethernet HWaddr 5a:8c:57:95:af:3b
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
show brctl:
bridge name bridge id STP enabled interfaces
br0 8000.d02788b0e438 no eth0
virbr0 8000.000000000000 yes
brctl showmacs br0:
port no mac addr is local? ageing timer
1 5c:d9:98:67:b6:28 no 48.33
1 d0:27:88:b0:e4:38 yes 0.00
1 e0:2a:82:f9:6c:09 no 0.00
rota ip:
default via 192.168.20.1 dev br0 metric 100
192.168.20.0/24 dev br0 proto kernel scope link src 192.168.20.100
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
* No convidado * Não foi possível copiar e colar as informações do convidado, porque não consigo fazer o ssh. Não recebeu nenhum ip do DHCP. Não funcionará mesmo depois de configurá-lo manualmente.
server
networking
kvm
network-bridge
THpubs
fonte
fonte
ifconfig
,brctl show
,brctl showmacs br0
, eip route
. No convidado:ifconfig
,ip route
,ping 8.8.8.8
,ping <your internet router>
, etraceroute 8.8.8.8
. Não posso dizer que configurei o kvm da maneira que você configurou, mas consegui fazer a ponte para trabalhar usando okvm
comando Eu tive que desconectar a conexão sem fio para que meu host se conectasse à Internet e, como dizem as instruções citadas, você precisa se conectar à Internet com Ethernet.brctl showmacs br0
lista acima?Respostas:
Preliminares
O seguinte funcionou para mim no Ubuntu 12.04. Você deve desativar o firewall do computador ao testar isso, para que não interfira.
O arquivo / etc / default / qemu-kvm deve ser o originalmente instalado.
Você precisará ter os utilitários de ponte qemu-kvm e libvirt-bin instalados. Todos os usuários que usam máquinas virtuais devem ser adicionados ao grupo libvirtd.
Parece não haver mais necessidade de adicionar o recurso CAP_NET_ADMIN.
Configuração de rede
O modo de rede padrão é o modo de usuário, também chamado de SLIRP. Ele usa uma ponte virbr0 predefinida, que é roteada por NAT para o computador convidado. O roteamento NAT usa o recurso ip_forwarding e o iptables do kernel . O modo Bridge usa uma ponte virtual no convidado ao qual a interface Ethernet (não numerada) se conecta e na qual o host e o convidado têm suas interfaces de rede.
Os diagramas a seguir podem deixar as diferenças mais claras:
Você pode ver como a rede de usuário padrão é definida com:
Eu posso configurar o modo de ponte com as seguintes abordagens:
Em / etc / network / interfaces (da parte da ponte que você mencionou na sua pergunta):
Reiniciar; e verifique se a rede sem fio não está ativa. Verifique a rota IP padrão com
ip route
. Ele deve estar usando a interface br0.NB: Se a sua Ethernet não estiver conectada quando essa alteração for feita, é necessário conectar o cabo Ethernet e obter uma operadora ou a inicialização será interrompida por dois minutos e você não terá capacidade de rede. Isso ocorre porque a interface eth0, por estar neste arquivo, deve aparecer antes que a inicialização possa prosseguir normalmente.
Nota: geralmente você não pode usar uma rede sem fio em vez de eth0 devido à sua incapacidade de usar vários endereços MAC (eu deduzo que eles precisam de um segundo para a ponte).
Como alternativa, você pode desativar o uso da Ethernet e verificar se ele não possui um endereço IP e se não há uma rota padrão configurada
ip route
. Então:Você também pode fornecer um endereço IP estático aqui, além de definir a rota e o endereço DNS padrão. Para este exemplo,
dhclient
faz isso.Aqui está a minha tabela de rotas:
Usando o kvm
Posso então inicializar uma máquina kvm em ponte com:
O
-netdev tap
parâmetro faz do sudo um requisito. Quando a VM é iniciada, o qemu-kvm executa os seguintes comandos:Isso é feito por / etc / qemu-ifup
A interface vnet0 da VM é adicionada à ponte br0 porque a rota padrão acima usa essa interface de ponte. Se não estivesse lá, a interface de toque seria adicionada à interface virbr0. Como não está conectado à Internet, o NAT seria usado para conectar o convidado ao host e à Internet, nas minhas experiências. Você pode direcionar o vnet0 para uma ponte específica em / etc / default / qemu-kvm. Usando o virt-manager abaixo, você pode direcionar explicitamente a qual ponte se conectar.
Por causa dos comandos acima emitidos pelo qemu-kvm e pelo
-netdev tap,id=tunnel,ifname=vnet0
parâmetro, a máquina virtual vm está conectada ao túnel vnet0 e o túnel está conectado à ponte br0.Agora eu posso ssh diretamente nesta VM convidada de outro computador na minha rede.
Meu host
ifconfig
(observe a interface vnet0 que aparece na minha rede quando a VM está em execução):Minha configuração de ponte durante a execução da VM:
Observe que a interface vnet0 da máquina virtual e a interface eth0 estão conectadas à ponte br0.
E os MACs na interface br0:
Observe que a interface br0 conecta meu computador host à mesma ponte que está sendo usada pelo convidado.
Você pode verificar se está em ponte, em vez de roteado por NAT para sua própria rede usando
traceroute 8.8.8.8
. Se o primeiro nó for o roteador da sua rede e não o endereço IP do convidado, sua rede deverá estar funcionando corretamente.Veja esta documentação .
virt-manager
Certifique-se de ter instalado
virt-manager
ehal
. Ohal
pacote é uma dependência sugeridavirt-manager
e é usado para determinar a configuração de rede do seu sistema ao criar ou editar convidados.Embora tenha a ponte br0 definida como acima, criei uma máquina virtual com o virt-manager da seguinte maneira:
Consegui acessar diretamente o restante da minha rede doméstica e a Internet a partir desse hóspede. Também pude usá-lo com outro computador Ubuntu (não host, não convidado) na minha rede doméstica.
Aqui está o
kvm
comando muito longo executado pelo virt-manager (para comparação com EApubs ou qualquer outra pessoa que tenha problemas com isso):Aqui está a parte da rede da descrição da máquina virtual em /etc/libvirt/qemu/quantal.xml
De acordo com este link, para desempenho e confiabilidade, pode ser melhor definir o modelo de dispositivo de rede para
virtio
, você pode fazer isso no visualizador de virt pressionando o botão i , indo para a configuração da NIC e definindo o "Modelo do dispositivo "paravirtio
. Você também pode adicionar isso ao XML acima adicionando a linha:Em suma
Tudo isso em 12.04 foi:
-device e1000,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0
, ou crie uma máquina virtual com o virt-manager, especificando o Bridge de rede br0 no painel Etapa 4-> Opções avançadas.Não foram necessárias mais alterações nas redes, recursos, modelos ou configurações.
Para expor um serviço em seu novo convidado à Internet, você deve:
Lembre-se de testar e reativar o serviço de firewall do seu computador host. Pode ser necessária qualquer entrada para encaminhar o tráfego para o hóspede.
Consulte https://help.ubuntu.com/community/KVM/Installation , https://help.ubuntu.com/community/KVM/Networking e https://help.ubuntu.com/12.04/serverguide/libvirt. html .
fonte
ps aux | grep kvm
).brctl show
como você tem na sua pergunta?) Qual versão do Ubuntu você está executando? Talvez seja essa a diferença. Qual versão do virt-manager? (O meu é 0.9.1-1ubuntu5.1).Se o comportamento que você está vendo é host, pode acessar o convidado, e o convidado pode acessar o host, mas o convidado não pode acessar outras máquinas na rede ou vice-versa ... provavelmente o firewall do host está bloqueando o acesso.
Veja: https://bugs.launchpad.net/ubuntu/+source/ufw/+bug/573461
Especificamente, esta seção: "A etapa final é desativar o netfilter na ponte:
fonte
Estes são os dois scripts que eu uso para criar uma ponte
qemu-kvm
.Primeiro, deixe o host se tornar um roteador IP.
Roteiro
ip-router.sh
:Em seguida, crie o
tun-tap
interface ebridge
ela com a interface padrão (geralmente aquela com conexão à Internet).Script
create-qemu-bridged-tuntap.sh
:Eu uso esses scripts diariamente, para que eles também funcionem bem para você. Você precisará instalar algum pacote para que tudo isso funcione. Usando:
você pode ver qual pacote é necessário ter
COMMAND
. Por exemplo, para ver qual pacote é necessário terbrctl
, basta executar:e você terá:
Usando a mesma abordagem para todos os comandos nesses scripts, você deve (pelo menos) executar esta
aptitude
linha de comando:Por fim, você pode iniciar o script principal (como um usuário normal):
Em execução,
ip addr
você deverá ver umabr0
interface com endereço IP192.168.1.1
, conforme especificado dentro docreate-qemu-bridged-tuntap.sh
script:Este é o
host address
visto peloguest
. Por outro lado, o convidado terá como endereço IP192.168.1.95
(novamente, isso pode ser facilmente alterado dentro do script principal).Agora, usando
virt-manager
, você apenas precisa configurar o seu nic de convidado para usarbr0
como interface física.Dentro do
guest
, você só precisa fornecereth0
um endereço IP192.168.1.95
e tudo deve correr bem.fonte
cat /proc/sys/net/ipv4/ip_forward
dado0
. A ativação e a persistência esclareceram o problema para mim, instruções nesta postagem .