
GNU 병렬 NAT 뒤에 여러 개의 원격 노드를 가질 수 있습니까?
GNU 병렬 클러스터 중 일부가 마스터 노드를 기준으로 NAT(IPv4만 운영하는 ISP를 통해 단일 IPv4 주소를 통해서만 액세스할 수 있거나 액세스할 수 없는) 뒤에 존재한다고 가정합니다. 즉, 마스터 노드를 호스팅하는 서브넷이 아닌 다른 서브넷에 존재하는 자체 서브넷 IP 주소를 가진 두 개 이상의 PC 노드입니다.
GNU 병렬이 NAT를 통해 모든 노드에 작업을 배포할 수 있는 방법이 있습니까?
이 문제를 포함하여 문제에 대해 조사하고 생각한 후다소 관련된 질문
내가 생각할 수 있는 유일한 방법은 다음에 설명된 -p 플래그를 사용하여 각 노드에 대해 다른 포트를 수동으로 정의하는 것입니다.수동그런 다음 각 노드에 대해 NAT에 포트 전달 규칙을 수동으로 추가합니다.
작업이 NAT 뒤의 한 노드로 전달된 다음 그곳에서 해당 서브넷의 다른 노드로 전달될 수 있는 gnu-parallel의 "트릭"이 있습니까?
아니면 슬레이브 노드가 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
하지만 이것은작동하지 않습니다왜냐하면 GNU Parallel에서는 명령이 한 번만 인용 해제될 것으로 예상하는 반면 명령은 ssh에 의해 두 번 인용 해제되기 때문입니다.
대신에 .ssh/config
다시 사용하세요:
Host host1 host2 host3
ProxyCommand ssh jump.host.domain nc -w 1 %h 22
nc
Jumphost에 (netcat)을 설치 해야 합니다 .