Puente / Enrutador con lógica personalizada

Tengo una caja de Linux con 3 adaptadores de networking, que me gustaría configurar de la siguiente manera:

  1. El adaptador A está conectado a la computadora A
  2. El adaptador B está conectado a la computadora B
  3. El adaptador C está conectado a Internet. Específicamente, a someserver.com

Lo que quiero lograr:

  1. Todo el tráfico de A irá a Internet
  2. Definir un "puerto secreto" especial en el Adaptador B
  3. El tráfico TCP proveniente de la computadora B que va a 'someserver.com' en 'puerto secreto' enmascara su IP de origen para que aparezca como viene de la computadora A
  4. El tráfico TCP que regresa de 'someserver.com' yendo a la Computadora A al mismo puerto usado en la # 3, networkingirigirá a la computadora B.

¿Debo implementar un enrutador o un puente? ¿Puedo hacerlo simplemente configurando las tablas NetFitler / ip o debería implementar algún código? Si el código, ¿en qué capa me integro con la stack IP?

Para el acceso general, deberá usar MASQUARADE / SNAT (dependiendo de si su dirección IP en C es dinámica o estática).

Entonces, digamos que la situación actual es que su computadora A tiene una dirección IP estática aaaa , y su computadora B tiene una dirección IP estática bbbb . Ambos tienen puerta de enlace pnetworkingeterminada a la computadora C. Y Someserver.com tiene dirección IP estática rrrr y el puerto secreto es pppp .

Usted configuraría la computadora C como enrutador, que tendría su ruta pnetworkingeterminada a la interfaz de Internet C (ya lo hace, ya sea a través de la configuration estática, o configurada dinámicamente a través de PPPoE, etc.). Eso por sí solo logrará 1.

Ahora, tienes dos posibilidades:

  1. hacer también un enrutador de computadora A Luego cambia la configuration B de la computadora para que su ruta pnetworkingeterminada sea a través de la computadora A (y no la computadora C como antes), y configure la computadora A de esta manera:

     iptables -t nat -s bbbb -d rrrr -p tcp --dport pppp -j SNAT --to aaaa 

    eso haría que todos los packages TCP de la fuente IP bbbb vayan a destino IP rrrr y el puerto de destino pppp simule que provienen de aaaa , logrando así 3 , y el tráfico de someserver.com volverá a lo que era la dirección fuente ( aaaa ), que sería decodificado por la computadora A y enviado a la computadora B. (logrando así 4 )

    Eso es más fácil, pero requiere que su computadora B esté ejecutando un SO que sea capaz de tales políticas de NAT.

  2. cambie la computadora A para tener IP privada como 10.0.1.100/24 y la computadora B para tener IP privada 10.0.2.100/24 . Luego, en la computadora C :

     ip addr add aaaa/nn dev ifaceC ip addr add bbbb/nn dev ifaceC iptables -t nat -s 10.0.1.100 -j SNAT --to aaaa iptables -t nat -s 10.0.2.100 -d rrrr -p tcp --dport pppp -j SNAT --to aaaa iptables -t nat -s 10.0.2.100 -j SNAT --to bbbb 

    donde nn es su máscara de networking e ifaceC es el nombre de su interfaz C. Eso pondría la computadora A y la computadora B en ranges privados, permitiendo que la computadora C a la computadora NAT A aaaa (para que se comporte como antes), y la computadora NAT B a aaaa (si se cumple dst = rrrr, dport = pppp ) o a bbbb (de lo contrario).

Esto no requiere ningún soporte especial en la computadora A ni en la computadora B , pero los pone detrás de NAT, lo que podría afectar algunas otras cosas.

Y por supuesto, a esta edad se debe mencionar que lo anterior solo funcionará para las direcciones IPv4 buenas (las últimas se están agotando rápidamente ) y no en IPv6.

Por tu comentario:

@Marki – las computadoras A y B están en internet. Cuando van a someserver.com, siempre lo hacen desde mi cuadro de Linux (por ejemplo, routing específico). A y B cooperan. En ocasiones, queremos que la computadora B vaya a someserver.com sin que someserver sepa que las requestes provienen de una máquina diferente.

¿Me estoy perdiendo de algo? Si configura Computer C como enrutador, las requestes de A y B no tendrán importancia. Las direcciones IP privadas / públicas de A y B se intercambiarán ambas con la dirección IP pública de la computadora C, de acuerdo con las reglas de NAT. Por lo tanto, si C es la última puerta de enlace de la cadena de su networking, someserver verá todas las requestes procedentes de C y C las networkingirigirá de nuevo a A y B.

Para que esto funcione, la Computadora C necesita dos tarjetas de networking, una conectada a la LAN privada y la otra conectada a la WAN Pública.

A continuación está el número 2 de Matija
Si desea que la Computadora B mime la Computadora A, B debe filtrar su tráfico a través de A antes de llegar a C. No veo cómo esta ayuda es su "caso de uso" ya que la computadora C solo ve el tráfico de la computadora A, pero independientemente :

Someserver nunca verá una dirección privada de A o B. Está exagerando la situación aquí, ya que todo lo que tiene que hacer es habilitar el reenvío de puertos en la computadora C para que todos los puertos avancen a la dirección IP privada de la Computadora B.

Resuelve este problema instalando un proxy en A, que escuchará B / SecretPort y lo enviará a SomeServer. Las respuestas recogidas en A con SecretPort se envían a B.