sshuttle - 더 나은 ssh 터널
3579 단어 networkingdevops
동기
언젠가는 사설 VPC 네트워크로 방화벽이 설정된 Kubernetes API 서버에 액세스해야 했습니다. 이 클러스터에 액세스하기 위해 별도의 배스천 인스턴스를 설정하고 싶지 않았습니다. 모든 작업이
kubectl
를 사용하여 클라이언트-서버 API를 통해 수행될 수 있기 때문에 K8에서 TBH 배스천이 다소 중복되기 때문입니다. 따라서 신뢰할 수 있는 네트워크에서 안전한 방식으로 이 API 서버에 액세스하기만 하면 됩니다. 친구 덕분에 sshuttle 에 대해 알게 되었습니다. sshuttle
는 실제로 VPN이 아니지만 VPN처럼 작동한다는 점에서 매우 독특합니다(가장 실용적인 목적을 위해). sshuttle
를 사용하면 복잡한 포트 전달이나 VPN을 처리할 필요 없이 VPC 내부의 신뢰할 수 있는 노드를 통해 내부 네트워크에 액세스할 수 있습니다.기본 아이디어는 매우 간단합니다.
sshuttle
호스트 시스템에서 로컬python
서버를 시작하고 지정된 CIDR 블록의 대상 패킷을 이 로컬 서버로 라우팅하는 규칙을 생성합니다iptables
. 서버에서 패킷은 ssh
세션을 통해 다중화되어 서버로 전송됩니다. 서버는 다중화된 패킷을 분해하고 이를 업스트림으로 라우팅합니다. 따라서 기본적으로 이것은 TCP를 통한 TCP를 피하기 위한 영리한 해킹입니다(이는 다시 신뢰할 수 없는 네트워크에서 엉망입니다). ssh
의 다중화 스트림은 단일 상태 저장 TCP 연결입니다(상태 비저장 VPN 연결과 비교). 이제 어떻게 대상 서버가 패킷을 분해하는지 궁금할 것입니다. 예, 당신을 위해 실행하는 일종의 sshuttle
데몬이 필요합니다. 이것은 sshuttle
가 몇 가지 마법을 수행하는 곳입니다. 이 작업을 수행하기 위해 대상 호스트에 Python 스크립트를 자동으로 배포합니다. 예, sshuttle
가 작동하려면 클라이언트와 대상 모두 python
및 iptables
가 설치되어 있어야 합니다.용법
sshuttle -r user@port x.x.x.x
CIDR 블록으로 라우팅된 모든 패킷은 이제
sshuttle
데몬을 통과하게 됩니다. iptables
규칙을 구성했기 때문입니다.또한
sshuttle
는 호스트 시스템에서 로컬 파이썬 서버를 시작합니다. netstat
를 사용하여 볼 수 있습니다.$ sudo netstat -tunapl | grep python
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:12300 0.0.0.0:* LISTEN 27425/python
내 호스트 컴퓨터의 포트
python
에서 수신 대기하는 12300
서버가 있습니다. 실제로 확인하려면 sshuttle
에 의해 시작되며 pstree -p | less
를 사용하고 sshuttle
를 검색할 수 있습니다. 여기에서 sshuttle
가 실제로 python
서버를 시작했고 PID( 27425
)가 netstat
명령에서 본 것과 일치하는 것을 볼 수 있습니다. -zsh(13201)---sshuttle(27425)-+-ssh(27446)---ssh(27447)
`-sudo(27427)---python(27445)
--dns
플래그를 사용하여 DNS 쿼리를 전달할 수도 있습니다. 이것은 프라이빗 영역에서 DNS 레코드를 호스팅하는 Route53과 같은 것이 있는 경우 매우 유용합니다(예: .internal
와 같은 tld ).SSH 터널보다 낫습니까?
예, 다음을 사용하여 ssh로 포트 포워드할 수도 있습니다.
ssh -nNT -L <local-port>:{upstream-host}:{upstream-port} user@remote
ssh
터널의 문제는 정상적인 WiFi 연결에서 빈번한 패킷 손실을 경험하고 이를 처리하는 것이 상당히 실망스럽다는 것입니다. 또한 개인 네트워크의 여러 포트에 액세스해야 하는 경우가 있어 -L
플래그를 명시적으로 제공해야 하므로 번거롭다고 생각합니다. 또한 ssh
는 TCP만 수행할 수 있으므로 DNS 쿼리(UDP를 통해)를 전달할 수 없습니다.sshuttle
덕분에 내 인생이 너무 단순해졌습니다!지느러미!
원래 게시 됨 my blog
Reference
이 문제에 관하여(sshuttle - 더 나은 ssh 터널), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mrkaran/using-sshtunnel-2h24텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)