iptime 공유기 포트 포워딩 설정

노하람·2022년 1월 25일
2

구동중인 클러스터의 서비스를 외부 네트워크에 공개하기 위해 공유기 설정을 만져보려고 합니다.

공유기로 포트 포워딩

  1. iptime 공유기 설정 페이지 접속
    • 192.168.0.1
  2. 로그인 후 관리 - 고급 설정 - 네트워크 관리 - DHCP 서버 설정으로 들어갑니다.
    • 내 아이피를 확인합니다. 192.168.0.236
  3. 고급설정 - NAT/라우터 관리 - 포트포워드 설정
    • 접근할 내부 IP와, 외부에서 접속할 포트, 내부로 연결될 포트를 설정합니다.
    • 외부(175.209.x.x):<포트>로 접속했을 때 포워딩 될 내부IP:<포트>를 설정하는 겁니다.
  4. DMZ 설정
    • DMZ는 외부IP:모든 포트로 접속했을 때 내부IP로 접속되도록 모든 포트를 개방하는 것입니다.
    • 단 보안에 취약하니 가능하면 사용하지 마시고, 포트 포워드로 하나씩 개방하는 걸 추천드립니다.

SSH로 포트 포워딩

  1. ssh로 시도

공유기를 통하지 않고 ssh로 Local port forwarding, Remote port forwarding, Dynamic port forwarding이 가능합니다.

  • 내부망에서 사용할 목적일 경우 유용합니다. 이 방법은 외부에서 공용IP로 접속하는 방법이 아닙니다.

제가 현재 로컬 포트 포워드만 사용할 계획이기 때문에 로컬 포트 포워딩을 기준으로 설명드리겠습니다.

  • SSH 터널링 명령어 : ssh -L [로컬에서 사용할 포트]:[최종 접근할 목적지] [SSH 서버 주소]
  • 예) ssh -L 2464:192.168.49.2:80 sysadmin@192.168.0.8
    - 현재 내 로컬에서 localhost:2464로 요청할건데, ssh로 접근할 서버는 sysadmin@192.168.0.8(내 리눅스 서버)이고 최종 접근할 목적지는 192.168.49.2:80(리눅스 내 VM 클러스터 내 서비스의 external-ip)야.
    • 내가 위의 명령어를 터미널에 입력하면 ssh 서버 주소로 접속해주고, 그 이후부터는 내 로컬에서 브라우저에 localhost:2464를 입력하면 192.168.49.2:80으로 포워딩해줘.

Kubeflow를 ssh로 포트 포워딩했을 때 이슈

  1. localhost로 접근은 가능하지만 pipeline, run 등이 unhealth 상태입니다.(정상 접근안됌)
    • 목록을 볼 수도, 파이프라인을 업로드할 수도 없습니다.
    • ssh -L 포워딩 시에 내부IP에 192.168.49.2:80포트로 접근할 것을 지시했는데, 192.168.49.2:*에 붙은 다양한 서비스로 연결되지 않는 것이 문제라고 생각했습니다.
  2. minikube에서 pods 상태를 살펴보니 minio와 ml-pipeline에 오류가 발생했습니다.
    • ml-pipeline은 minio를 불러올 수 없어서 발생한 연쇄 오류였습니다.
    • minio는 dial tcp connect connection refused 오류가 발생했습니다.
    • 시도 1 : minikube stop, minikube start : 미니쿠버 재시작
      minikube를 재시작하니 해결되었습니다!

추가 : 서버 외부에서 ip에 어떻게 접근해야할까?

현재 서비스는 192.168.49.2(external-ip)를 통해서 서비스 중이다.(minikube tunnel 사용)
서버 내에서는 routeR3에 등록해놓은 것처럼 kubeflow2.rndfk.com으로 접근하면 192.168.49.2로 연결되어 접근할 수 있다.(그러니까 minikube를 구축한 서버 및 클러스터에서는 작동한다고 보면 되겠다.)

  1. 내 공유기 ip의 포트가 열려있는지 확인하자.
  2. 포트를 열어야 할 IP와 포트번호가 뭔지 정확히 알아야한다.
    • 일단 서비스 관점에서 내 서비스는 192.158.49.2로 접속하고, 30247 포트로 접속하면 80포트로 포트포워딩된다.
    • (서버에서)위의 external-ip로 접근하면 원하는 페이지를 얻어오는게 확인되지만 공유기 ip로는 불가능하다는 것을 확인했다.
    • (같은 서브넷 내에서)같은 공유기를 사용하는 내 MAC에서 external-ip로 접근해도 접근이 불가능하다. 혹시 몰라서 MAC에서 external-ip의 포트를 확인해봤지만 80, 30247 모두 닫혀있다는 것을 알 수 있었다.
      - curl -v로 접근했을 때 Trying이 오래 지속되고 실패하는 것은 방화벽이 열리지 않은 경우라고 한다.

    • 특정 포트 열기 참고
  3. 이런 방식으로 포트를 열고 서비스하는게 정식적인 방법이겠지만, 아직 헷갈리는 부분이 있어서 잠시 중단합니다.

남은 궁금증

  1. 외부IP로 내부IP(특정 내부 서버)로 접근하는 것은 iptime의 포트포워딩 설정으로 가능하다.
    • 예를 들어 외부ip:12345 포트로 접속하면 내부특정ip:80 포트로 포워딩하는 것이 가능
  2. 내부IP에서 클러스터 내부IP로 접근하는 것은 ssh 포트포워딩으로 가능하다.
    • 예를 들어 localhost:1234로 192.168.0.8 서버의 192.168.49.2:80 서비스로 접근할 수 있다.
    • 여기서 서버의 서비스는 쿠버네티스 클러스터 내에서 external-ip로 제공되는 서비스이다.
  3. 그럼 외부ip로 접속했을 때 서버 내부로, 서버 내부에서 클러스터 내부 서비스로 연결하는 것은 어떻게 하는가?
profile
MLOps, MLE 직무로 일하고 있습니다😍

0개의 댓글