안녕하세요 Dev. Pluto입니다
2024년이 벌써 3월이 되어버렸습니다. 시간이 정말 빠른 것 같네요..😭
이번 포스팅에서는 사내 네트워크를 뜯어보면서 배웠던 부분들을 정리해 보는 시간을 가져보도록 하겠습니다.
대상 독자
- 해당 문서는 public ip, private ip등의 기본적인 네트워크 지식이 있거나
- 포트포워딩에 대해서 정확한 개념이 없으신 분들에게 적합한 문서입니다.
목차
- 포트포워딩을 깊게 공부하게 된 동기
- 공인IP와 사설 IP
- 포트포워딩
- 포트포워딩의 문제점과 해결책
- 결론
Motivation
오늘도 평범히 맡은 서비스를 확장하고 유지보수를 하던 도중 SNS플랫폼과 Oauth인증 이후에 redirect경로로
사내 WiFi에 접속해 있는 본인의 Local Pc에 플랫폼 측에서 내려준 accessToken과 토큰의 만료일자 등이 담긴 IP패킷을 받아야 할 필요가 생겼었습니다.
"redirect url 정보는 애플리케이션 설정을 하면 되는데,,
근데 회사 와이파이 안에 접속해 있는 내 PC에 이걸 어떻게 받지? localhost 하면 안 될 것 같은데.."라는 궁금증이 문득 들기 시작하였고
애플리케이션 설정을 찾아보기 시작하였습니다.
아니 근데 웬걸! 새롭게 추가하는 소셜 플랫폼의 Oauth인증이 별안간 도메인으로 설정돼 있는 게 아닌가요?
여기는 어디지..?라는 생각과 함께 사내 네트워크에 이런 곳의 흔적(?)이 있을지 찾아보기 시작하였습니다.
공인 IP와 사설 IP
흔히 말하는 Public Ip / Private IP를 먼저 알고 다음으로 넘어가야 하기에 위의 목차를 만들게 되었습니다.
1. Public IP
공인 IP라고도 불리는 IP주소체계는 우리가 흔히 사용하는 와이파이 공유기부터, 라우터나 모뎀 등의 네트워크 장비에 할당할 수 있는 고유의 주소입니다. 공인 IP는 인터넷 서비스 공급자가 할당하는 고유의 주소이며, 공인 IP 주소를 통해서 다른 네트워크 엔드포인트들과 통신할 수 있습니다.
2. Private Ip
사설 IP라고도 불리는 해당 주소는 공인 IP주소를 가진 네트워크 장비가 내부적으로 관리하는 주소체계입니다.
예를 들어, 우리가 카페 같은 곳을 가면 무료 와이파이를 사용할 수 있어서 노트북이나 태블릿 PC 등을 가지고 인터넷을 이용할 수가 있는데요. 이때 카페 안에 있는 와이파이에 비밀번호를 치는 등의 통과 과정을 거쳐 와이파이의 내부 네트워크에 자신의 기기를 포함하는 행등이 사설 IP에 접속을 했다라고 생각하시면 됩니다.
그럼 포트포워딩은 뭐지?
앞서 설명해였던 공인 IP와 사설 IP를 연결하여 포트포워딩을 설명하자면
공인 IP의 특정 포트번호를 목적지 포트로 수신된 TCP 세그먼트를 사설 네트워크의 특정 IP와 포트에 맵핑해서 보내준다(포워딩)
라는 의미가 담긴 용어라고 생각하시면 될 것 같습니다.
예시를 들자면 "my-wifi"라는 이름의 와이파이 공유기가
123.456.789라는 IPv4 주소를 가지고 있다고 했을 때
123.456.789:8080 포트번호를 목적지 포트로 해당 공유기에 데이터(TCP세그먼트)가 수신된다면
사설 ip 안의 192.168.111.222:24000 포트로 콕 찍어서 보내주는 일종의 포트 기반 맵핑이라고 생각하시면 됩니다.
(단, 사전에 공유기 설정에 포트포워딩 설정이 되어있어야 합니다.)
포트포워딩의 문제점과 해결책
포트포워딩을 제가 풀어야 했던 문제와 엮어서 설명한다면
소셜 인증을 통한 액세스 토큰을 결국에는 리다이렉트 주소로 보내줄 것인데, 최종 목적지는 개발자의 PC로 오도록 설정을 해주어야 하는 필요가 있었습니다.
사내 네트워크 설정은 위의 스크린샷으로 첨부한 도메인을 가지고 있는 AWS ALB가 같은 private network에 포함돼서 존재하도록 설정되어 있는 구조였습니다.
위에서 설명했던 포트포워딩에 빗대어 설명한다면 공인 ip는 스크린샷의 도메인이 되었을 것이고 포워딩에 해당하는 주소와 포트는
ALB 로드밸런서에 등록된 주소들이라고 생각하시면 됩니다.
여기서 중요한 점은 일반적인 포트포워딩은 공인 ip주소의 포트 1개와 사설 주소 1개가 맵핑되어야 하는 구조입니다.
한 개의 공인 {아이피:포트} 설정이 사설 네트워크의 여러 {아이피:포트}를 대상으로 설정할 수 없습니다.
즉, 포트포워딩은 1:1 관계로 맵핑이 되어야 한다는 제약사항이 있었습니다.
해당 목차의 서두에 AWS로드밸런서가 같은 사설 IP망에 포함되었던 설정이 있었듯
로드밸런서 공인 IP네트워크 장비와 포트포워딩 설정을 하고, 로드밸런서는 자신에게 등록된 endpoint들에 수신된 TCP 세그먼트를 전달하는 방식으로 1:N 방식으로 포트포워딩을 설정해서 사용할 수 있었습니다.
결론
포트포워딩은 1:1 대응하도록 공인 IP와 포트를 사설 네트워크의 IP와 포트에 맵핑하는 개념입니다.
공인 IP의 특정 포트를 사설 IP에 여러 PC에 보내고 싶다면, 내부에 AWS ALB나 리버스 프록시를 사용해서
데이터를 분산하는 방법을 사용할 수 있습니다.
또한 오늘 나왔던 용어 중에 로드밸런서, 리버스 프록시 등은 추후에 별도 포스팅으로 깊게 다뤄보도록 하겠습니다.
긴 글 읽어주셔서 감사합니다!
'DevOps' 카테고리의 다른 글
[Infra] 사내 시스템에서는 왜 KafKa를 도입했을까? (0) | 2023.07.14 |
---|