Local Port Forwarding이라는 기술이 있는데
우리가 흔히 말하는 포트포워딩에는 Local , Remote , Dynamic이 있다.
이번에 회사에서 다른 회사 서버로 배포작업을 하였는데
대상 포트가 방화벽에 의해 닫혀있어 접속할 수 없었다.
이럴때 열려있는 포트를 대상으로해서 포트 포워딩을 할 수 있다.
출처
https://deep-jin.tistory.com/entry/SSH-로컬-포트-포워딩-SSH-터널링
ssh -L <로컬 포트>:<원격 서버 주소>:<원격 서버 포트> <SSH 서버>
이런식으로 된다는 걸 이해할 수 있다.
Chat Gpt를 통해 옵션에 대해 알아봤더니 다음 내용을 정리해 줬는데
- L [bind_address:]port:host:hostport
- 예: ssh -L 8080:internal.example.com:80 user@sshserver로컬 8080 포트 접근 시 internal.example.com:80을 통해 응답을 전달.
- 로컬 포트 포워딩(Local Port Forwarding): 로컬(클라이언트)의 특정 포트로 들어오는 연결을 SSH 터널을 통해 원격 호스트와 포트로 전달합니다.
- R [bind_address:]port:host:hostport
- 예: ssh -R 9000:localhost:8080 user@sshserver원격 서버의 9000 포트 접근 시 실제로 클라이언트의 8080 포트로 요청이 전달됩니다.
- 원격 포트 포워딩(Remote Port Forwarding): 원격(서버) 측의 특정 포트로 접근하는 요청을 SSH 클라이언트 쪽으로 전달합니다. 즉, 서버 쪽에서 열리는 포트를 통해 클라이언트 호스트나 내부 네트워크의 자원에 접근할 수 있습니다.
- D [bind_address:]port
- 예: ssh -D 1080 user@sshserver로컬 1080 포트에 SOCKS5 프록시가 열리며, 이를 이용해 SSH 서버를 경유한 다양한 호스트로의 접근이 가능합니다.
- 동적 포트 포워딩(Dynamic Port Forwarding): SOCKS 프록시를 생성하는 옵션으로, 로컬 머신에서 지정한 포트에 SOCKS5 프록시 서버를 열어줍니다. 이렇게 생성된 SOCKS 프록시를 통해 다양한 목적지로 트래픽을 라우팅할 수 있습니다.
- N: 원격 명령을 실행하지 않고 단순 포트 포워딩만 수행합니다. 포트 포워딩용 SSH 세션을 열 때 자주 사용됩니다.
- 예: ssh -N -L 8080:internal.example.com:80 user@sshserverSSH 세션에서 원격 쉘은 열리지 않고 포워딩만 유지.
- f: SSH 클라이언트를 background 모드로 실행합니다. 포트 포워딩을 백그라운드에서 유지할 때 유용합니다.
- 예: ssh -f -N -L 8080:internal.example.com:80 user@sshserver백그라운드로 포워딩 유지.
- g: 로컬 포트 포워딩 시 로컬 호스트뿐만 아니라 외부 호스트에서도 해당 로컬 포트에 접근할 수 있게 해줍니다.
- 예: ssh -g -L 8080:internal.example.com:80 user@sshserver다른 네트워크 컴퓨터에서도 내공인IP:8080을 통해 내부 서버 접근 가능.
L ,R , F는 해봤고 , G는 처음보는데 이런 방법으로 외부 원격접속을 시켜줄 수 도 있겠다는 생각이 들었다.
어쨌든 동작은 다음과 같은데
동작 방식:
로컬 포트 포워딩은 다음과 같이 작동합니다.
- 로컬 머신에서 특정 포트(예: 8080)에 접속하면, SSH를 통해 설정한 터널을 통해 원격 서버의 특정 포트(예: 원격 서버의 80번 포트)에 요청이 전달됩니다.
- 즉, localhost:8080에 접속하면 실제로는 SSH 서버를 거쳐 원격 서버:80에 접속하는 것과 동일해집니다.
- 이 과정을 통해 방화벽 뒤에 있거나 직접 접근하기 어려운 원격 서버의 서비스에 안전하게 로컬에서 접근할 수 있습니다.
위에서 간략하게 설명한것처럼 8080이라면 SSH를 (예로 22) 통해 우회 접속하는 걸 말한다.
'Linux' 카테고리의 다른 글
ZSH 설치해서 꾸미기 (0) | 2024.12.12 |
---|---|
ChMod 이해하기 (0) | 2024.12.08 |
docker logs 옵션확인하기 (0) | 2024.12.03 |
cent os java 다양한 버전 사용법 (0) | 2024.12.03 |
crontab의 설정한 값 복사하기 (0) | 2024.07.02 |