NAT 後面的 GNU 並行多堆 sshlogin 節點
是否可以在具有 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 上。