이번에 외부 API를 사용하기 위해 해당 업체에게 API를 사용할 IP
를 알려주어야 했었다.
해당 업체에서는 등록된 IP만 API를 호출 할 수 있게 했기 때문이다.
그래서 API를 사용할 인스턴스의 IP를 해당 업체에게 전달 하였다.
인스턴스의 IP를 192.168.xxx.xxx 라고 하자.
그 후 해당 인스턴스에서 외부 API에 curl을 통한 명령을 보내자, 등록되지 않은 IP라는 에러 문구가 담긴 응답을 받았다.
응답에는 현재 본인들이 요청 받은 IP를 182.100.xxx.xxx 라고 하였다.
이상하다.
내 인스턴스 IP는 192.168.xxx.xxx인데…
얼마 지나지 않아 난 내 멍청함을 깨닫게 되었다.
바로 내가 제출한 IP 192.168.xxx.xxx 는 사설 IP였고, 공인 IP인 182.100.xxx.xxx 를 통해 요청이 전달되어 해당 API 서버에 전달 된 것이었다.
여기서 나는 궁금증이 들었다.
192.168.xxx.xxx 가 사설 IP라면, 내가 평상시 어떻게 putty 등을 통해 원격으로 인스턴스를 접근 할 수 있었을까?
사설 IP라면 접근이 불가 해야 하지 않나?
정답은 VPN
에 있었다.
나는 이전까지 VPN은 단순히 나의 IP를 다른 IP로 변경 시켜주는 기술 이상, 이하도 아니라고 생각을 했다.
그렇기에 이번 일에도 초반에 정확히 이해를 못했었던 것 같다.
그래서 이번 기회에 VPN에 대해서 알아보고자 한다.
VPN
은 Virtual Private Network
의 약자이다.
VPN은 사용자가 내부망에 연결 된 것처럼 인터넷에 엑세스 할 수 있도록 하는 인터넷 보안 서비스를 말한다.
여기서 내부망
이란 회사나 조직 내에서만 사용되는 private한 네트워크를 말한다.
VPN는 아래와 같은 작동 순서를 가진다.
VPN 클라이언트(프로그램)과 VPN 서버 연결
이 때 사용자는 VPN 클라이언트를 통해 VPN 서버에 접속하며, 이 때 VPN 클라이언트는 VPN 서버로의 모든 트래픽을 암호화 하여 보내고, VPN 서버는 이를 해독하여 목적지에 전달한다.
암호화 된 터널 생성
VPN 연결은 암호화된 터널을 사용해 데이터를 주고 받는다.
공용 IP를 숨긴다.
VPN을 통해 사용자의 공용 IP 대신 VPN 서버의 IP 주소가 대신 사용된다.
사설 네트워크 접근
VPN 서버는 사설 네트워크에 연결 되어있기에 사용자는 VPN을 통해서 마치 사내 네트워크에 있는 것처럼 접근 가능하다.
그렇다면 어떻게 이러한 VPN을 통해 나는 사설 내부망에 접근하고 있었던 것일까?
아래의 과정을 거쳐 나는 내부망에 원격
으로 접근하고 있었던 것이었다.
사설 IP
를 할당한다.정리하자면 VPN을 통해 나는 내부망 IP를 할당 받았고, 이를 이용해 내부망 인스턴스들에 대해 접근을 할 수 있었던 것이었다.