yon11b

wsl와 연결한 포트포워딩 본문

개발/웹개발

wsl와 연결한 포트포워딩

yon11b 2021. 12. 23. 20:26
반응형

wsl에서 돌아가는 서버를 외부에서 접속하게 하고 싶다면 기본 포트포워딩 과정+추가적인 작업이 필요하다.

 

외부>공유기1>공유기2>wsl>웹 서버

이런 구조일 것이다.

 

메모장을 켜고 다음 코드를 복붙하자.

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {   
  $arguments = "& '" + $myinvocation.mycommand.definition + "'"
  Start-Process powershell -Verb runAs -ArgumentList $arguments
  Break
}

$remoteport = bash.exe -c "ifconfig eth0 | grep 'inet '"
$found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';

if ( $found ) {
  $remoteport = $matches[0];
}
else {
  Write-Output "The Script Exited, the ip address of WSL 2 cannot be found";
  exit;
}

$ports = @(열고싶은포트);

Invoke-Expression "netsh interface portproxy reset";

for ( $i = 0; $i -lt $ports.length; $i++ ) {
  $port = $ports[$i];
  Invoke-Expression "netsh interface portproxy add v4tov4 listenport=$port connectport=$port connectaddress=$remoteport";
}

Invoke-Expression "netsh interface portproxy show v4tov4";

열고싶은포트에는 22,80 을 입력하자.

(22번: wsl포트) 

 

여기에는 22,80번 포트 두 개 다 써야 하지만, 방화벽 설정할 때는 22번은 안 해주고 80번만 해주어도 된다.

왜냐하면 방화벽은 외부<->공유기1 사이를 가로 막는 벽이기 때문이다. (외부<->공유기1은 80번 포트로 통신한다!)

 

메모장에 입력된 내용을 저장한다. 이때 이름은 wsl.ps1로 한다. 저장경로를 잘 기억해두자.

window powershell을 오른쪽 버튼을 눌러서 관리자 권한으로 실행시킨 다음 wsl.ps1이 저장된 경로로 가서 실행시켜주자.

경로 이동은 cd 명령어를, 실행은 .\wsl.ps1 하고 엔터치면 된다.

powershell 화면

그럼 이렇게 뜰 것이다.

 

이제 외부에서 공인ip주소로 접속해보자!!

 

 

+참고로 포트가 잘 열려있는지 확인하고 싶다면

https://lamanus.kr/ports

여기서 할 수 있다.

 

++포트를 닫고 싶다면?

  • 방화벽 새규칙 추가한 거 삭제
  • wsl.ps1에서 port에 80,22 적었던 거=> 빈칸으로 두기
  • 공유기 설정에서 포트 80번으로 열어둔 거 삭제

 

728x90

'개발 > 웹개발' 카테고리의 다른 글

Nginx, Uwsgi, Django 연결하기  (0) 2021.12.24
Django 프로젝트 생성 및 애플리케이션 생성  (1) 2021.12.23
공유기 2대일때 포트포워딩하기  (0) 2021.12.23
포트포워딩하기  (0) 2021.12.23
포트포워딩이란?  (0) 2021.12.23