NAT 後面的 GNU 並行多個 sshlogin 節點

NAT 後面的 GNU 並行多個 sshlogin 節點

是否可以在具有 GNU 並行功能的 NAT 後面擁有多個遠端節點?

假設某些 GNU 平行叢集存在於相對於主節點的 NAT 後面(可能只能透過單一 IPv4 位址透過僅執行 IPv4 的 ISP 訪問,也可能無法存取)。即,多個 PC 節點擁有自己的子網路 IP 位址,存在於某個子網路上,而非託管主節點的子網路。

GNU 並行是否有辦法透過 NAT 將工作分配給所有這些節點?

經過對這個問題的一些研究和思考,包括看看這個有點相關的問題

我能想到的唯一方法是使用 -p 標誌為每個節點手動定義不同的端口手動的然後在NAT中為每個節點手動新增連接埠轉送規則:port

gnu-parallel 中是否有一些“技巧”,可以將作業傳遞到 NAT 後面的一個節點,然後從那裡分發到其子網路中的其他節點?

或者也許有一種方法,從屬節點可以透過帶有 cron 作業的 https POST 傳遞訊息,並以某種方式透過公共連接埠產生並保持已建立的連接?類似於如何取得公鑰,如這個問題(這個想法絕對超出了我對 TCP/IPTABLES 的理解,所以我確實意識到它從表面上看可能存在根本性缺陷)

一種可以僅在主節點和從節點內實現的解決方案比需要 NAT 條目的解決方案更可取。

答案1

有幾種解決方案。

工作人員位於 NAT 後方。無法存取跳轉主機。無法存取防火牆。

為此,您需要某種可以穿越防火牆的 VPN。此處可以使用工作執行緒上連接埠 22 的 TOR 隱藏服務。如果所有工作人員都啟用了 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 是主機 1 上的連接埠 22,連接埠 2002 是主機 2 上的連接埠 22,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在 Jumphost 上安裝 (netcat)。

相關內容