Estou tentando há semanas descobrir a configuração de rede correta para compartilhar um intervalo de IPs públicos com máquinas virtuais KVM em execução no meu servidor, mas até agora com pouca sorte e com a ajuda da amigável comunidade ServerFault, consegui fazer funcionar. Você pode encontrar minha configuração de trabalho abaixo:
Meu ISP roteia todo o tráfego para 192.168.8.118
(portanto, esse precisa ser o IP principal de eth0), mas eu tenho 192.168.239.160/28
à minha disposição.
Aqui está /etc/network/interfaces
na máquina host:
# Loopback device:
auto lo
iface lo inet loopback
# device: eth0
auto eth0
iface eth0 inet static
address 192.168.8.118
broadcast 192.168.8.127
netmask 255.255.255.224
gateway 192.168.8.97
pointopoint 192.168.8.97
# This device acts as gateway for the bridge, so provide a route.
up ip route add 192.168.8.118/32 dev eth0 scope host
# device: br0
auto br0
iface br0 inet static
bridge_stp off
bridge_maxwait 0
bridge_fd 0
address 192.168.239.174
broadcast 192.168.239.175
netmask 255.255.255.240
gateway 192.168.8.118
# Create and destroy the bridge automatically.
pre-up brctl addbr br0
post-down brctl delbr br0
# Our additional IPs are allocated on the bridge.
up ip route add to 192.168.239.160/28 dev br0 scope host
Eu configurei uma máquina virtual como esta:
sudo ubuntu-vm-builder kvm precise \
--domain pippin \
--dest pippin \
--hostname pippin.hobbiton.arnor \
--flavour virtual \
--mem 8196 \
--user mikl \
--pass hest \
--bridge=br0 \
--ip 192.168.239.162 \
--mask 255.255.255.240 \
--net 192.168.239.160 \
--bcast 192.168.239.175 \
--gw 192.168.239.174 \
--dns 8.8.8.8 \
--components main,universe \
--addpkg git \
--addpkg openssh-server \
--addpkg vim-nox \
--addpkg zsh \
--libvirt qemu:///system ;
Se eu inspecionar a definição XML da máquina virtual, sua interface de rede será definida assim:
<interface type='bridge'>
<mac address='52:54:00:b1:e9:52'/>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
Quando eu (re) inicio a máquina virtual, /var/log/syslog
recebe estas linhas:
Jul 20 03:13:02 olin kernel: [ 4084.652906] device vnet0 entered promiscuous mode
Jul 20 03:13:02 olin kernel: [ 4084.686388] br0: port 2(vnet0) entering forwarding state
Jul 20 03:13:02 olin kernel: [ 4084.686394] br0: port 2(vnet0) entering forwarding state
Meu servidor está executando o Ubuntu 12.04 64-bit com o kernel 3.2.0-26-generic (do Ubuntu). Estou executando libvirt-bin 0.9.8-2ubuntu1
e qemu-kvm 1.0+noroms-0ubuntu13
.
O iptables na máquina host está atualmente configurado para permitir todo o tráfego (para eliminar isso como uma fonte de problema), e eu habilitei o encaminhamento do tráfego ipv4 e ipv6.
Quando eu faço login no convidado via SSH do host, não tenho conexão com a Internet dentro do sistema operacional convidado. O /etc/network/interfaces
do convidado é assim:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.239.162
netmask 255.255.255.240
network 192.168.239.160
broadcast 192.168.239.175
gateway 192.168.239.174
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 8.8.8.8
dns-search pippin
Agora funciona
O resumo da configuração acima funciona como eu quero. Consulte o histórico de edições se você quiser ver minhas tentativas anteriores.