삽질

[삽질] 네트워크 이슈인줄 알았던 공유기 설정 문제 해결

mayhun28 2024. 12. 10. 21:51

네트워크 이슈인줄 알았던 삽질에 대해 블로그를 써보려 한다!

우리 회사의 경우 규모가 작고, 특이한 구조를 갖고 있다고 생각이 들며 일반적인 상황은 아닐것 같지만 새롭게 알게된 내용에 대해 포스팅을 해보려한다.

1. 구성

우리 회사는 서버에 대해 외부 접속을 엄격하게 한다.(당연한 이야기다.) 하지만 이런 인프라에 대한 전문가는 따로 없고 해볼수 있는 것은 공유기 설정, 방화벽 설정 뿐이었다.

 

인터넷 회선 -> 공유기 -> 스위치 허브 -> 13대의 머신으로 연결 되어있고, 간단히는 아래와 같은 느낌이다.

 

 

2. 공유기 설정

iptime 설정

iptime 공유기를 사용하고 있고, 인터넷 사용제한 기능을 통해 사용하는 포트는 허용, 이외에 모든 IP 에 대해 40000포트 까지 차단을 해두었다. 

공유기에서 설정한 이유는 사실 머신 마다 firewall-cmd 를 통해 방화벽을 세팅해두었지만, 변경사항이 있을때마다 13대의 설정은 변경 하는것이 번거로워 맨 앞인 공유기에서 처리를 하면 좋겠다고 생각하여 설정해두었다.(물론 내가 설정하지는 않음)

 

3. 이슈 발생

해당 머신중 일부는 특정 페이지를 주기적으로 크롤링을 하는데 어느날은 되었다가, 어느날은 안되었다가 점점 수집이 안되고 있었다. 이후 다른 프로젝트 도커 빌드 중 pip install에서 timeout이 나고 있었다.

 

이때까지만 해도 네트워크의 문제인줄 알았다. 아니 그렇게 믿고 싶었다.

인터넷 기사님이 방문하여 윈도우 노트북으로 속도체크를 한결과... 이상없이 잘 나오고 있었다.. 당시엔 절망적이었다..

 

페이지 크롤링에서 requests를 사용하기 때문에 혹시나 포트 설정 문제일까 했다. 

 

아래 명령어를 통해 파이썬에서 사용하는 포트 모니터링을 하였고, python 스크립트로 requests를 요청 하며 모니터링을 하였다.

watch -n 1 "ss -tanp | grep python"

 

결과

 

52102 포트..? 예상하지 못했다. 관련 정보가 부족 하여 만능 GPT에게 물어봤다.

 

GPT 답변

 

GPT는 Python과 Linux가 에페멀 포트(Ephemeral Port)라는 동적 포트를 사용한다는 점을 알려주었다.

Ubuntu의 에페멀 포트 기본 범위는 32768 ~ 60999 이라고 한다.

 

즉, 40000번까지 차단을 해두었고 동적으로 포트 변경을 하며, 당시 요청이 많으면 사용하는 포트가 40000번이 넘어가 수집이 되고, 요청이 적으면 40000번 이내로 들어와 차단이 되어 수집을 할수 없던 상황이었다.

 

4. 해결 방법

해결 방법으론 2가지가 있다.

  • 공유기 설정에서 외부 ip에 대해 포트 차단 범위 조정
  • Ubuntu 에페멀 포트 범위 지정

Ubuntu 에퍼멀 포트 범위 변경

echo "40000 60999" > /proc/sys/net/ipv4/ip_local_port_range
sysctl -p

 

5. 결론

브라우저는 기본적으로 80번443번 포트를 사용하기 때문에 영향을 받지 않았지만, Python과 Docker는 에페멀 포트를 사용해 네트워크 요청을 처리하기 때문에 문제가 발생했다.

단순히 네트워크 속도 문제가 아닌, 포트 차단 설정과 Linux 네트워크 동작 방식의 차이에서 생긴 문제였다.

 

규모가 있는 회사라면 클라우드를 사용하거나, 보안 인프라가 잘 되어있을것이라고 생각한다. 우리 회사의 경우가 좀 특별 하다고 생각한다. 일반적으로 있을만한 일은 아니라고 생각이 들지만, 혹시나 우리 회사와 비슷한 경우가 있다면 도움이 되길 바란다.