Bridge / Router com lógica customizada

2

Eu tenho uma caixa Linux com 3 adaptadores de rede, que gostaria de configurar da seguinte forma:

  1. O adaptador A está conectado ao computador A
  2. O adaptador B está conectado ao computador B
  3. O adaptador C está conectado à Internet. Especificamente, para someserver.com

O que eu quero alcançar:

  1. Todo o tráfego de A irá para a Internet
  2. Defina uma "porta secreta" especial no Adaptador B
  3. O tráfego TCP proveniente do Computador B que vai para 'someserver.com' na 'porta secreta' irá mascarar seu IP de origem para aparecer como ele está vindo do Computador A
  4. O tráfego TCP que retorna do 'someserver.com' para o Computador A para a mesma porta usada no # 3, redirecionará para o computador B.

Preciso implementar um roteador ou uma ponte? Posso fazê-lo simplesmente configurando as tabelas do NetFitler / ip ou deveria implementar algum código? Se o código, em que camada eu integrar com a pilha IP?

    
por Uri 09.11.2014 / 10:01

3 respostas

1

Para acesso geral, você terá que usar o MASQUARADE / SNAT (dependendo de seu endereço IP em C ser dinâmico ou estático).

Então, digamos que a situação atual é o seu computador A tem endereço IP estático a.a.a.a , e seu computador B tem endereço IP estático b.b.b.b . Ambos têm gateway padrão para o computador C . E o Someserver.com tem o endereço IP estático r.r.r.r e a porta secreta é pppp .

Você configuraria o computador C como roteador, que teria sua rota padrão para a Internet interface C (ele já faz isso, seja por configuração estática ou sendo dinamicamente configuração via PPPoE, etc). Isso por si só realizará 1.

Agora, você tem duas possibilidades:

  1. faça o roteador computador A também. Então você muda a configuração do computador B para que sua rota padrão seja via computador A (e não computador C como antes), e configure o computador A assim:

    iptables -t nat -s b.b.b.b -d r.r.r.r -p tcp --dport pppp -j SNAT --to a.a.a.a
    

    que faria todos os pacotes TCP do IP de origem b.b.b.b irem ao IP de destino r.r.r.r e a porta de destino pppp fingirem que eles vêm de a.a.a.a , realizando 3 e tráfego de someserver.com retornará ao endereço de origem ( a.a.a.a ), que seria decodificado pelo computador A e enviado de volta ao computador B . (realizando assim 4 )

    Isso é mais fácil, mas requer que o computador B esteja executando o sistema operacional capaz de executar essas políticas de NAT.

  2. altere o computador A para que o IP privado, como 10.0.1.100/24 e computador B , tenha o IP% privado10.0.2.100/24. Então, no computador C , faça:

    ip addr add a.a.a.a/nn dev ifaceC
    ip addr add b.b.b.b/nn dev ifaceC
    iptables -t nat -s 10.0.1.100 -j SNAT --to a.a.a.a
    iptables -t nat -s 10.0.2.100 -d r.r.r.r -p tcp --dport pppp -j SNAT --to a.a.a.a
    iptables -t nat -s 10.0.2.100 -j SNAT --to b.b.b.b
    

    em que nn é sua máscara de rede e ifaceC é o nome da sua interface C . Isso colocaria computador A e computador B em intervalos privados, permitindo assim que o computador C se conecte ao computador A para a.a.a.a (para que se comporte como antes) e NAT computador B para a.a.a.a (se dst = r.r.r.r , dport = pppp condição seja atendida) ou para b.b.b.b (caso contrário, ).

Isso não requer nenhum suporte especial em computador A nem computador B , mas os coloca atrás de NAT , que pode afetar algumas outras coisas.

E, é claro, nesta idade, deve-se mencionar que acima só funcionará para bons endereços IPv4 ( o último dos quais são sendo rapidamente usado ) e não em IPv6

    
por 17.11.2014 / 02:04
1

Por seu comentário:

@Marki - computers A and B are on the internet. When they go to someserver.com, they always do so from my Linux box (e.g. specific routing). A and B cooperate. On occasion, we want computer B to go to someserver.com without someserver being aware requests are coming from a different machine.

Estou sentindo falta de algo aqui? Se você configurar o computador C como um roteador, as solicitações de A e B não serão importantes. Os endereços IP privados / públicos de A e B serão ambos trocados com o endereço IP público do computador C, de acordo com as regras do NAT. Portanto, se C for o último Gateway na cadeia de sua rede, someserver verá todos os pedidos vindos de C, e C os encaminhará de volta para A e B.

Para que isso funcione, o Computador C precisa de duas placas de rede, uma conectada à LAN privada e a outra conectada à WAN pública.

Abaixo está o número 2 de Matija
Se você quiser que o Computador B imite o Computador A, B precisará filtrar seu tráfego por A antes de chegar a C. Não vejo como essa ajuda é seu "caso de uso", pois o computador C só vê tráfego do computador A, mas independentemente :

Someserver nunca verá um endereço privado de A ou B. Você está exagerando a situação aqui, pois tudo que você precisa fazer é habilitar o encaminhamento de porta no computador C para que todas as portas sejam encaminhadas para o endereço IP privado do Computador B.

    
por 17.11.2014 / 23:25
0

Você resolve este problema instalando um proxy em A que irá escutar B / SecretPort e encaminhá-lo para SomeServer. As respostas escolhidas em A com SecretPort são encaminhadas para B.

    
por 18.11.2014 / 00:34