Como criar um gateway multipath interno

3

Basicamente tentando dobrar a ponte e o NAT à minha vontade com um projeto bastante singular.

Eu simplifiquei o que estou fazendo abaixo (VM = máquina virtual Kali para teste):

ZoneX são namespaces de rede, vexxxs são links virtuais criados com ip link

A premissa é criar um gateway para a LAN que possa desviar o tráfego (baseado no que é) para ZoneX ou ZoneY modificar o tráfego e encaminhá-lo para ZoneZ e finalmente para o gateway de redes reais.

Eu tentei algumas coisas diferentes, mas o principal problema é criar uma tempestade layer2 ... não é legal em VMs ... ou o namespace de rede NAT (ZoneZ) encaminha o tráfego de retorno pela primeira interface na tabela NAT da VM do cliente (que às vezes é incorreta).

O principal objetivo é dividir o tráfego em várias zonas, mas o tráfego de retorno deve ser o mesmo caminho de volta. A próxima etapa é então poder encadear várias zonas para modificar o tráfego de várias maneiras.

*** EDITAR

Um exemplo de conexão seria uma pesquisa de DNS para 8.8.8.8 e uma solicitação TCP para 8.8.8.8, ambos da VM.

Em primeiro lugar, o pedido do DNS passa para a eth0 sobre o brA para ve001, para a ZoneA, onde o pacote é marcado (usando o iptables) e passado para ve003 > ve004 etc. para ve006 onde é NAT e enviado para a internet. Quando a resposta retorna para ZoneZ (a zona NAT), a pesquisa na tabela NAT é concluída e o pacote é roteado para ve006, porque a entrada ARP para a máquina VM aponta para essa interface. O principal problema surge quando tenho outro tráfego que quero encaminhar através da rota inferior. O mesmo que antes até ZoneA, no entanto, desta vez, é encaminhado para ve007, através de ZoneY e finalmente para ZoneZ, então passa para o gw NAT e para a internet. No entanto, quando uma resposta é recebida para esta conexão os pacotes vão para a ZoneZ a consulta é feita na tabela NAT, sua tradução e então a consulta da tabela ARP é feita, isto é quando a envia de volta via ve006 que está errado, eu quero para voltar o caminho que veio (neste caso via ve010).

Eu acho que a minha pergunta deveria ser, posso obter a tabela NAT para gravar a interface que foi apresentada e enviá-lo de volta via isso?

    
por geekscrap 10.01.2015 / 05:50

1 resposta

1

A solução é marcar novas conexões e usar a marca para roteamento de políticas:

iptables -t mangle -A FORWARD -i ve006 -m connmark -j CONNMARK --set-mark  6
iptables -t mangle -A FORWARD -i ve010 -m connmark -j CONNMARK --set-mark 10

ip rule tem um teste para fwmark . Assim, você cria uma tabela de roteamento para ve006 e outra para ve010 .

ip route add default table ve006 via a.b.c.51 dev ve006
# .51 again, typo?
ip route add default table ve010 via a.b.c.51 dev ve010

ip rule add pref 100 iif ve998 fwmark  6 table ve006
ip rule add pref 101 iif ve998 fwmark 10 table ve010
    
por 13.01.2015 / 06:33