본문 바로가기
DevOps/AWS

AWS VPC 피어링 하기

by YangsDev 2020. 1. 6.

회사에서 운영중인, AWS 서비스가 계속 커지다보니, VPC도 나눠지고 VPC 피어링도 필요한 상황이 되었다.

그래서 이번에 VPC 피어링을 하는 과정을 블로그에 적어보도록 하겠다.

AWS VPC 피어링이란?

출처 : https://docs.aws.amazon.com/ko_kr/vpc/latest/peering/what-is-vpc-peering.html

VPC 피어링 연결은 프라이빗 IPv4 주소 또는 IPv6 주소를 사용하여 두 VPC 간에 트래픽을 라우팅할 수 있도록 하기 위한 두 VPC 사이의 네트워킹 연결 하는것을 VPC 피어링 이라고 합니다.

한줄 정리 하면 A공유기와 B공유기를 연결하는 작업이라고 볼수있다.

AWS VPC 피어링을시작을 하기 전에

이 글에서는 여러분이 조금이라도 더 빠르고 깔끔하게 이해 하시라고 용어 정리를 한번 하고 가겠다.

  • VPC_A : 172.20.0.0/16 (요청자),
  • VPC_B : 172.30.0.0/18 (수락자)

AWS VPC 요청하기

먼저, VPC 대시보드로 이동한다.

  1. 피어링 연결 선택
  2. 피어링 연결 생성 클릭

4. 요청자 VPC와 수락자 VPC를 선택한다

4–1. 만약 다른 리전에 있는 VPC와 연결 하려면, 하단에 리전에 있는 다른 리전을 선택해서 피어링을 할 VPC ID를 입력하면 된다.

4–2. 다른 계정에 있는 계정에 연결을 하기 위해서는 계정ID (billing -> 계정 설정 -> 계정ID에 있는 숫자)을 입력하고, VPC ID를 직접 입력하면 된다.

나의 경우는 내 계정의 같은 리전에 있는 VPC_B로 연결해보겠다.

5. 문제가 없이 잘 진행 되었다면 아래와 같이 요청이 완료되었다는 메세지를 확인 할 수 있다.

<그림2 VPC_A -> VPC_B로 요청이 완료된 상태>

<그림3. VPC_A -> VPC_B로 요청을 보낸 상태>

자 그럼, 내가 VPC_A -> VPC_B로 요청을 보냈으니 수락을 하자.

요청 수락이 필요한 VPC에 오른쪽 마우스를 클릭 하고 “요청 수락”을 누르면 VPC_A와 VPC_B의 연결이 허용 된다.

아무런 문제 없이 잘 진행 되었다면 위와 같은 내용으로 요청을 수락 했다는 안내를 받게 될 것이다.

피어링 한 VPC간의 통신을 위해 라우팅 추가

<씨익>

아니 피어링이 벌써 끝났다고? 라는 생각과 함께, 놀아야지! 라고 생각하면 큰 오산이다.

피어링된 VPC간에 송/수신이 될려면 VPC_A와 VPC_B의 라우팅 테이블에 피어링한 VPC의 라우팅을 등록 해줘야 한다.

(이 정도는 자동으로 넣어줬으면 하는데 좀 아쉽다)

먼저, VPC_A에서 VPC_B의 라우팅을 넣어보자.

Parring Connection을 클릭 하면 (pcx-)라는 접두사가 붙게된다.

자동완성을 통해 나오는 피어링 아이디를 선택 해주고 Save routes를 클릭합니다.

만약, 자동완성이 나오지 않는다면, 해당 라우팅에 추가 할 수 없는 경우다.

위와 같은 방법으로 VPC_B에서도 똑같이 VPC_A에 대한 라우팅을 등록 해준다.

문제가 없었다면 라우팅 등록에 성공했다는 메세지가 뜰것이다.

그럼, 이제 80%정도는 한거다

Security Group 추가

여기서 조금 당황 했던건 시큐리티 그룹 설정시 Source에 대한 자동완성이 안된다.

<피어링간의 설정은 선택이 안됨>

여기서 조금 많이 당황을 했다. 매우 잘 사용하던 자동완성이 안되서 내가 멀 잘못한건가 하고 문서를 엄청 찾아봤었다.

엄청난 구글 검색을 통해 알게 된 것은 자동 완성으로는 해당 VPC안에서의 Security Group만 나온다는 사실을 알게 되었다.

그럼 어떻게 Policy를 넣는냐? 라고 하면 해당 시큐리티 그룹의 실제 ID를 직접 입력 하면 된다.

VPC_B_SG(sg-010ee05f791a9fec0)에서 VPC_A_SG(sg-081d0f4ba0f73d188)의 ICMP를 오픈하여 VPC_A에서 VPC_B로 통신 하도록 해보겠다.

이렇게 자동완성은 되지 않지만 Security Group ID를 직접 넣어주면 된다

<잘못된 Security Group ID를 입력하면, 이렇게 화면이 깨진다..?>

`보안 그룹 규칙을 업데이트 할 수 없습니다(변경 사항 없음).: The security group ‘~~’ does not exist`

블로그 글을 적는 이 상황에 아마존의 이슈가 있는지 화면이 깨진다.

할튼 존재 하지 않는 Security Group ID라면 업데이트를 할 수 없다는 내용과 함께 오류가 나게 된다.

<정상적으로 PING이 들어가는 모습>

이렇게 되면 당신의 VPC 피어링은 완료 되었다.

VPC 피어링 하고 나면, 내부 DNS 사용 못하나요?

신나게 VPC 피어링이 완료되고 통신이 되는것까지 확인을 했는데, VPC_A와 VPC_B 구간에 통신이 안되는게 보인다.

<피어링 한거면 DNS도 사설으로 바뀌어야 하는거 아닌가.>

피어링을 하고 나면 사설 대역 끼리 통신을 해야하는데, DNS 룩업 결과가 외부로 나간다.

그럼 피어링 구간은 DNS를 통해 Lookup을 못하나요? 라는 질문은 아니다! 라고 답하겠다.

아까 VPC 피어링을 위해 갔던 탭으로 다시 이동을 하자

연결된 피어링 연결서 오른쪽 마우스를 클릭 하고 DNS 설정 편집을 누르자.

‘요청자 VPC(VPC_A)가 프라이빗 IP에 대한 수락자 VPC (VPC_B) 호스트의 DNS 확인 허용’ 을 클릭 하고 저장을 하고 서버에서 다시 DNS를 조회해보자

정상적이게 공인 IP에서 사설 IP로 변경되고, 실제로 통신도 잘되는것을 확인 할 수 있었다.

마치며

AWS에서 망 분리 혹은 서비스 분리를 위하여, VPC가 분리되어 사용되지만, 여러가지 이유로 나눠진 VPC끼리 통신이 일어나야 하는 경우가 있다.

관련 자료를 많이 찾아보았지만, 명쾌한 해답이 제대로 안나오는 상황이 있어서 이 글을 통해 명쾌한 해답을 얻었기를 바란다.

 

 

댓글0