인바운드 트래픽이 활성화되지 않고 고정 IP 주소가 없는 네트워크의 장치에 대한 SSH

인바운드 트래픽이 활성화되지 않고 고정 IP 주소가 없는 네트워크의 장치에 대한 SSH

내가 하고 싶은 것은 활성화하는 것입니다.산딸기, 고객 사이트에 물리적으로 배치됨,가지다다음을 통한 인터넷 접속동적 IP, 야생에서 SSH 명령 수신클라이언트 라우터 및 방화벽을 운영할 필요가 없습니다.. 이 네트워크에서는 인바운드 연결이 허용되지 않으며 고객 사이트의 인터넷 주소는 동적입니다.

편집하다: 이 문제에 대한 해결책을 알고 싶다면 다음 답변을 참조하세요.케빈 킨제이그리고플로린 고다르, 또는 질문 끝으로 스크롤하여 비표준 SSH 포트 22에서 작동하도록 하는 방법을 알아보세요.

나는 제안된 내용을 조사하고 이해하려고 노력했습니다.Unix Stack Exchange에서 SSH를 통해 private-ip로, 그러나 나는 그 요점을 정말로 이해하지 못합니다.

나는 내 이야기부터 시작하고 싶다.랩탑, 고객에게VPS 서버, VPS 서버가 다음에 연결되도록 합니다.산딸기SSH. 그래서:

           ( firewall access allow in+out )
      | =>           VPS Server              \    ( firewall access allow out only )
      |                                      | =>    Raspberry
MY PC /

이것은사례 시나리오지정된 IP 주소, 포트 및 이름으로 구성합니다.

MY PC 
    name: [email protected]

Client VPS Server
    name: remote.null.tld
    IP Address: 98.76.54.32
    SSH Port: 9876

Raspberry
    model: Zero W
    name: [email protected]
    IP Address: dynamic IP ( based on Internet Provider )
    SSH Port: 6789
    Raspberry's iptables: empty
    Router's Firewall Restrictions: allow only out
    Internet stability: very low

Raspberry의 외부 IP는 인터넷 제공업체에 의해 할당되며 라우터 재부팅에 따라 변경될 수 있습니다. 완전히 확신할 수 있는 방법은 없습니다.

클라이언트 네트워크의 인터넷 액세스는정말 불안정하다. 라디오링크라던가 그런거요. 그럼에도 불구하고 인터넷 연결의 대역폭은 매우 불규칙합니다.

또한 고객의 라우터는 게으름 때문이 아니라 고객의 IT 부서에서 부과한 제한으로 인해 조작할 수 없습니다.

클라이언트의 VPS에 대한 SSH 액세스 권한이 있으며 여기에 모든 소프트웨어를 설치할 수 있습니다.

편집하다:문제 해결

내 구성에서 포트는 비표준입니다. 따라서 해결책은 다음과 같습니다.

라즈베리의 경우:

# login to [email protected] is done via private/public key with no passwords
ssh -p 9876 -f -N -T -R 55555:localhost:6789 [email protected]

라즈베리 크론탭에서:

# A re-connect is performed at every 10th minute of every hour to prevent accidental tunnel breakdowns.
10 * * * * ps -ef | grep 'ssh -p 9876 -f -N -T -R' | grep -v grep | awk '{print $2}' | xargs -r kill -9 && sleep 30s && ssh -p 9876 -f -N -T -R 55555:localhost:6789 [email protected] >/dev/null 2>&1

브릿지 VPSRemotenull.tld

ssh -p 55555 raspberry_username@localhost

또는 VPS의 SSH 구성을 수정하여 보다 우아한 솔루션을 제공하세요.

Host tunnelToRemoteRaspberry
    Hostname localhost
    User raspberry_username
    Port 55555

답변1

나는 remoteVPS와 Raspberry Pi pi의 사용자 이름을 가정합니다.

  1. VPS에서 무료 포트를 선택합니다. 65000 미만의 임의의 5자리 값이 작동합니다.
  2. Raspberry Pi에서는 다음을 실행합니다.

    ssh -R PORT:localhost:22 remote@vps
    
  3. VPS에서 다음 명령을 사용하여 Raspberry에 연결할 수 있습니다.

    ssh -p PORT pi@localhost
    

PORT를 1단계에서 선택한 포트로 바꾸세요.

2단계에서는 VPS의 PORT에서 Raspberry의 SSH 서버가 수신 대기하는 Raspberry의 포트 22까지 역방향 터널을 만듭니다. 3단계에서는 VPS의 포트에 연결하고 Raspberry의 포트 22로 전송합니다.

그런 다음 VPS의 ~/.ssh/config에서 연결을 구성할 수 있습니다. 예를 들면 다음과 같습니다.

Host raspberryTunnel
  Hostname localhost
  User pi
  Port PORT

안정적으로 작동하는 경우 Raspberry의 단일 SSH 연결을 autossh로 대체할 수 있습니다. 그러면 연결이 중단되면 자동으로 연결이 다시 생성됩니다.

autossh -R PORT:localhost:22 remote@vps

답변2

이것은 가능하다. 사용"역방향 포트 포워딩". 연결되어 있는지 확인하려면 cronjob을 설정해야 할 수도 있습니다. 그렇지 않은 경우 다음 명령을 실행하십시오.

ssh -f -N -T -R 2210:localhost:22 [email protected]

"example.com"액세스할 수 있는 펌웨어 외부의 일부 서버입니다. RPi의 포트 22를 RPi의 포트 2210으로 전달합니다 example.com. 그런 다음 SSH를 통해 example.com에 접속하고 다음을 수행할 수 있습니다.

ssh RaspberryUser@localhost -p 2210

RPi 상자에 연결됩니다.

답변3

지금 뭐하고 지내?요청하신 대로 정확하게불가능하다:

이 네트워크에서는 인바운드 연결이 허용되지 않습니다.

그러나 쉽게 다음을 수행할 수 있습니다.

  • Pi가 노트북에 아웃바운드 연결을 만들도록 하세요.역방향 SSH 사용당신은요일정
  • ssh노트북에서 VPS 서버로, 그리고 sshVPS 서버에서 Pi로

답변4

Pi 방화벽이 들어오는 연결을 허용하지 않으면 연결을 설정할 수 없습니다. 유일한 방법은 설정된 연결을 사용하여 방화벽을 통과하는 것입니다.

관련 정보