왜 127.0.0.1로 내 서버 접근이 안될까?

ansunny1170·2024년 8월 2일
0

개발

목록 보기
15/15

시작하는 말

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 호스트와는 다른 별도의 네트워크 주소 공간을 가지고 있기 때문에 이에 대한 추가 설정이 필요합니다. 아래 단계를 따라 해보시기 바랍니다:

1. 서버 바인딩 주소 확인

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');

이렇게 하면 모든 네트워크 인터페이스를 통해 서버에 접근할 수 있습니다.

시도했으나 실패했습니다.

2. Windows 방화벽 설정

Windows 방화벽이 해당 포트(3000)로의 접근을 차단하고 있을 수 있습니다. 방화벽 설정에서 해당 포트를 허용하도록 설정해야 합니다. 다음 단계로 Windows 방화벽에서 포트 3000을 허용해 보세요:

  • 검색창에 "방화벽"을 입력하고 "Windows Defender 방화벽"을 열기
  • "고급 설정" 클릭
  • "인바운드 규칙"을 클릭한 다음 "새 규칙" 클릭
  • "포트" 선택 후 "다음"을 클릭
  • "TCP" 선택하고 "특정 로컬 포트"에 "3000" 입력 후 "다음"을 클릭
  • "연결 허용"을 선택하고 계속해서 "다음" 클릭
  • 모든 프로필을 선택하고 "다음"
  • 규칙에 이름을 붙이고 "마침" 클릭

    시도했으나 실패했습니다.

3. WSL2 네트워크 문제 해결

WSL2는 Windows 호스트와 독립적인 IP를 사용합니다. Windows에서 WSL2 인스턴스의 IP 주소를 알아내려면 WSL 터미널에서 ip addr 명령을 실행하고, 이더넷 인터페이스(보통 eth0)의 inet 항목을 찾아 IP 주소를 확인합니다. 이 IP 주소를 사용해 접근해보세요.

ip addr show eth0

성공했습니다.

4. 포트 포워딩 설정 확인

WSL2에서는 자동으로 포트 포워딩이 설정되어야 합니다. 혹시 문제가 있으면, Windows PowerShell에서 다음과 같이 WSL2 인스턴스를 종료하고 다시 시작하여 네트워크 설정을 초기화할 수 있습니다:

wsl --shutdown

이후 WSL2를 다시 시작하면 네트워크 설정이 초기화됩니다.

위 단계들을 모두 시도한 후에도 문제가 해결되지 않는다면, 네트워크 구성, 추가적인 방화벽 설정, 또는 WSL2의 버전과 설정을 점검해야 할 수도 있습니다.

이것도 시도해봐야 합니다. 만 현재는 잘시간도 부족하니 개인 개발 부채로 남겨봅니다..

5. 블로그 탐방

참고 블로그
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로는 접근이 여전히 안됩니다.

마치는 말

제가 물어봐야만 대답하는 동료이나 너무나도 믿음직스러운 전우입니다. 여유가 된다면 바인딩을 제대로 세팅하여 근본 원인을 해결하는 포스트를 써보겠습니다.

profile
공정 설비 개발/연구원에서 웹 서비스 개발자로 경력 이전하였습니다. Node.js 백엔드 기반 풀스택 개발자를 목표로 하고 있습니다.

0개의 댓글