Establece conexiones entre nodos que se encuentran detrás de gateways NAT, es decir, hosts que no tienen direcciones IP públicas. Es una herramienta que permite la comunicación directa entre dos máquinas que están detrás de NAT sin necesidad de servidores intermediarios ni reconfiguración de routers ni configuración adicional.
# nat-traverse --server 5000 ssh -p %p localhost
# nat-traverse --client 5000 <IP_publica_A> ssh -p %p usuario@localhost
# nat-traverse --client 6000 <IP_A> nc %p < archivo_enviar.tar.gz
# nat-traverse --server 6000 nc -l -p %p > archivo_recibido.tar.gz
# nat-traverse --server 5555 pppd updetach noauth passive notty ipparam vpn 10.0.0.1:10.0.0.2
# nat-traverse --client 5555 <IP_A> pppd updetach noauth notty ipparam vpn 10.0.0.2:10.0.0.1
# nat-traverse --server 5900 vncviewer localhost:%p
# nat-traverse --client 5900 <IP_A> x11vnc -display :0 -rfbport %p
# nat-traverse --server 8000 rsync -av --port=%p /ruta/origen/ destino/
# nat-traverse --client 8000 <IP_A> rsync -av --port=%p origen/ /ruta/destino/
Nota.- No es cifrado. nat-traverse solo establece el túnel el cifrado depende del protocolo que se use, SSH lo proporciona, netcat no.
1.-
Ejemplo práctico
Acceder por SSH desde una laptop fuera de casa al PC de casa, detrás de un router doméstico:
En casa
$ curl ifconfig.me
Supongamos que devuelve 203.0.113.45
Iniciar nat-traverse
$ nat-traverse --keepalive 25 --server 4500 ssh -p %p localhost
Des de la laptop fuera de casa:
$ nat-traverse --keepalive 25 --client 4500 203.0.113.45 ssh -p %p usuario@localhost
Se establecerá una sesión SSH directa sin configurar port forwarding en el router