Nós sshlogin de múltiplas pilhas paralelas GNU por trás do NAT

Nós sshlogin de múltiplas pilhas paralelas GNU por trás do NAT

É possível ter vários nós remotos atrás de um NAT com GNU paralelo?

Suponha que algum cluster paralelo GNU exista atrás de um NAT (que pode ou não ser acessível apenas através de um único endereço IPv4 através de um ISP operando apenas IPv4) relativo ao nó mestre. ou seja, mais de um nó de PC com seu próprio endereço IP de sub-rede existente em alguma sub-rede diferente daquela que hospeda o nó mestre.

Existe uma maneira do GNU-parallel distribuir trabalho através do NAT para todos esses nós?

Depois de alguma pesquisa e reflexão sobre o assunto, incluindo uma olhada nestepergunta um tanto relacionada

A única maneira que consigo pensar seria definir manualmente uma porta diferente para cada nó usando o sinalizador -p descrito nomanuale, em seguida, adicione manualmente uma regra de encaminhamento de porta no NAT para cada nó:porta

Existe algum "truque" no gnu-parallel onde os trabalhos podem ser passados ​​para um nó atrás do NAT e depois distribuídos de lá para outros nós em sua sub-rede?

Ou talvez exista um método pelo qual os nós escravos possam passar uma mensagem por meio de um POST https com um cron job e de alguma forma gerar e manter uma conexão estabelecida em uma porta pública? Semelhante a como se pode obter chaves públicas conforme descrito emessa questão(essa ideia está definitivamente fora do meu entendimento de TCP/IPTABLES, então percebo que ela pode ser fundamentalmente falha)

Uma solução que pudesse ser implementada apenas no nó mestre e nos nós escravos seria preferível a uma em que fossem necessárias entradas NAT.

Responder1

Existem várias soluções.

Os trabalhadores estão por trás do NAT. Sem acesso a um host de salto. Sem acesso ao firewall.

Para isso você precisa de algum tipo de VPN que possa atravessar o firewall. Um serviço oculto TOR para a porta 22 nos trabalhadores pode ser usado aqui. Se todos os trabalhadores estiverem habilitados para TOR:

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

Se apenas alguns forem:

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

Os trabalhadores estão por trás do NAT. Sem acesso a um host de salto. Acesso ao firewall.

Se você puder encaminhar portas, de modo que a porta 2001 seja a porta 22 no host 1, a porta 2002 seja a porta 22 no host 2, 2003 seja o host 3 ... então você pode usar -p:

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

Você pode colocar isso em .ssh/config:

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

Host *.v
  Hostname firewall

E então simplesmente use host[1-3].v como hosts normais:

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

Os trabalhadores estão por trás do NAT. Acesso a um host de salto.

Se você tiver acesso a um host de salto a partir do qual possa acessar os trabalhadores, o óbvio seria:

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

Mas issonão funcionaporque o comando é colocado entre aspas por ssh duas vezes, enquanto o GNU Parallel espera que seja colocado entre aspas apenas uma vez.

Então, em vez disso, use .ssh/confignovamente:

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

Requer que nc(netcat) esteja instalado no jumphost.

informação relacionada