Nat

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

  • September 28, 2015

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

假設一些 GNU 並行集群存在於相對於主節點的 NAT 之後(它可能只能通過一個 IPv4 地址通過僅執行 IPv4 的 ISP 訪問,也可能不能訪問)。即多個PC 節點具有自己的子網IP 地址存在於某個子網上,而不是託管主節點的子網。

GNU-parallel 有沒有辦法通過 NAT 將工作分配給所有這些節點?

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

我能想到的唯一方法是使用手冊中描述的 -p 標誌為每個節點手動定義不同的埠,然後在 NAT 中為每個節點手動添加埠轉發規則:埠

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

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

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

有幾種解決方案。

工人在 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

然後只需使用主機

$$ 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 上。

引用自:https://serverfault.com/questions/725163