이번에는 IPSec VPN의 '패킷 전달 과정'을 알아보자. 앞서 다룬 문서들에서는 패킷이 이동하는 터널과 해당 프로토콜에 대해 설명했지만, 이번에는 패킷이 실제로 어떻게 이동하는지를 자세히 살펴볼 거다. 아래 그림에서는 좌측의 'PC 1(10.10.10.10/24)'이 패킷을 전송하면, 이 패킷이 IPSec 터널을 통해 우측의 'PC 3(10.10.20.10/24)'으로 전달되는 과정을 확인할 수 있다.
패킷의 전달 과정은 IP Header의 변화와 목적지의 변화 두 가지로 나눠 볼 수 있는데, IP Header(이하 IP 헤더)의 변화에서는 VPN을 통과할 때 ESP Header(이하 ESP 헤더)가 어떻게 적용되는지 확인하고, 목적지의 변화에서는 패킷이 각 장비를 이동하면서 Next Hop(이하 넥스트 홉)을 어떤 IP로 설정해 이동하는지를 살펴본다. 이 모든 과정은 터널 모드를 가정하고 설명한다.
패킷의 전달 과정
'PC 1'이 'PC 2'에게 패킷을 전송한다면?
설명에 앞서 중요한 점이 하나 있다. 어떤 VPN이든 내부에서 사용하는 사설 네트워크 대역이 다른 VPN의 사설 네트워크 대역과 겹쳐서는 안 된다는 점이다. 예를 들어, 좌측 VPN이 10.10.10.x/24 대역을 사용하고 우측 VPN도 동일한 네트워크 대역을 사용하는 경우, 통신이 불가능하게 된다. IPSec VPN은 Layer 3의 IP 헤더를 이용해 논리적으로 사설망을 연결하는 것일 뿐 물리적인 사설망을 구성하는 것이 아니기 때문이다. 이로 인해 서로 다른 네트워크 대역을 사용해야 한다.
좌측 VPN 내 단말이 가진 라우팅 테이블에 로컬 네트워크로 명시된 10.10.10.x/24 대역이 상대 VPN에 속해 있다면 통신이 불가능해진다. 이는 IPSec VPN을 사용할 때 매우 중요한 사항이므로 기억해두자. (물론 NAT를 사용하거나 Subnet Mask를 조절하는 차선책이 있긴 하지만, 권장되는 방법은 아니다.)
패킷 전달 과정 - IP Header의 변화
ESP 헤더와 터널 모드 사용을 전제로 설명한다. 본사 VPN 네트워크(10.10.10.x/24)에 속한 'PC 1'이 지사 VPN 네트워크(10.10.20.x/24)에 속한 'PC 2'로 패킷을 전달하려면, 먼저 본사 VPN을 통해 지사 VPN으로 향해야 한다. 이때 'PC 1'과 'PC 2'의 게이트웨이는 VPN으로 지정되어 있다.
'PC 1'에서 출발하여 본사 VPN으로 이동하는 패킷
이때 패킷의 IP 헤더는 Source IP가 'PC 1'의 IP(10.10.10.10/24)이고, Destination IP는 'PC 3'의 IP(10.10.20.10/24)다. 'PC 1'이 데이터가 담긴 패킷을 생성해 게이트웨이인 본사 VPN으로 전송한다.
IPSec VPN에 의해 암호화된 패킷
본사 VPN이 패킷을 암호화하면, 원래 IP와 데이터는 암호화되며, 이를 해시 알고리즘을 적용한 'Auth' 필드도 포함된다. 공인망을 통해 목적지까지 향하기 위한 새로운 IP 헤더도 추가되는데, 이때 패킷은 지사 VPN으로 이동하게 된다.
지사 VPN에서 'PC 3'으로 이동하는 패킷
지사 VPN은 본사 VPN에서 받은 패킷을 복호화하고, 해시 알고리즘으로 데이터의 변질 여부를 확인한다. 이후 패킷의 목적지 IP를 확인하고, 'PC 3'으로 패킷을 전송해 'PC 3'은 데이터를 확인하게 된다.
패킷 전달 과정 - 목적지의 변화
패킷이 이동하면서 Next Hop(이하 넥스트 홉)을 어떻게 지정하는지를 살펴본다. 실제 현장에서는 패킷 헤더보다는 넥스트 홉과 라우팅 설정을 주로 확인하며 설정 및 장애처리를 한다. IPSec VPN은 Layer 3에서 작동하는 VPN이기 때문에 라우팅을 어떻게 구성하는지가 매우 중요하다.
'PC 1'이 넥스트 홉을 게이트웨이로 지정해 전송
본사 VPN 네트워크는 외부로 나가는 통로가 본사 VPN뿐이기 때문에, 'PC 1'은 넥스트 홉을 본사 VPN으로 지정한다. 이 패킷을 받은 본사 VPN은 목적지인 지사 VPN으로 패킷을 전달하는데, 이때 넥스트 홉을 공인 IP로 지정하지 않고 터널 IP를 사용한다.
터널 IP는 IPSec VPN 간 상대방 VPN을 넥스트 홉으로 지정하기 위해 사용하는 IP다. 특정 IP 대역을 사용해 터널 IP를 설정하는 것이 좋으며, AWS의 경우 Site-to-Site VPN에서 '169.254.0.0/16' 범위의 '/30' IP를 할당해 사용한다.
본사 VPN이 지사 VPN의 터널 IP를 넥스트 홉으로 삼아 라우팅
본사 VPN은 패킷을 지사 VPN으로 라우팅하기 위해 넥스트 홉을 172.16.1.2/30로 지정한다. 이를 위해 본사 VPN의 라우팅 테이블에 ‘ip route 10.10.20.0 255.255.255.0 172.16.1.2’와 같은 설정이 필요하다.
지사 VPN이 'PC 3'으로 패킷을 전달
본사 VPN에서 전달받은 패킷을 지사 VPN이 'PC 3'으로 전달한다. 'PC 3'은 패킷을 받고 데이터를 확인하며 전달 과정이 마무리된다.
여기까지가 IPSec VPN에 대한 내용이다. IPSec VPN의 프로토콜, 헤더, 동작 과정, 전달 과정을 숙지하면, 다양한 VPN 벤더 제품이나 클라우드에서 제공하는 Site-to-Site VPN의 사용과 장애 처리에 큰 도움이 될 것이다. 다음에는 SSL VPN에 대해 다루도록 하겠다.