Este es el comando nat-traverse que se puede ejecutar en el proveedor de alojamiento gratuito de OnWorks utilizando una de nuestras múltiples estaciones de trabajo en línea gratuitas, como Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS.
PROGRAMA:
NOMBRE
nat-traverse: uso de UDP para atravesar puertas de enlace NAT
SINOPSIS
Para crear un túnel simple de solo texto, use los comandos
usuario @ izquierda $ nat-traverse 40000: natgw-of-right: 40001
usuario @ derecha $ nat-traverse 40001: natgw-of-left: 40000
donde 40000 es un puerto UDP no utilizado a la "izquierda" y 40001 es un puerto no utilizado a la "derecha". Ver
"EJEMPLOS" para más.
VERSION
Este documento describe nat-traverse v0.5.
DESCRIPCIÓN
nat-traverse establece conexiones entre los nodos que están detrás de las puertas de enlace NAT, es decir
anfitriones que hacen no tener direcciones IP públicas. Además, puede configurar una pequeña VPN
usando pppd encima de nat-traverse (ver "EJEMPLOS"). nat-traverse hace no necesita una
servidor externo en Internet, y no es necesario reconfigurar el NAT involucrado
pasarelas, tampoco. nat-atravesar funciona fuera de la caja.
Consulte "TÉCNICA" para ver cómo se logra esto.
Limitación: nat-traverse no funciona con puertas de enlace que cambian los números de puerto. Esta
es un problema fundamental del diseño de nat-traverse, ya que los números de puerto cambiados son (en
general) no predecible.
OPCIONES
"puerto_local: par: puerto_remoto " (requerido)
Establece el puerto local que se utilizará y la dirección remota a la que conectarse.
Tenga en cuenta que debe proporcionar la dirección IP o el nombre de host del NAT puerta del anfitrión
desea conectarse, ya que el host de destino no tiene una dirección IP pública.
"--cmd ="pppd ... ""
Ejecuta el comando especificado después de establecer la conexión.
El comando se ejecutará con su STDIN y STDOUT enlazados al socket, es decir
todo lo que el comando escribe en STDOUT se reenviará al par.
Si no se especifica ningún comando, nat-traverse retransmitirá la entrada de STDIN al par y
viceversa, es decir, nat-traverse se degrada a netcat.
"--ventana =10"
Establece el número de paquetes de basura iniciales que se enviarán. El valor predeterminado, 10, debería funcionar con
la mayoría de los cortafuegos.
"--timeout =10"
Establece el número máximo de segundos para esperar un reconocimiento por parte del par.
"--quit-after-connect"
Sale de nat-traverse después de que el túnel se haya establecido correctamente.
nat-traverse devuelve un código de estado distinto de 0 para indicar que no se pudo establecer
el tunel.
"--quit-after-connect" es útil si desea que otro programa use el túnel. Para
ejemplo, puede configurar OpenVPN para usar los mismos puertos que nat-traverse, por lo tanto
OpenVPN podría cruzar puertas de enlace NAT.
"--version", "--help"
TÉCNICA
nat-traverse establece conexiones entre hosts detrás de puertas de enlace NAT sin necesidad de
reconfiguración de las puertas de enlace NAT involucradas.
1. En primer lugar, nat-traverse en el host "left" envía paquetes UDP basura a la puerta de enlace NAT de
"Derecha". Estos paquetes, por supuesto, son descartados por el cortafuegos.
2. Luego, el nat-traverse de "right" envía paquetes UDP basura a la puerta de enlace NAT de "left".
Estos paquetes son no descartados, ya que la puerta de enlace NAT "izquierda" cree que estos paquetes son
responde a los paquetes enviados en el paso 1!
3. El nat-traverse de "left" continúa enviando paquetes de basura a la puerta de enlace NAT de "right".
Estos paquetes tampoco se descartan ahora, ya que la puerta de enlace NAT cree que los paquetes están
responde a los paquetes enviados en el paso 2.
4. Finalmente, ambos hosts envían un paquete de reconocimiento para indicar que están listos. Cuando estos
se reciben paquetes, se establece la conexión y nat-traverse puede retransmitir
STDIN / STDOUT al zócalo o ejecutar un programa.
EJEMPLOS
Preparar of a chica VPN con PPP
Es fácil configurar una VPN (red privada virtual) mediante el protocolo punto a punto.
Demonio, "pppd":
root @ left # nat-traverse \
--cmd = "pppd updetach noauth notty pasivo \
ipparam vpn 10.0.0.1:10.0.0.2 "
40000: natgw-of-right: 40001
root @ right # nat-traverse \
--cmd = "pppd nodetach notty noauth"
40001: natgw-de-izquierda: 40000
"pppd" crea una nueva interfaz, normalmente "ppp0". Usando esta interfaz, puede hacer ping
10.0.0.1 o 10.0.0.2. Como puede ver, "pppd" actualiza el túnel de solo datos nat-traverse
proporciona a un túnel IP completo. Por lo tanto, puede establecer conexiones TCP confiables a través del
túnel, aunque el túnel utiliza UDP! Además, incluso podría agregar direcciones IPv6
a "ppp0" ejecutando "ip -6 addr add ..."!
Sin embargo, tenga en cuenta que aunque esta VPN is posiblemente una red privada, es no asegurado en cualquier
camino. Es posible que desee utilizar SSH para cifrar la conexión.
Puerto Reenvío con netcat
Puede utilizar "netcat" para reenviar uno de sus puertos UDP o TCP locales a un UDP arbitrario o
Puerto TCP del host remoto, similar a "ssh -L" o "ssh -R":
usuario @ izquierda $ nat-traverse 10001: natgw-of-right: 10002 \
--cmd = "nc -vl 20000"
usuario @ derecha $ nat-traverse 10002: natgw-of-left: 10001 \
--cmd = "nc -v localhost 22"
Tan pronto como se establece el túnel (utilizando los puertos UDP 10001 y 10002), el puerto TCP "izquierdo"
20000 se reenvía al demonio SSH de "right" (puerto TCP 22):
usuario @ algún-otro-host $ ssh -p 20000 usuario @ izquierda
# ¡Se conectará al demonio SSH de right!
Pero tenga en cuenta que pierde la confiabilidad de TCP en este ejemplo, ya que los datos reales son
transportado a través de UDP; así que este es solo un ejemplo de juguete. Si desea transmisiones confiables, use PPP
encima de nat-traverse, como se describe arriba.
Preparar of a VPN con OpenVPN
Puedes usar sobre nat-traverse si quieres tener un seguro VPN.
El uso de OpenVPN sobre nat-traverse requiere solo un cambio en el archivo de configuración de OpenVPN,
suponiendo que no desea utilizar el modo multicliente de OpenVPN: debe ajustar el
las opciones "code" e "lport" en consecuencia, por ejemplo:
# Opciones para agregar a la configuración de OpenVPN de la izquierda y la derecha:
puerto 60001
puerto 60001
# Comando para ejecutar a la izquierda resp. Derecha:
root @ left # hasta \
nat-traverse --quit-after-connect 60001: derecha: 60001 \
hacer \
dormir 5 \
hecho; \
openvpn [...]
root @ right # hasta \
nat-traverse --quit-after-connect 60001: izquierda: 60001 \
hacer \
dormir 5 \
hecho; \
openvpn [...]
El bucle "hasta" asegura que OpenVPN no se iniciará antes de que nat-traverse pueda
establecer la conexión. Michael Kugele ("michael (at) kugele.net") también informó de una forma
para poder seguir usando el modo multicliente de OpenVPN con nat-traverse: Como todas las instancias de
nat-traverse tiene que usar puertos únicos (porque una conexión es identificada por el
combinación de puerto de origen / destino), debe usar reglas de redirección para redirigir el
puertos utilizados por nat-traverse al puerto en el que escucha el demonio OpenVPN:
iptables -t nat -A ENRUTAMIENTO PREVIO -p udp \
--dport $ LPORT -j DNAT --to $ HOST: $ PORT
iptables -t nat -A ENRUTAMIENTO PREVIO -p udp \
--dport $ PORT -j REDIRECT --to-port $ LPORT
$ LPORT especifica el puerto de origen que utiliza nat-traverse en el lado del servidor, y "$ HOST: $ PORT"
es la dirección del servidor OpenVPN.)
LIMITACIONES
Solo se admite IPv4, nat-traverse no funcionará con direcciones IPv6. Déjame una nota si tu
Necesita compatibilidad con IPv6.
nat-traverse no funciona con puertas de enlace que cambian los números de puerto. Esto es un
problema fundamental del diseño de nat-traverse, ya que los números de puerto cambiados son (en general)
no predecible.
Utilice nat-traverse en línea utilizando los servicios de onworks.net