Posso evitar a perda de três IPs por rede em uma configuração de rede Xen em ponte?

1

Cerca de um mês atrás, eu perguntei esta pergunta no Superusuário. A resposta dada certamente funciona, mas me deparei com um problema sobre o qual não havia pensado antes.

A configuração que eu estava executando (com base na resposta mencionada anteriormente) foi

auto eth0
iface eth0 inet static
    address a.b.c.d
    netmask 255.255.255.0
    network a.b.c.0
    broadcast a.b.c.255
    gateway a.b.c.254

auto xenbr0
iface xenbr0 inet static
    bridge_ports none
    address e.f.g.1
    netmask 255.255.255.0

Em seguida, eu configuraria o domUs para usar um endereço no intervalo que me foi atribuído pelo datacenter. Em particular, esse intervalo seria e.f.g.24 / 29, dando-me 8 endereços IP disponíveis para domUs. O gateway seria o IP da bridge, de onde os pacotes são encaminhados através da eth0 para o mundo externo. Isso funcionou perfeitamente.

A questão que eu percebi há alguns dias é que, os domUs nunca serão capazes de alcançar endereços como e.f.g.1, porque essa é a ponte em si. Mas, e se uma das casas realmente precisar acessar e.f.g.1 (o IP externo real)?

Então, comecei a mover tudo dentro das redes que me foram atribuídas. O problema era que, com um bloco / 29, eu manteria apenas 5 endereços IP disponíveis para um domU:

auto xenbr0
iface xenbr0 inet static
    bridge_ports none
    address e.f.g.25
    netmask 255.255.255.248

Eu sempre perco três endereços na minha rede (um para "a rede", um para a ponte em si e um para o endereço de transmissão). Na verdade, eu não defini a rede e o endereço de broadcast, mas ifconfig ainda mostra o endereço de broadcast como 31 (último IP na rede) e não consigo colocar a bridge no endereço 24 de qualquer maneira de trabalho. O problema fica ainda pior com uma rede / 30, onde eu teria apenas um dos quatro IPs disponíveis para os domUs (sim, eu também tenho essa rede).

Como estou pagando por endereço IP, desejo fazer o uso mais eficiente possível deles. Eu então comecei a pesquisar o roteamento do Xen. O que eu estou tentando fazer agora é usar vif-route e network-route em /etc/xen/xend-config.sxp para fazer uma configuração como:

     +-----------------------------+        +-------------+
     |            dom0             |        |     domU    |
     |                             |        |             |
-------eth0                vif1.0--------------eth0       |
     | a.b.c.d              ????   |        |  e.f.g.24   |
     |                             |        |             |
     +-----------------------------+        +-------------+

Desta forma, o datacenter enviaria pacotes para os meus IPs para a eth0 do dom0, dom0 encaminharia para o vif correto que o entregaria para a eth0 do domU.

Não importa o que eu tente, não consigo fazê-lo funcionar, sem mensagens de erro significativas para iniciar a depuração. Dois dias de constante pesquisa no Google não me ajudaram e eu estou meio que olhando em branco no momento.

Estou vendo isso de forma errada ou estou apenas configurando as coisas de forma errada? Essa configuração é mesmo viável? Se sim, o que estou fazendo errado?

    
por Simon 19.08.2014 / 15:40

1 resposta

1

Consegui fazê-lo funcionar. Não é 100% tão limpo quanto eu quero que seja, mas pelo menos é funcional.

Minha solução consiste basicamente em iniciar a ponte com uma máscara de rede / 24 e sem um endereço IP. Quando a ponte está ativa, adiciono manualmente uma rota para o bloco / 29 IP que atribuí ao meu servidor. No domUs, inicio a interface com o IP correto e uma máscara de rede / 24, sem um gateway. Quando a interface está ativa, adiciono manualmente uma rota ao endereço eth0 do meu dom0 e faço disso o gateway padrão. Obviamente, o dom0 é configurado para rotear pacotes IP entre as redes.

dom0 /etc/network/interfaces

### The primary adapter ###
# These settings are provided by the dServer host
auto eth0
iface eth0 inet static
        address a.b.c.d
        netmask 255.255.255.0
        network a.b.c.0
        broadcast a.b.c.255
        gateway a.b.c.254

### Network bridges ###
auto xenbr0
iface xenbr0 inet manual
        bridge_ports none
        network e.f.g.0
        netmask 255.255.255.0
        gateway a.b.c.254

### Static routes ###
# No route for e.f.g.0/24 was automatically set
# I assume that's due to the bridge not having an IP address assigned
up ip route add e.f.g.h/29 dev xenbr0
down ip route delete e.f.g.h/29

domU /etc/network/interfaces

# The primary network interface
auto eth0
iface eth0 inet static
        address e.f.g.h
        netmask 255.255.255.0

# Static routing
up ip route delete e.f.g.0/24
up ip route add a.b.c.d dev eth0
up ip route add default via a.b.c.d
down ip route delete default via a.b.c.d
dow ip route delete a.b.c.d

Habilite o roteamento de pacotes certificando-se de que isso esteja configurado em /etc/sysctl.d/xen-routing.conf (o nome do arquivo é arbitrário, mas deve terminar em .conf)

net.ipv4.ip_forward=1

Depois de fazer isso, você pode habilitar a configuração reinicializando ou fazer online com

sysctl -w net.ipv4.ip_forward=1
    
por 25.08.2014 / 16:50