2009-10-02 19 views
11

El escenario es el siguiente. Tengo dos máquinas A y B: A: Cliente (detrás de NAT) B: Servidor (detrás de NAT)¿Cómo puedo hacer que un servidor TCP funcione detrás de un enrutador (NAT) sin necesidad de configuración de redirección?

Quiero B para poder escuchar en cualquier puerto, de modo que A puede enviar paquetes a B a través ese puerto TCP específico y recibir cualquier respuesta. Si ambas máquinas no están detrás de un NAT, es bastante directo en el proceso. Sin embargo, ¿cómo hago que funcione para que funcione incluso cuando B está detrás de un enrutador, sin tener que ir a cambiar la configuración del enrutador habilitar el reenvío de puertos, etc. ...

Por ejemplo, ¿cómo hacer entre iguales? programas como clientes de torrent funcionan sin que el usuario tenga nada que configurar?

+1

Es posible que tenga mejor suerte en serverfault.com – NotMe

+0

Asumo esta pregunta es cómo escribir el servidor para trabajar detrás de NAT, en lugar de cómo configurar eso. –

Respuesta

0

Una alternativa a un servidor proxy es un servidor de creación de coincidencias. En lugar de utilizar todo el tráfico, el creador de coincidencias solo negocia hasta que los pares puedan hablar entre ellos. Esto implica encontrar las IP públicas externas de los pares y hablar con cada uno para que el cortafuegos/enrutador sepa que los pares desean comunicarse.

Esto se llama hole punching y a menudo tiene que ser hecho por el fabricante del partido en lugar de los propios pares. Sin embargo, una vez que se perfora el hoyo, el fabricante del fósforo puede decirles a los pares sobre el otro y ellos pueden comunicarse directamente.

+1

La perforación AFAIK de este tipo solo funciona para UDP, y solo si la asignación del puerto UDP es consistente en el enrutador. –

+0

ah ... él dice TCP en la pregunta ... –

+0

Leí sobre perforaciones, ¿funcionaría la perforación con orificios TCP? Sin embargo, puede que no sea tan fácil de implementar, pero lo intentaré, ya que parece ser lo que estoy buscando. Gracias. – Chetane

1

Tendrá que sea:

  1. Configurar el desvío de puerto desde el puerta de enlace NAT delante del servidor en la máquina el software del servidor se está ejecutando, y que el cliente conectarse a la dirección IP esa puerta de enlace .

  2. Crear un servidor proxy sentado entre medio de los 2 gatewys nat por lo tanto su servidor y el cliente se puede conectar a la . Tanto su servidor como su cliente tienen que establecer una conexión con ese proxy que medirá los datos entre esas 2 conexiones.

+0

Hola, He previsto esa solución, el único problema con esta solución es que la carga será considerable en el proxy, esto es costoso. – Chetane

6

Para contestar el ejemplo de programas peer to peer, y en general: No es una tecnología llamada Universal Plug and Play los enrutadores NAT pueden utilizar para permitir a los clientes detrás de ellos para exponer los puertos al exterior. Eso es lo que pueden usar los clientes de bittorrent para que los otros clientes puedan conectarse directamente a ellos.

+0

pero no es UPnP solo una forma de automatizar la automatización de reenvío de puertos? –

+1

La clave es * automatización * - Supongo que el 'él' en la pregunta es el usuario. Evitar tener que configurar manualmente el reenvío de puertos es tanto la belleza como el peligro de UPnP. –

0

El perforado de orificios es bastante conocido para la comunicación UDP, pero también se puede usar de manera confiable para configurar flujos de TCP de igual a igual. Aquí está el artículo bien detallada sobre TCP y UDP:

http://www.brynosaurus.com/pub/net/p2pnat/

Cuestiones relacionadas