태그 보관물: nat

nat

NAT 라우터 뒤의 사무실 호스트에 대한 SSH 액세스 공용 IP 및 전체 인터넷 액세스 NAT

집에서 내 사무실 리눅스 호스트의 ssh 포트에 액세스하고 싶습니다. 불행히도 호스트는 NAT 라우터 뒤에 있습니다. 따라서 IP 주소는 공개적으로 사용할 수 없습니다. 그러나 불행히도 루트가 아닌 다른 인터넷 호스트 (서버)에 액세스 할 수 있습니다. 검색하는 동안 적절한 해결책을 찾지 못했습니다.

다음 설정 :

  • NAT 뒤에는 사무실 PC (리눅스, 루트 액세스) (공개가 아닌 IP)이지만 완전한 인터넷 액세스
  • 서버 PC (리눅스, 루트 액세스 권한 없음) 정적 및 공용 IP 및 전체 인터넷 액세스
  • NAT (공개가 아닌 IP) 뒤에있는 홈 PC (Linux, 루트 액세스)이지만 완전한 인터넷 액세스.

가능한 연결 : Office PC-> 서버 <-홈 PC

불가능 : Office PC <-X- Server -X-> 홈 PC

가정용 PC 나 서버 모두 Office PC에 대한 액세스를 시작할 수 없습니다. 그러나 Office PC와 Home PC 모두 서버 연결을 시작할 수 있습니다.

역방향 SSH 터널을 사용할 수 없음 : reverse ssh-tunnel이라는 방법을 시도했습니다. 불행히도 이것은 루트 액세스 권한이없는 / etc / ssh / sshd_config에서 서버의 GatewayPorts가 “yes”로 설정되어 있어야합니다.

원칙적으로 가능해야합니다.

0) 서버에서 2 포트 (1 수신, 1 송신)에서 수신 대기하는 사용자 공간 프로그램을 시작합니다

1) 내 사무실 PC에서 TCP 연결을 서버의 발신 포트로 열어 두는 다른 프로그램을 실행합니다.

2) 집에서 서버의 들어오는 포트에 연결합니다.

이를위한 표준 솔루션이 있어야합니다.

이 문제를 해결하는 가장 빠르고 깨끗한 솔루션은 무엇입니까?

솔직한



답변

youatwork@officepc$ autossh -R 12345:localhost:22 notroot@serverpc

후에:

you@homepc$ autossh -L 23456:localhost:12345 notroot@serverpc

you@homepc$ ssh youatwork@localhost -p 23456

수행 할 수있는 작업은 다음과 같습니다. 1 단계에서 원격 PC를 사무실 PC에서 서버로 전달합니다 ( 12345예 : 1024보다 큰 포트가 사용됨). 이제 서버에서 12345에 연결하면 officepc의 포트 22에 연결됩니다.

2 단계에서 포트 23456을 가정용 컴퓨터에서 서버의 12345로 전달하십시오 (1 단계에서 설정 한대로 officepc : 22로 전달됨)

3 단계에서 사무실 PC 로그인으로 로컬 포트 ​​23456에 연결합니다 . 2 단계에서 서버의 포트 12345로 전달되고 1 단계에서 사무실 PC로 전달됩니다.

전달을 위해 autossh를 사용하고 있습니다. 터널이 끊어지면 터널을 자동으로 다시 연결하는 ssh 래퍼입니다. 그러나 연결이 끊어지지 않는 한 정상적인 ssh도 작동합니다.

serverpc에서 localhost : 12345에 연결할 수있는 사람은 이제 officepc : 22에 연결하여 해킹을 시도 할 수 있습니다. (주 당신이 SSH 서버를 실행하는 경우, 당신은 어쨌든 기본적으로에있는 기본적인 보호 위를 확보해야 – 예를 들어 볼 나는 루트 로그인을 비활성화하고 암호 인증을 사용하지 않도록 적어도 추천 )

편집 : 동일한 구성으로 이것을 확인했으며 작동합니다. GatewayPorts no로컬 터널이 아닌 전 세계에 열려있는 포트에만 영향을줍니다. 전달 된 포트는 다음과 같습니다.

homepc:
  outgoing ssh to serverpc:22
  listening localhost:23456 forwarded through ssh tunnel
serverpc:
  listening ssh at *:22
  incoming localhost ssh tunnel (from homepc) forwarded to localhost:12345
  listening localhost ssh tunnel (from officepc) forwarded from localhost:12345
officepc:
  outgoing ssh to serverpc:22
  incoming localhost through ssh tunnel (from serverpc) forwarded to localhost:22

그래서, 지금까지의 네트워크 스택에 관한 한, 그것은 각각의 루프백 인터페이스 (플러스 SSH 연결에 대한 모든 로컬 트래픽의 serverpc는) 따라서 GatewayPorts전혀 확인되지 않습니다.

그러나 지시어가 있습니다 AllowTcpForwarding. 즉 no,이 설정은 루프백 인터페이스를 통하지 않고 전달이 전혀 허용되지 않으므로 실패합니다.

주의 사항 :

  • autossh 최근 SSH를 사용하는 경우, 당신은 SSH의 사용할 수 있습니다 ServerAliveIntervalServerAliveCountMax터널을 유지하기위한합니다. Autossh에는 내장 검사 기능이 있지만 Fedora에 문제가있는 것 같습니다. -M0그것을 비활성화 -oServerAliveInterval=20 -oServerAliveCountMax=3하고 연결이 작동하는지 확인합니다-20 초마다 시도하고 3 번 연속 실패하면 ssh를 중지합니다 (autossh는 새로운 것을 만듭니다).

    autossh -M0 -R 12345:localhost:22 -oServerAliveInterval=20 -oServerAliveCountMax=3 notroot@serverpc
    
    autossh -M0 -L 23456:localhost:12345 -oServerAliveInterval=20 -oServerAliveCountMax=3 notroot@serverpc
    
  • 포워드가 실패하면-ssh 터널을 다시 시작하는 것이 유용 할 수 있습니다 -oExitOnForwardFailure=yes.

  • ~/.ssh/config옵션 및 포트에 사용 하는 것이 좋습니다. 그렇지 않으면 명령 줄이 너무 자세합니다. 예를 들면 다음과 같습니다.

    Host fwdserverpc
        Hostname serverpc
        User notroot
        ServerAliveInterval 20
        ServerAliveCountMax 3
        ExitOnForwardFailure yes
        LocalForward 23456 localhost:12345
    

그런 다음 서버 별명 만 사용할 수 있습니다.

    autossh -M0 fwdserverpc


답변

가정에서 내부 서버로, 내부 서버에서 사무실 Linux 시스템으로 내부 서버로 ssh 할 수있는 경우, 가정에서 ssh ProxyCommand를 사용하여 nc(netcat)을 통해 서버를 통해 내부 시스템으로 자동으로 바운스 할 수 있습니다.

# ~/.ssh/config on your home machine:
Host internalpc
   ForwardAgent yes
   ProxyCommand ssh user@server.example.com exec nc internal.pc.example.com %p

그런 다음 ssh user@internalpc서버 시스템을 통해 자동으로 전달되므로 포트 나 터널을 열 필요가 없습니다.


답변

SSH에 원격으로 액세스하려는 컴퓨터에 Robo-TiTO를 설치하십시오.

  • 그러면 어디서나 Google 토크 클라이언트 앱을 사용하여 SSH에 액세스 할 수 있습니다.
  • 공개 IP 주소 나 특별한 설정이 필요하지 않습니다.
  • 더 이상 응용 프로그램 서비스를 지불하지 않는 무료 및 오픈 소스입니다.
  • SSH 포트를 열 필요가 없습니다 (컴퓨터를 안전하게 유지하십시오).
  • 터널링을 열 필요가 없습니다 (예 : VPN 또는 이와 유사한 것)

사이트가 이동함에 따라 다음 설치 지침은 더 이상 사용되지 않습니다. 새 URL은 https://github.com/formigarafa/robotito입니다.


Raspberry Pi의 Raspbian OS에서 테스트 한 스크립트를 만들었으므로 Robo-TiTO를 Raspberry Pi, Debian 또는 Ubuntu Box (Debian 패키지 배포)에 쉽게 설치할 수 있습니다. 다음은 Linux 상자를 원격으로 가져 오는 단계입니다.

  1. 쉘 명령을 열거 나 터미널이라고 부르고 홈 폴더로 이동하여 명령으로 설치 스크립트 다운로드 :

    $ wget https://opengateway.googlecode.com/files/robotito
    
  2. 그런 다음 command를 입력하여 스크립트를 실행하십시오.

    $ sudo ./robotito
    
  3. credentials.rbGTalk 계정을 사용하여 Robo-TiTO의 구성 폴더에서 파일 을 편집 하고 Ctrl+ X및 을 눌러 파일 을 저장할 수 Y있습니다. 기본값은 nano 편집기를 사용하는 것입니다.

  4. 명령으로 Robo-TiTO 폴더에서 Robo-TiTO 실행

    $ cd robotito
    $ ./jabbershd start
    
  5. 이제 모든 Google 토크 클라이언트에서 SSH를 사용할 수 있습니다. Robo-TiTO GTalk 계정을 Google 토크 계정에 추가하고 계정을 사용하기 전에 서로 채팅하여 테스트해야합니다.


답변

Piskvor의 솔루션은 효과적이고 훌륭합니다. 그러나 로그인 쉘이 걸려있는 상태에서 터미널이 매달려있는 상태를 유지합니다. 별로 시원하지 않습니다.

나는 항상 서버에 연결하고 cron에서 실행하여 연결을 유지하기 위해 작성한이 작은 스크립트를 사용했습니다.

#!/bin/bash
TARGET_HOST=${1:-myserver.example.com}
TARGET_PORT=${2:-7777}
TUNNEL_PORT=${3:-22}
T_USER="odin"

#Check that we have an active connection to the remote system
ACTIVE_PROCESS=`ps -ef | \
    grep "ssh $TARGET_HOST -l $T_USER -R $TARGET_PORT:127.0.0.1:$TUNNEL_PORT" | \
    grep -v grep | \
    wc -l`
if [ $ACTIVE_PROCESS -lt 1 ]; then
    echo "`date` : establishing connection to $TARGET_HOST on port $TARGET_PORT"
    screen -m -d ssh $TARGET_HOST -l $T_USER -R $TARGET_PORT:127.0.0.1:$TUNNEL_PORT > /dev/null
fi

우리는 분리 된 화면과 함께보다 우아한 autossh를 사용하여 Piskvor의 솔루션을 수정하거나 -NT ssh 인수를 사용하여 백그라운드에서 연결을 유지할 수 있습니다.


답변

나에게는 마치 SSH 터널 대신, 외부 서버를 사용하여 Hamachi 와 같은 프록시를 통해 작동하는 VPN 인 VPN을 사용해보십시오 . 이와 같은 다른 무료 소프트웨어가 있지만 Hamachi가 가장 좋습니다.


답변