클라우드 환경에 서버를 배포하고 있다가 컴퓨터 IP(public ip)를 알아낼 필요가 생겨서 구글 검색에서 이것저것 찾아봤는데, 굉장히 좋은 거를 알아내서 소개한다.
https://checkip.amazonaws.com/
아마존 AWS에서 제공해주는 서비스 같은데 해당 주소에 접속하면 본인의 IP 주소를 바로 알려준다. 브라우저로 접속을 해도 되고 curl로도 쉽게 알아낼 수 있어서 굉장히 편하고 스크립트 등에서 사용하기도 굉장히 편할 것 같다.
❯ curl https://checkip.amazonaws.com
xxx.xxx.xxx.xxx
지금까지 구글 검색 창에 my ip 이런 걸 검색해서 광고가 잔뜩 달린 웹사이트 등에 들어가서 알아냈는데... 훨씬 심플하고 좋은 걸 찾아버렸다. 다른 사람에게도 유용해보이니까 블로그에 글을 써서 공유한다!
=== 부연 설명 ===
아마도 IP에 대해 기본적인 지식이 있는 사람들이 많을 거라고 생각하지만, 모르는 분들을 위해 설명을 하자면...
IP는 private address(사설 IP)와 public address(공인 IP)가 있다. private address는 인터넷에서는 사용을 못하고 로컬 네트워크에서만 사용이 가능하다. 공유기를 사용하는 경우, 공유기에 연결된 컴퓨터는 private address를 받게 된다. 아래와 같은 범위의 IP 주소가 private address이다. 로컬 네트워크 밖의 사람들은 해당 IP로는 접근을 할 수 없다. 같은 공유기를 쓰는 컴퓨터끼리는 private address로 접근이 가능하다. 비유를 하자면, 집안의 주소라고 생각하면 되겠다. 안방, 거실 등등. 한 집에서 같이 사는 사람들은 안방이 어딘지 알지만, 우체국에서 편지가 올 때는 안방이라고 주소를 쓰면 편지가 배달될 수 없는 것과 비슷하다고 생각하면 되겠다.
- private address 범위
- Class A: 10.0.0.0 ~ 10.255.255.255
- Class B: 172.16.0.0 ~ 172.31.255.255
- Class C: 192.168.0.0 ~ 192.168.255.255
드넓은 인터넷에서 누군가에게 패킷(비유하자면 우편)을 보내기 위해선 public address를 사용해야 한다. 위의 범위의 private addresss는 외부에서는 배달이 불가하기 때문에, 공유기에서는 NAT(network address translation)이란 기술을 사용하여 외부로 나가는 우편, 내부로 들어오는 우편의 주소를 바꿔준다. (안방 -> 서울시 xx동 yyy번지)로 적힌 편지를 (부산시 zz동 aaa번지 -> 서울시 xx동 yyy번지)로 공유기에서 변환을 해주는 것이다. 그리고 답장이 오면 (서울시 xx동 yyy번지 -> 부산시 zz동 aaa번지)로 적힌 편지를 (서울시 xx동 yyy번지 -> 안방)으로 공유기에서 변경해준다.
private ip address를 알기 위해서는 unix 계열에서는 ifconfig, 윈도우에선 ipconfig 명령을 사용하면 쉽게 알 수 있는데, public ip address를 알기 위해서는 위의 https://checkip.amazonaws.com/를 사용하면 딱 좋은 것 같다.
=== 나의 상황 ===
아래는 개발자의 상황이라 일반 컴퓨터 사용자는 필요없을 것 같다. 개발자에게는 유용할지도..?
구글 클라우드에 GKE를 사용하여 kubernetes 환경에 애플리케이션 서버를 배포하였고, MongoDB Atlas 서비스를 이용하여 Shared 스펙으로 데이터베이스 인스턴스를 띄워놓은 상황이였다. 보안을 위하여 DB에 꼭 필요한 접근 이외에는 모든 네트워크 접근을 막아놓아야하는데, Shared 스펙(M0 Cluster)은 IP whitelisting 말고는 접근 제어가 지원이 안 되는 것이였다;;
Dedicated instance를 띄우면 vpc peering(db 인스턴스와 클라우드 환경의 vpc 네트워크를 peering하여 같은 private 네트워크에 있는 것처럼 구성하는 방식) 또는 private link(해당 db 인스턴스로 가는 접근을 private link라는 연결을 사용하여 외부 인터넷을 거치지 않고 연결하는 방식) 등을 사용할 수 있는데 dedicated instance가 최소 스펙이 한달 57달러라서 포기... (개발환경 DB 인스턴스를 구축하는 거라서 개발환경 유지에 계속 고정지출이 나가는 것이 살짝 부담스럽다...)
Serverless instance를 띄우면 private link로 연결을 지원해주는데 서울 리전에는 serverless instance 지원이 안 되서 포기했다.
Shared instance 밖에 선택지가 없었다. (해당 인스턴스는 무료다! 트래픽이 크지 않은 개발환경에 매우 적합할지도?!) Cloud 환경에서 outbound 트래픽에 대해서 source ip를 고정시키기 위해서는 NAT instance를 생성하고 외부로 나가는 패킷을 해당 인스턴스를 경유하도록 설정하면 된다. GCP에서는 Cloud NAT라는 이름으로 해당 기능이 있었다. Cloud NAT에 static ip를 할당하고 클라우드 환경 내의 인스턴스에서 위의 checkip 주소로 curl을 보내서 해당 static ip가 찍히는지 확인해보자.
참고로, 필자는 좀 삽질을 했는데, GKE 클러스터를 생성할 때 private cluster로 생성해야지만 NAT를 거치게 되는 듯 하다. Outbound traffic의 source ip를 고정하고 싶으면 private cluster를 사용하자. 이렇게 구성하면, MongoDB Share Instance(M0)에서 NAT의 source ip를 whitelist해주어서 접근을 허용할 수 있다.
'개발관련' 카테고리의 다른 글
Chrome Lighthouse 소개 - 개발한 사이트의 성능, 접근성, PWA, SEO를 체크해보자! (0) | 2023.07.23 |
---|---|
AWS CLI 자동완성 기능 설정하기 (0) | 2023.07.13 |
Dart 언어의 타입 시스템 (0) | 2023.06.24 |
[Dart] Dart 언어의 Built-in types 관련 정리 (0) | 2023.06.23 |
PyCharm 예전 버전 UI로 되돌리는 방법 (0) | 2023.06.23 |