IP Bridge para KVM com várias sub-redes

2

Eu tenho uma máquina configurada executando o KVM e uma ponte no eth0 com o endereço IP da máquina. A máquina tem um endereço IP em um intervalo sem mais endereços IP livres. Estou tentando disponibilizar uma segunda sub-rede para os convidados do KVM usarem para seus endereços IP.

network -- eth0 ---    bridge0    --|
                    (x.x.x.75/26)   |-- guest0:eth0 (x.x.y.213/28)
                                    |
                                    |-- guest1:eth0 (x.x.y.214/28)

Eu criei a ponte criando um arquivo ifcfg-bridge0 no host e geralmente parece estar funcionando, mas não consigo iniciar uma conexão do mundo externo para o convidado. O que é estranho é que o convidado tem acesso à internet, então obviamente os pacotes de retorno chegam onde estão indo, mas novas conexões não podem ser estabelecidas. O caso de exemplo para isso é que, se eu me conectar a um dos convidados com o VNC, posso executar wget http://google.com/ e obter a página.

No host e no iptables de convidado foi liberado, então não há regras de iptables. No host, a saída do comando route é

host# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
x.x.x.64        0.0.0.0         255.255.255.224 U     0      0        0 bridge0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
169.254.0.0     0.0.0.0         255.255.0.0     U     1004   0        0 bridge0
0.0.0.0         x.x.x.94        0.0.0.0         UG    0      0        0 bridge0

Para tentar fazer o roteamento funcionar, tentei adicionar uma rota estática à nova sub-rede no brdge com um comando como route add --net x.x.y.208 netmask 255.255.255.240 bridge0 . Depois de adicionar a rota, minha tabela de rotas no host se parece com

host# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
x.x.y.208       0.0.0.0         255.255.255.240 U     0      0        0 bridge0
x.x.x.64        0.0.0.0         255.255.255.224 U     0      0        0 bridge0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
169.254.0.0     0.0.0.0         255.255.0.0     U     1004   0        0 bridge0
0.0.0.0         x.x.x.94        0.0.0.0         UG    0      0        0 bridge0

No entanto, o host ainda não consegue acessar o convidado. Se eu tracerou o convidado, não vejo a conexão saindo, simplesmente vejo

host# traceroute x.x.y.213
traceroute to x.x.y.213, 30 hops max, 60 byte packets
 1  x.x.y.213  0.639 ms  0.771 ms  0.784 ms

Mas quando tento me conectar à máquina (por exemplo, telnet x.x.y.213 22 ), não obtenho nenhuma conexão (na comparação com o convidado, se eu executar telnet x.x.y.213 22 ou telnet x.x.x.75 22 , obtenho um resultado).

    
por Christopher O'Connell 09.08.2012 / 06:31

1 resposta

3

Se as duas sub-redes (a / 28 e / 26) estiverem conectadas à mesma interface, você precisará de endereços em ambas as redes na rede upstream (isto é, um endereço secundário no roteador para toda a rede).

Pense nos hosts virtuais na bridge como se eles estivessem conectados ao mesmo switch que o NIC do host. O fato de o host (ou seja, bridge0) estar em uma sub-rede IP diferente implica que é necessário algum tipo de gateway entre os dois.

Duas opções - ou renumerar todos os hosts na mesma rede ou fornecer algum tipo de interface roteada entre os dois.

    
por 09.08.2012 / 07:06