Параллель GNU multpile sshlogin узлы позади NAT

Действительно ли возможно иметь несколько удаленных узлов позади NAT с параллелью GNU?

Предположим, что часть кластера параллели GNU существует позади NAT (который может или не может быть доступным только через единственный адрес IPv4 через ISP, управляющий только IPv4) относительно главного узла. т.е. больше чем один узел ПК, имеющий его собственный IP-адрес подсети, существующий на некоторой подсети кроме того, что размещает главный узел.

Существует ли путь к параллели GNU для распределения работы через NAT ко всем тем узлам?

После некоторого исследования и думающий о проблеме включая взгляд на этот несколько связанный вопрос

Единственные средства, о которых я могу думать, состояли бы в том, чтобы вручную определить другой порт для каждого узла с помощью флага-p, описанного в руководстве, и затем вручную добавить порт вперед правило в NAT для каждого node:port

Есть ли некоторый "прием" в параллели гну, куда задания могли быть переданы одному узлу позади NAT, затем розданного оттуда к другим узлам в его подсети?

Или возможно существует метод, которым ведомые узлы могли передать сообщение через https POST с заданием крона и так или иначе генерировать и содержать установленное соединение по публичному порту? Подобный тому, как можно получить открытые ключи, как описано в этом вопросе (эта идея определенно вне моего понимания TCP/IPTABLES, таким образом, я действительно понимаю, что это может быть существенно испорчено на его поверхности),

Решение, которое могло быть реализовано только в главном узле и ведомых узлах, будет предпочтительно по тому, в котором требовались записи NAT.

1
задан 23 May 2017 в 15:41
1 ответ

Есть несколько решений.

Рабочие находятся за NAT. Нет доступа к хосту прыжка. Нет доступа к брандмауэру.

Для этого вам понадобится какая-то VPN, которая может проходить через брандмауэр. Здесь можно использовать скрытый сервис TOR для порта 22 на воркерах. Если все рабочие процессы имеют TOR:

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

Если только некоторые:

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

Рабочие группы находятся за NAT. Нет доступа к хосту прыжка. Доступ к брандмауэру.

Если вы можете переадресовать порты, так что порт 2001 - это порт 22 на хосте 1, порт 2002 - это порт 22 на хосте 2, 2003 - это хост 3 ... тогда вы можете использовать -p:

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

Вы можете поместить это в .ssh / config :

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

Host *.v
  Hostname firewall

И затем просто использовать host [1-3] .v как обычные хосты:

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

Рабочие группы находятся за NAT. Доступ к хосту перехода.

Если у вас есть доступ к хосту перехода, с которого вы можете связаться с рабочими, очевидным будет:

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

Но этот не работает , потому что команда указана ssh дважды, в то время как GNU Parallel ожидает, что он будет описан только один раз.

Поэтому вместо этого снова используйте .ssh / config :

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

Требуется установка nc (netcat) на jumphost.

1
ответ дан 3 December 2019 в 23:59

Теги

Похожие вопросы