베지밀
GRE(Generic Routing Encapsulation) 프로토콜 본문
실무 관점에서 GRE over IPSec을 구현하며, 어떤 흐름으로 패킷이 캡슐화되는지, 그리고 어떻게 터널링되는지 간단하게 알아보고자 한다.
GRE
다른 계층 혹은 다른 프로토콜 트래픽을 캡슐화하여 IP 기반 전송이 가능하도록 하는 터널링 기법.
트래픽을 GRE 터널 헤더로 패킷을 캡슐화하고, 그 위에 IP 헤더를 추가하여 최종적으로 인터넷 통신이 가능한 IP 패킷으로 만든다.
GRE가 필요한 환경은 다음과 같다
- OSPF, RIP 등 멀티캐스트 기반 동적 라우팅 환경
- 동적 라우팅 환경에서는 브로드캐스트가 아닌 이웃 라우터들에게 전송하는 '멀티 캐스트'로 동작한다.
- 그러나 인터넷은 기본적으로 멀티캐스트를 지원하지 않는다.
- 따라서 GRE를 통해 이웃 라우터들과 각각 GRE 터널을 맺어서 유니캐스트로 라우팅 정보를 전송한다.
- IPSec 통신을 할 때
- IPSec은 기본적으로 IP 프로토콜만 암호화를 지원한다.
- 따라서 GRE 프로토콜을 사용하여 IP패킷으로 만들어주면, IPSec은 GRE 패킷을 통째로 암호화한다.
- 트래픽을 터널 단위로 구분하고자 할 때 (ex. SD-WAN)
- 방화벽 정책 상 여러 논리 네트워크를 하나의 회선으로 사용하고자 할 때, 회선 내에 GRE 터널을 뚫으면 트래픽별로 정책을 적용하기 용이하다.
GRE 패킷 구조
사용자 트래픽을 GRE 헤더로 캡슐화하고, 실제 전송 경로인 외부 IP 헤더를 통해 IP 패킷으로 감싼다.
GRE 헤더는 GRE 터널을 논리적으로 식별하며, 캡슐화 정보를 포함해 송수신 장비 간 터널링이 가능하게 한다.
GRE over IPSec 흐름
사용자의 원본 트래픽을 GRE 헤더로 감싸면서 "GRE 터널의 논리적 식별자"를 더한 후, GRE 패킷을 다시 ESP 암호화하여 물리 인터페이스 IP를 달고 라우팅을 수행한다!
IPSec 데몬 입장에서 서브 네트워크는 GRE 인터페이스의 물리 주소가 될 것이고, 게이트웨이는 물리 인터페이스가 된다.