
Unix & Linux 또는 네트워크 엔지니어링에서 이것을 질문해야 하는지 잘 모르겠습니다.
물리적 시나리오는 다음과 같습니다.
[호스트 1]----[캐리어급 NAT]---->AWS<----[캐리어급 NAT]----[호스트 2]
호스트 1그리고호스트 2AWS Box에 역방향 SSH(autossh)가 이루어지므로 필요한 경우 셸 연결이 가능하고 필요한 경우 다른 포트를 노출할 수도 있습니다.
호스트 2백업 덤프를 다음 위치로 푸시합니다.호스트 1정기적으로 SCP를 사용합니다. 실제로는호스트2 X 10데이터 덤프를 밀어내는 상자. 가장 가까운 AWS 위치는 상자 위치에서 꽤 멀기 때문에 지연 시간이 상당히 많습니다.
상자 사이의 SSH 터널을 중개하기 위해 AWS 상자를 랑데부 지점으로 사용할 가능성이 있습니까? IPv6 터널 브로커에 대해 알고 있지만 해당 지역의 ISP는 아직 이를 채택하지 않았습니다(20년 늦었습니다... 젠장!). 저는 다음을 기반으로 하는 솔루션을 탐색하고 있습니다.
- TCP/UDP 홀펀칭(실제 구현)
- AWS의 UPnP/NAT-PMP 서비스
- Chrome 원격 데스크톱과 같은 도구를 사용하여 해킹하여 VNC가 아닌 SSH 포트를 노출합니다.
- 기타 라우터 서비스.
- 다른 실용적인 접근 방식.
박스는 대부분 CentOS 6/7을 실행하고 있습니다.
답변1
그러나 정확히 필요한 것은 아닙니다. iptables를 사용하여 호스트1 또는 호스트2 역방향 로컬 포트를 외부 포트로 노출할 수 있습니다. 이제 호스트2를 SSH 역방향 터널로 연결했다고 가정해 보겠습니다.
user2@host2 $ ssh -R 9999:localhost:22 [email protected]
이제 수신 포트 aws.com:9999를 aws [localport:9999]로 전달할 수 있습니다. AWS 서버에서:
[email protected] # iptables -t nat -I PREROUTING -p tcp --dport 9999 -j DNAT --to 127.0.0.1:9999
이제 다음과 같은 방법으로 호스트 2에서 호스트 1로 연결할 수 있습니다.
user1@host1 $ ssh [email protected] -p 9999
빙고. 다음과 같이 연결했습니다.
[호스트 1] --> [aws:포트 9999] --> [aws: 127.0.0.1:9999의 역방향 터널] --> [호스트 2]
이 연결이 더 이상 사용되지 않으면 iptable 레코드를 제거해야 합니다.
[email protected] # iptables -t nat -A PREROUTING -p tcp --dport 9999 -j DNAT --to 127.0.0.1:9999
이 솔루션의 단점은 호스트2가 외부 포트 9999를 통해 모든 사람에게 노출된다는 것입니다. 로그인하려면 비밀번호를 입력해야 하지만 노출되어 있습니다.
UPD: 로컬 전달을 활성화해야 할 수도 있습니다.
awsuser@aws # ls echo 1 > /proc/sys/net/ipv4/conf/all/route_localnet
또는 모든 인터페이스에 대해 활성화하는 대신 수입 인터페이스에서만 활성화하십시오.
awsuser@aws # ls echo 1 > /proc/sys/net/ipv4/conf/eth0/accept_local