AWS VPC 개념
이글은 저어게 이걸 물어본 친구에게 저주하기위해 적는 글입니다.
맨처음에 AWS를 하게되면 가장 중요한건 VPN가 아닐까 합니다. 그 이유는 AWS모든서비스에서 VPC를 설정해야하기 때문입니다.
그럼 VPC는 무엇인가요? 간단히 이야기하면 우리가 공유기나 라우터등 다양한 장비를 설치하는데 이를 추상한 장비라는 거입니다.
일단 VPC라는 놈을 만들어 봅시다.
저는 IPv4를 192.168.0.0/16으로 생성하였습니다. 인터넷에 다양한 예제가 많긴 하지만 RFC 1918(https://ko.wikipedia.org/wiki/%EC%82%AC%EC%84%A4%EB%A7%9D)을 따르기로 하겠습니다. 만약 이를 지키지 않으면 private IP랑 public랑 충돌할수도 있어 문제가 발생하게 됩니다. 꼭 RFC-1918은 지켜주시기 바랍니다.
자 이제 VPC는 다 만들어졌으니 서브넷을 한번 만들어 봅시다. 저는 귀잖으니 다음과 같이 만들었습니다.
또한 AWS EIP를 안쓰기 때문에 다음과 같이 Modify-assign IP를 On으로 세팅했습니다. 해당설정은 해당 서브넷에 들어가지는 EC2에 public-ip를 할당하게 됩니다. 실서비스는 EIP를 사용하기 바랍니다.
자 이제 AWS EC2를 한번 해당 서브넷으로 만들어보시기 바랍니다. 주의할점은 꼭 아까 만든 VPC와 SG를 아래와 같이이 만들어야합니다.(SG의 목적은 인터넷 테스트목적입니다. 실서비스에서 아래와 같이 설정한분이 있으면 반정도 죽여도됩니다.)
그리고 만들어진 EC2에 ping을 테스트해봅시다. 아까 서브넷만들때 auto-assgin때문에 기본적으로 ec2가 만들어지면 public-ip가 설정되게 됩니다.
위와같이 안되는걸 알수있습니다. 왜 그럴까요? VPC는 추상적인 네트워크라고 하였습니다. 저희가 공유기를 설치해본다고 가정을 하게되면 WAN포트를 연결해주어야합니다. VPC또한 이란 작업이 필요합니다.
이는 WAN이라고 하지는 않고 인터넷이 왔다갔다한다고 internet Gateway라고 합니다.
AWS Internet GateWay를 설정해봅시다.
위와 같이 인터넷게이트웨이를 만들고 VPC에 붙혀봅시다. 그 다음 ping을 한번 더 때려 봅시다.
마찬가지로.. 안됩니다.. 왜 안될까여? 이는 라우팅 테이블이라는 곳이 원인입니다. 라우팅 테이블이란 쉽게 이야기해서 패킷을 보낼려고 하는데 어디로 보내면 되? 하나의 징표가되는 네비게이션이라고 생각하면됩니다.
한번 콘솔(대시보드)에 있는 Route Tables에 들어가 보시기 바랍니다.
라운팅 테이블에 가면 만들지도 않은 route table이 있는걸 확인할수 있습니다. route table은 기본적으로 VPC를 만들게 되면 자동으로 만들어 지기 때문입니다. 이제 아래와 같이 수정해봅시다.
Destination과 Target이 무슨말지 헤갈리수도 있으니 한글로 바꾸어 서브넷으로 들어가 라이팅 테이블을 보기 바랍니다.
번역누구야 시발 인걸 알수있습니다. 쉽게 이야기해서 Destination은 내가 갈려고하는 아이피대역을 Target으로 보내라 입니다. 아까전에 추가한 0.0.0.0/0(외부)에 패킷을 보낼려면 인터넷 게이트웨이로 가라는 말입니다. 그러면 그 위에 있는 192.168.0.0/16은 무슨말인가요?
저희가 VPC는 192.168.0.0/16으로 만들었다는걸 기억해보세요. 해당 아이피로 보낼려는거는 local에 보낸다는 겁니다. 로컬이 어디일까요? 바로 VPC안에 있는 private IP로 보낸다는 겁니다. 이 라운팅 테이블로인해서 같은 VPC내에 장비들하고 통신할수 있게 됩니다.
여튼 위와 같이 수정하고 ping을 때려보시기 바랍니다.
이제 정상적으로 패킷이 AWS에 보내고 정상적으로 받는걸 확인할수 있습니다.
이거보다 더 많은걸 알고 싶으시면 aws공식문서나 양승도님이 발표하신 vpc가 영상이 있습니다.