Para que funcione, tive que ativar o NAT.
$ iptables -t nat -A POSTROUTING -o envmw -j MASQUERADE
$ iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
$ iptables -A FORWARD -i virbr0 -o envmw -j ACCEPT
Estou tentando executar uma VM do QEMU, mas ela não tem acesso à Internet, apenas acesso ao host e a uma rede do Docker.
O que eu fiz:
brctl addbr virbr0
; ip link set up dev virbr0
; ip addr add 192.168.66.1/24
; echo "allow virbr0" >> /etc/qemu/bridge.conf
; Execute o virt-install:
virt-install \
--name centos67 \
--memory 1024 \
--vcpus=1,maxvcpus=2 \
--cpu host \
--cdrom $HOME/Downloads/CentOS-6.7-x86_64-minimal.iso \
--disk size=4,format=raw \
--network bridge=virbr0
Em seguida, iniciei uma imagem de resgate e configurei uma rede:
IP: 192.168.66.2/24
Gateway: 192.168.66.1
Isso é tudo, neste momento eu só tenho acesso ao host e à rede do Docker, mas não à Internet (então o ping 8.8.8.8 falhou).
Aqui está a saída de alguns utilitários de hosts que podem ser úteis para ajudar a resolver esse problema:
$ brctl showstp virbr0
virbr0
bridge id 8000.fef8a25ccef1
designated root 8000.fef8a25ccef1
root port 0 path cost 0
max age 19.99 bridge max age 19.99
hello time 1.99 bridge hello time 1.99
forward delay 14.99 bridge forward delay 14.99
ageing time 299.99
hello timer 0.00 tcn timer 0.00
topology change timer 0.00 gc timer 167.03
flags
tap0 (1)
port id 8001 state forwarding
designated root 8000.fef8a25ccef1 path cost 100
designated bridge 8000.fef8a25ccef1 message age timer 0.00
designated port 8001 forward delay timer 12.95
designated cost 0 hold timer 0.00
flags
$ ip route
default via 192.168.232.2 dev envmw proto static metric 100
192.168.5.0/24 dev docker0 proto kernel scope link src 192.168.5.1
192.168.66.0/24 dev virbr0 proto kernel scope link src 192.168.66.1
192.168.232.0/24 dev envmw proto kernel scope link src 192.168.232.100 metric 100
212.25.224.10 via 192.168.232.2 dev envmw proto static metric 100
$ iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere 255.255.255.255
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere a01.dev.lo tcp dpt:pxc-splr-ft
ACCEPT tcp -- anywhere a01.dev.lo tcp dpt:pxc-spvr-ft
ACCEPT tcp -- anywhere a01.dev.lo tcp dpt:newoak
Parece que perdi alguma etapa de configuração, mas não sei qual. Tentei pesquisar uma solução no Google, mas não encontrei nenhuma.
Você não adicionou uma interface física ( envmw
) à sua ponte. Você também precisa definir essa interface para o modo promíscuo sem um endereço IP:
brctl addif virbr0 envmw
ip addr add 0/0 dev envmw
ip addr del 192.168.66.1/24 dev envmw
ip link set envmw promisc on
Executar esses comandos a partir de uma sessão remota é uma má ideia, porque está mudando a configuração da interface. Isso, por sua vez, desconectará qualquer tráfego remoto, incluindo a sessão remota.
Tags networking qemu bridge arch-linux