[WSL2] 포트포워딩과 window에서 workbench로 접속하기

WSL2를 이용하여 개발을 진행서 외부에서 접근하고 싶거나, 배포를 위해 접근하고 싶을 수가 있는데, 문제가 되는 것이 WSL2는 VM과 같은 환경이라 별도의 IP를 갖는다는 점이다.

그러면 포트포워딩을 하면 되지 않느냐라고 할 수 있는데 맞다 포트포워딩을 하면된다 하지만 재부팅을 할때마다 변경되는 IP에 매번 포트 포워딩을 할 수 없는 노릇이기에 Powershell 파일을 이용하여 재부팅마다 wsl2의 ip를 잡아 특정 포트를 포트포워딩 하는 방법을 남기려고 한다.



1. 사용자 생성

모든 db,table에 접근 가능한 root권한을 가진 사용자로 외부에서 db를 접근하는 것은 위험한 일일 수 있으니 외부에서 접근하고자 하는 db만 접근권한을 가진 사용자를 생성하여 이를 이용해 접근하자.

create user 사용자이름@'ip주소' identified by '비밀번호';

위와 같이 create user명령어를 이용하여 외부에서 접근할 사용자를 생성하자

create user gowoonso@'%' identified by '1234';

나는 위와 같이 입력하여 예제 사용자를 만들었고 ‘%‘는 모든 외부 ip접속을 허용한다는 뜻이고 특정 ip에서만 접속하려면 ip주소를 입력해주면 된다.

alter-text

사진과 같이 mysql에 user가 추가된 것을 볼 수 있다.



2. 접근 권한 부여

grant all privieges on DB이름.테이블이름 to 사용자이름@'ip주소';

위와 같이 grant 명령어를 이용해 특정 db와 테이블이름에 접근 권한을 부여하자.

grant all privileges on earn_points_web.* to gowoonso@'%';

나는 earn_points_web이라는 db의 모든 테이블(*)을 아까만든 gowoonso@’%’ 의 사용자에게 접근권한을 부여했다.

all privileges대신에 select,insert,update을 사용하여 특정 명령어에 대해서만 접근 권한을 부여할 수 도 있고, 모든 db에 대한 접근권한을 부여하고자 한다면 테이블명.* 대신 *.*을 이용하면 된다.

alter-text
grant



3. PowerShell명령 이용하여 포트포워딩

쉘 스크립트를 이용하여 Powershell파일을 작성해 재부팅시마다 자동으로 이 파일을 실행시키도록 할 것이다.

파일은 Reference를 참조하였습니다.

$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{
  echo "The Script Exited, the ip address of WSL 2 cannot be found";
  exit;
}

#[Ports]
#All the ports you want to forward separated by coma
$ports=@(22,80,3306,10000,3000,5000);

#[Static ip]
#You can change the addr to your ip config to listen to a specific address
$addr='0.0.0.0';
$ports_a = $ports -join ",";

#Remove Firewall Exception Rules
iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' ";

#adding Exception Rules for inbound and outbound Rules
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Outbound -LocalPort $ports_a -Action Allow -Protocol TCP";
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Inbound -LocalPort $ports_a -Action Allow -Protocol TCP";

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

위 파일에서 중간에 $ports=@(22,80,3307,10000,3000,5000); 안에 port forwarding할 포트번호를 넣어주면 된다.

위 파일을 컴퓨터를 재부팅시마다 실행시키도록 설정해야하는 데 이는 앞에 작성한 글 에 비슷한 내용의 설명이 있기 때문에 생략하겠다.

재부팅을 하면 파일이 실행되고 포트포워딩이 자동으로 설정되어 wsl2의 ip주소로 외부에서 접근하면 접근이 가능할 것이다.



4. wsl2 mysql을 window에서 workbench로 접속

처음에 wsl2의 mysql에서 사용자를 localhost로 만들어 window에서 접근하려고 하니 서로 별도의 이더넷으로 분리되어 있기 때문에 localhost로 접속이 불가능했다.

https://gowoonsori.comimages/settings/port-forwarding/error.PNG does not exist

사용자를 ‘%‘로 만들어 wsl2의 ip로 접근을 하면 window의 workbench에서 접근이 가능하다.

alter-text
success

wsl에서 mysql포트번호를 3306그대로 이용할 시 window의 mysql포트번호가 3306이라면 충돌이 일어나기때문에 ifconfig로 ip확인후 접속해야 한다.

하지만 이러면 매번 ip를 입력하는게 귀찮기 때문에 wsl이나 window의 mysql의 포트번호를 바꿔 사용하면 간단하게 해결이된다.

나는 wsl의 mysql의 포트번호를 3307로 하고 3307을 포트포워딩 설정을 해주었는데 그러면 window에서도 localhost:3307로 접속을 하면 잘 접속이되는 것을 볼 수 있다.

alter-text
success2




Reference

https://github.com/microsoft/WSL/issues/4150

Related Posts

AA Tree

AA Tree

RB-Tree를 응용한 트리로 RB-Tree의 많은 조건을 일부 제거하여 구현을 더 간단하게 만든 트리로 균형을 맞추기 위해 레벨의 개념을 사용한 트리이다. 부모와 레벨이 같은 자식 노드의 연결을 수평 링크라고 하며, 이 노드를 구분하기 위해 RED라는 개념을 이용한다. 1. 특징 왼쪽 자식은 RED가 될 수 없다. 연속으로 RED가 올 수 없다. (이중 RED...

Read More
모듈과 패키지

모듈과 패키지

1. 모듈의 변천과정 Go 1.11 이전 : 모듈 존재 X Go 1.11 : 모듈이 소개되었지만 미완성 Go 1.13 : 모듈 완성 Go 1.16 : 모듈이 이제 기본이 되었다. 1) 모듈 모듈은 패키지의 모음 2) 패키지 패키지는 코드를 묶는 단위로 모든 코드는 반드시 패키지로 묶여야 한다. 우리가 흔히 부르는 프로그램은 다양한 관점에서 의미를 해석할수 있을 텐데 실핼파일 관점에서보면 실행시작 지점을 포...

Read More
[SPSP] Bellman Ford 알고리즘

[SPSP] Bellman Ford 알고리즘

그래프 중에서 최단 경로를 찾는 알고리즘중에 하나로 하나의 정점에서 다른 모든 정점까지의 최단경로를 구하는 알고리즘 (single-source shortest path algorithmm)으로 음의 가중치도 계산 할수 있는 알고리즘이다. Vertex의 개수가 N개일 때, 한 vertex에서 다른 vertex까지 가는데 거치는 edge수는 최소 1개부터 최대 N-1번 거치게 된다. 이...

Read More