windows11환경에서 wsl2를 사용해 ubuntu os에서 개발을 하고 있습니다.
새 컴퓨터를 사용하다가 localhost가 아닌 ip값으로 호출해야 할 일이 생겨 시도하였는데, 127.0.0.1 또는 라우터 ip 로도 접근이 불가능했습니다.
떠오르는 이유는 ubuntu server로 바인딩이 안되어 있거나, 방화벽의 문제 혹은 저도 모르는 이유가 있을 것이라 생각했습니다. 그래서 요즘 가장 친하게 협업하는 동료에게 문의하였습니다.
openAI에게 문의했습니다. 차례대로 시도해봅니다.
WSL2에서 Nest.js 서버를 구동할 때, localhost
로는 접근이 가능하지만 127.0.0.1
이나 LAN IP로는 접근할 수 없는 경우, 몇 가지 설정을 점검해야 합니다. WSL2는 기본적으로 Windows 호스트와는 다른 별도의 네트워크 주소 공간을 가지고 있기 때문에 이에 대한 추가 설정이 필요합니다. 아래 단계를 따라 해보시기 바랍니다:
Nest.js(또는 사용 중인 Node.js 프레임워크)에서 서버가 localhost
(127.0.0.1)에만 바인딩 되어 있지 않고, 모든 인터페이스를 통해 접근 가능하도록 설정되어 있는지 확인해야 합니다. 이는 서버를 0.0.0.0
주소에 바인딩함으로써 해결할 수 있습니다. 코드에서 서버 설정 부분을 찾아 다음과 같이 수정하세요:
const app = await NestFactory.create(AppModule);
await app.listen(3000, '0.0.0.0');
이렇게 하면 모든 네트워크 인터페이스를 통해 서버에 접근할 수 있습니다.
시도했으나 실패했습니다.
Windows 방화벽이 해당 포트(3000)로의 접근을 차단하고 있을 수 있습니다. 방화벽 설정에서 해당 포트를 허용하도록 설정해야 합니다. 다음 단계로 Windows 방화벽에서 포트 3000을 허용해 보세요:
시도했으나 실패했습니다.
WSL2는 Windows 호스트와 독립적인 IP를 사용합니다. Windows에서 WSL2 인스턴스의 IP 주소를 알아내려면 WSL 터미널에서 ip addr
명령을 실행하고, 이더넷 인터페이스(보통 eth0
)의 inet
항목을 찾아 IP 주소를 확인합니다. 이 IP 주소를 사용해 접근해보세요.
ip addr show eth0
성공했습니다.
WSL2에서는 자동으로 포트 포워딩이 설정되어야 합니다. 혹시 문제가 있으면, Windows PowerShell에서 다음과 같이 WSL2 인스턴스를 종료하고 다시 시작하여 네트워크 설정을 초기화할 수 있습니다:
wsl --shutdown
이후 WSL2를 다시 시작하면 네트워크 설정이 초기화됩니다.
위 단계들을 모두 시도한 후에도 문제가 해결되지 않는다면, 네트워크 구성, 추가적인 방화벽 설정, 또는 WSL2의 버전과 설정을 점검해야 할 수도 있습니다.
이것도 시도해봐야 합니다. 만 현재는 잘시간도 부족하니 개인 개발 부채로 남겨봅니다..
참고 블로그
https://arcticwillow.tistory.com/4
https://blog.aaronroh.org/118
windows powershell에 입력합니다.
netsh interface portproxy add v4tov4 listenport=3000 listenaddress='0.0.0.0' connectport=3000 connectaddress=172.30.127.64
127.0.0.1 로 접근은 가능하나 라우터ip로는 접근이 여전히 안됩니다.
제가 물어봐야만 대답하는 동료이나 너무나도 믿음직스러운 전우입니다. 여유가 된다면 바인딩을 제대로 세팅하여 근본 원인을 해결하는 포스트를 써보겠습니다.