Estou tendo problemas para obter acesso à rede de uma VM que estou executando usando o Xen e o libvirt. Eu tenho tentado coisas diferentes e lido posts semelhantes on-line por alguns dias, mas estou realmente preso neste momento. Se alguém pudesse oferecer algum insight, seria muito apreciado.
Eu tenho uma VM que estou executando em um host com uma ponte configurada como br0 e uma interface eth0 em uma sub-rede 192.168.60.0/24. A parte de rede do xml de configuração do libvirt é:
<interface type='bridge'>
<mac address='ff:a0:d1:e5:07:de'/>
<source bridge='br0'/>
<script path='/etc/xen/scripts/vif-bridge'/>
<model type='virtio' />
</interface>
Quando inicio a VM, uma interface vif6.0 é criada no host e a saída ifconfig é:
br0 Link encap:Ethernet HWaddr 00:A0:D1:C3:07:DE
inet addr:192.168.60.33 Bcast:192.168.60.255 Mask:255.255.255.0
inet6 addr: fe80::2a0:d1ff:fee5:7de/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:13 errors:0 dropped:0 overruns:0 frame:0
TX packets:40 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3570 (3.4 KiB) TX bytes:3508 (3.4 KiB)
eth0 Link encap:Ethernet HWaddr 00:A0:D1:C3:07:DE
inet6 addr: fe80::2a0:d1ff:fee5:7de/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:492 (492.0 b)
Interrupt:19 Memory:fe8f0000-fe900000
vif6.0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:80 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:6660 (6.5 KiB) TX bytes:468 (468.0 b)
virbr0 Link encap:Ethernet HWaddr 00:00:00:00:00:00
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST RUNNING 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)
A saída "brctl show" parece mostrar a ponte sendo configurada corretamente:
br0 8000.00a0d1e507de no eth0
vif6.0
O conteúdo ifcfg-eth0 na VM é:
DEVICE=eth0
BOOTPROTO=static
HWADDR=FF:A0:D1:E5:07:DE
IPADDR=192.168.60.133
NETMASK=255.255.255.0
ONBOOT=yes
e a saída do ifconfig na VM se parece com o que eu esperaria:
eth0 Link encap:Ethernet HWaddr FF:A0:D1:E5:07:DE
inet addr:192.168.60.133 Bcast:192.168.60.255 Mask:255.255.255.0
inet6 addr: fe80::fda0:d1ff:fee5:7de/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:80 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:468 (468.0 b) TX bytes:7780 (7.5 KiB)
mas quando tento ssh ou ping em outro computador não recebo 'route to host'.
Usando o tcpdump no sistema host, tentei ver se poderia restringir onde está o problema:
# tcpdump -vv -i vif6.0
tcpdump: WARNING: vif6.0: no IPv4 address assigned
tcpdump: listening on vif6.0, link-type EN10MB (Ethernet), capture size 96 bytes
14:49:40.833997 arp who-has 192.168.60.35 tell 192.168.60.133
14:49:41.833314 arp who-has 192.168.60.35 tell 192.168.60.133
14:49:42.833309 arp who-has 192.168.60.35 tell 192.168.60.133
Assim, a VM está enviando um arp who-has packet quando eu tento ssh para 192.168.60.35. Acho que isso significa que a configuração dentro da VM está correta e que isso é um problema no sistema host. Se eu rodar o tcpdump com a interface de br0, então eu não vejo esses pacotes de arp.
Meu pensamento aqui é que os pacotes estão sendo bloqueados antes de ir para a ponte de alguma forma. Eu tentei adicionar uma regra iptables para resolver isso:
-A FORWARD -m physdev --physdev -é-ponte -j ACCEPT
mas não funcionou. Eu também tentei o seguinte:
/sbin/sysctl -w net.bridge.bridge-nf-call-ip6tables=0
/sbin/sysctl -w net.bridge.bridge-nf-call-iptables=0
/sbin/sysctl -w net.bridge.bridge-nf-call-arptables=0
/sbin/sysctl -w net.ipv4.ip_forward=1
que não teve impacto.
É óbvio para alguém que tem mais experiência do que eu o que eu sinto falta aqui? Se vif6.0 tem o mesmo endereço MAC é eth0 na vm? Preciso de mais regras no meu iptables? Obrigado por qualquer ajuda!