Computer >> 컴퓨터 >  >> 체계 >> Linux

역 SSH 터널을 사용하여 PC에 대한 외부 연결을 허용하는 방법

역 SSH 터널을 사용하여 PC에 대한 외부 연결을 허용하는 방법

인터넷 서비스 제공업체(ISP)가 전용 IP 주소를 제공하는 운이 좋다면 라우터에 몇 가지 포트 전달 규칙을 추가하여 홈 서버를 설정하고 인터넷에서 사용할 수 있도록 할 수 있습니다. 그러나 ISP가 해당 IP를 이웃과 공유하도록 하면 포트 포워딩이 도움이 되지 않습니다. 다른 공급자는 방화벽 규칙을 통해 들어오는 연결을 차단합니다.

가상 사설 서버를 사용하면 이러한 모든 제한을 우회할 수 있습니다. RAM이 512MB 미만인 경우에도 네트워크 트래픽을 리디렉션하기만 하면 되므로 모든 것이 작동합니다. 이것은 CPU와 RAM에서 매우 가볍습니다. 서버는 들어오는 연결을 수신하고 '역 SSH 터널'을 통해 컴퓨터로 리디렉션합니다. 이렇게 하면 매우 적은 월 비용으로 모든 종류의 홈 서버를 설정할 수 있습니다.

파일을 업로드/동기화하기 위해 NextCloud 서버를 생성한다고 상상해 보십시오. 해당 파일을 홈 서버에 보관할 수 있는 개인 정보를 얻은 다음 6TB 하드 드라이브를 구입하여 필요한 모든 공간을 확보할 수 있습니다. 가상 사설 서버의 경우 월 전기 요금과 월 5달러 미만만 지불하면 됩니다. 6TB의 공간이 있는 서버의 월간 청구서보다 훨씬 저렴합니다.

참고 :이것은 TCP 네트워크 트래픽을 리디렉션할 때만 작동합니다. TCP는 웹 서버(포트 80/tcp)와 같은 것들에서 사용됩니다. UDP는 Counter Strike(포트 27015/UDP)와 같은 일부(전부는 아님) 게임 서버에서 사용됩니다. UDP 터널링이 가능하지만 일부 "해킹"이 있으므로 향후 자습서의 주제가 될 수 있습니다.

Windows 10에는 이제 SSH 클라이언트가 내장되어 있습니다.

SSH 연결을 시작하기 위해 더 이상 PuTTY를 사용할 필요가 없습니다. 사실, 이 튜토리얼에서는 실제로 이 내장 클라이언트를 사용하여 터널을 설정할 것입니다. 아직 익숙하지 않다면 Windows 10의 OpenSSH 클라이언트에 대한 가이드를 읽어보세요.

터널 연결을 위한 가상 사설 서버 준비

DigitalOcean, Linode, Vultr 또는 기타 선호하는 것과 같이 선호하는 공급자와 함께 가상 사설 서버를 만드십시오. 가장 중요한 것은 네트워크 대기 시간을 최소화하기 위해 가능한 한 가까운 서버 위치를 선택하는 것입니다. 더 안전하므로 가급적 SSH 키를 사용하여 루트 계정에 직접 로그인할 수 있는 방식으로 서버를 설정하십시오. 이는 서버가 1024 미만의 포트(소위 권한 있는 포트)에서 들어오는 연결을 수신하도록 하려는 경우에 필요합니다.

명령 프롬프트(Linux의 경우 터미널)를 열고 SSH를 통해 서버에 로그인합니다.

OpenSSH 서버 설정 수정:

nano /etc/ssh/sshd_config

루트로 로그인하지 않고 일반 사용자로 로그인했다면 이 명령을 사용해야 합니다. 그렇지 않으면 파일을 저장할 수 없습니다:

sudo nano /etc/ssh/sshd_config

"GatewayPorts"라는 변수를 찾을 때까지 아래로 스크롤합니다. 행은 다음과 같을 수 있습니다. #GatewayPorts no . 앞의 "#"(주석 제거)을 삭제하고 줄을 GatewayPorts yes로 변경합니다. .

역 SSH 터널을 사용하여 PC에 대한 외부 연결을 허용하는 방법

줄을 찾을 수 없으면 끝까지 아래로 스크롤하여 직접 줄을 추가하세요.

GatewayPorts yes

Ctrl 누르기 + X 를 누른 다음 y를 누릅니다. , 그리고 마지막으로 Enter 키를 눌러 파일을 저장합니다.

SSH 데몬을 다시 로드하여 새 설정을 선택합니다.

systemctl reload ssh.service

SSH 세션을 종료합니다.

exit

역 SSH 터널을 설정하는 방법

명령 매개변수는 Linux, Windows 및 BSD 운영 체제에서도 동일합니다. 일반 구문은 다음과 같습니다.

ssh -R remote_port:host:localport your_username@IP-of-server
  • remote_port 해당 포트로 오는 연결을 리디렉션하도록 서버에 지시합니다.
  • host 연결이 리디렉션되어야 하는 IP 주소의 서버를 알려줍니다. 127.0.0.1 여기에서 자신의 컴퓨터로 리디렉션하는 데 사용됩니다.
  • localport 어떤 포트 데이터 패킷이 리디렉션되어야 하는지 지시합니다. 여기에 로컬 컴퓨터에 설치된 애플리케이션이 수신하는 포트 번호를 입력해야 합니다.

예를 들어, 포트 80에서 들어오는 모든 연결(서버로)을 전달하고 로컬 컴퓨터의 포트 8080으로 보내려면 다음 명령을 사용합니다.

ssh -R 80:127.0.0.1:8080 [email protected]

이것은 로컬 시스템의 포트 8080에서 수신 대기하는 Apache 또는 Nginx와 같은 웹 서버가 있다고 가정합니다. 하지만 Apache/Nginx가 기본 포트 80에서 수신 대기 중이라면 이전 명령에서 동일한 포트를 두 번 사용해도 문제가 없습니다(다른 서버의 포트 80을 참조하기 때문입니다).

ssh -R 80:127.0.0.1:80 [email protected]

이 시점에서 누군가가 브라우저의 주소 표시줄에 가상 사설 서버의 IP 주소를 입력하면 해당 연결이 리디렉션되어 로컬 컴퓨터에서 서비스를 제공합니다.

역 SSH 터널을 사용하여 PC에 대한 외부 연결을 허용하는 방법

위 그림에서는 기본적으로 포트 8887에서 수신 대기하는 간단한 Chrome용 웹 서버를 사용했습니다. 이 설정은 그림과 같이 앱을 설치한 다음 명령을 사용하여 직접 시도할 수 있습니다.

터널을 활성 상태로 유지하려면 SSH 세션이 활성 상태를 유지해야 합니다. 터널을 닫으려면 exit를 입력하세요. 터미널/명령 프롬프트 창에서

결론

보시다시피 역 SSH 터널을 만드는 것은 어렵지 않지만 웹 사이트를 보호하는 것은 어렵습니다. 따라서 로컬 NextCloud 서버와 같은 아이디어를 구현하기로 선택한 경우 최소한 가상 머신에서 격리하십시오. 이렇게 하면 웹사이트가 손상되더라도 최소한 나머지 운영 체제는 손상되지 않습니다.

그리고 ... 손실 위험을 감수하고 싶지 않은 것은 항상 백업하십시오!