Nodos sshlogin de pila múltiple paralelos de GNU detrás de NAT

Nodos sshlogin de pila múltiple paralelos de GNU detrás de NAT

¿Es posible tener múltiples nodos remotos detrás de una NAT con GNU paralelo?

Supongamos que parte de un clúster paralelo GNU existe detrás de un NAT (al que puede o no ser accesible solo a través de una única dirección IPv4 a través de un ISP que opera solo IPv4) en relación con el nodo maestro. es decir, más de un nodo de PC que tiene su propia dirección IP de subred existente en alguna subred distinta de la que aloja el nodo maestro.

¿Existe alguna forma de que GNU-parallel distribuya el trabajo a través de NAT a todos esos nodos?

Después de investigar un poco y pensar en el tema, incluido un vistazo a estepregunta algo relacionada

El único medio que se me ocurre sería definir manualmente un puerto diferente para cada nodo usando el indicador -p descrito en elmanualy luego agregue manualmente una regla de reenvío de puerto en la NAT para cada nodo: puerto

¿Existe algún "truco" en gnu-parallel donde los trabajos puedan pasarse a un nodo detrás del NAT y luego entregarse desde allí a otros nodos en su subred?

¿O tal vez existe un método mediante el cual los nodos esclavos podrían pasar un mensaje a través de un https POST con un trabajo cron y de alguna manera generar y mantener una conexión establecida a través de un puerto público? De manera similar a cómo se pueden obtener claves públicas como se describe enesta pregunta(Esta idea definitivamente está fuera de mi comprensión de TCP/IPTABLES, por lo que me doy cuenta de que puede tener un error fundamental a primera vista)

Una solución que pudiera implementarse únicamente dentro del nodo maestro y los nodos esclavos sería preferible a una en la que se requirieran entradas NAT.

Respuesta1

Hay varias soluciones.

Los trabajadores están detrás de NAT. No hay acceso a un host de salto. Sin acceso al firewall.

Para ello necesita algún tipo de VPN que pueda atravesar el firewall. Aquí se puede utilizar un servicio oculto TOR para el puerto 22 de los trabajadores. Si todos los trabajadores están habilitados para TOR:

parallel --ssh 'torsocks ssh' -S zij4uclus7xhwlhz.onion,isj4uclus7xhwlhz.onion,lzw4uclus7xhwlhz.onion echo ::: 1

Si solo algunos son:

parallel -S 'torsocks ssh zij4uclus7xhwlhz.onion,torsocks ssh isj4uclus7xhwlhz.onion,torsocks ssh lzw4uclus7xhwlhz.onion' echo ::: 1

Los trabajadores están detrás de NAT. No hay acceso a un host de salto. Acceso al cortafuegos.

Si puede reenviar puertos, de modo que el puerto 2001 sea el puerto 22 en el host 1, el puerto 2002 sea el puerto 22 en el host 2, 2003 sea el host 3... entonces puede usar -p:

parallel -S 'ssh -p 2001 firewall,ssh -p 2002 firewall,ssh -p 2003 firewall' echo ::: 1

Puedes poner esto en .ssh/config:

Host host1.v
  Port 2001
Host host2.v
  Port 2002
Host host3.v
  Port 2003

Host *.v
  Hostname firewall

Y luego simplemente use host[1-3].v como hosts normales:

parallel -S host1.v,host2.v,host3.v echo ::: 1

Los trabajadores están detrás de NAT. Acceso a un host de salto.

Si tiene acceso a un host de salto desde el cual puede comunicarse con los trabajadores, lo obvio sería:

parallel --ssh 'ssh jumphost ssh' -S host1 echo ::: DOES NOT WORK

Pero estoNo funcionaporque ssh elimina las comillas del comando dos veces, mientras que GNU Parallel solo espera que se elimine las comillas una vez.

Entonces use .ssh/confignuevamente:

Host host1 host2 host3
  ProxyCommand ssh jump.host.domain nc -w 1 %h 22

Requiere ncque (netcat) esté instalado en jumphost.

información relacionada