요약

  • RFC 2784는 전달 헤더, GRE 헤더, 페이로드를 분리합니다. 4옥텟 기본 헤더는 내부 프로토콜을 식별할 수 있지만, 터널이 왜 존재하는지, 누가 사용할 수 있는지, 내용이 안전한지는 판단하지 않습니다.
  • Tony Li는 1994년 GRE 기록과 2000년 표준 트랙 사양 양쪽의 공동 저자입니다. 이후 RFC들은 운영상 책무를 드러냅니다. GRE Key는 보안 비밀이 아니라 컨텍스트 레이블이며, 시퀀싱은 상태와 서비스 거부 위험을 만들고, IPv6 운반은 종단에서 지속적인 MTU와 무결성 판단을 요구합니다.

하나의 패킷, 두 개의 주소, 세 가지 책무

GRE 진입점에서 평범한 패킷은 페이로드가 됩니다. 그 주위에 GRE 헤더가 씌워지고, 그 다음 바깥 전달 헤더가 덧붙여집니다. 언더레이는 바깥 목적지를 읽고 이 전체 구조물을 이그레스까지 운반합니다. 이그레스는 바깥 계층을 벗겨내고 안쪽 패킷의 목적지로 돌아갑니다.

이 과정은 포장처럼 들리지만 세 개의 독립적인 기록을 만듭니다. 전달 헤더는 터널 종단을 식별합니다. GRE 헤더는 안에 어떤 종류의 패킷이 있고 어떤 선택적 동작이 적용되는지 식별합니다. 페이로드는 자신의 출발지, 목적지, 수명, 상위 계층 의미를 그대로 유지합니다. 바깥 목적지로의 경로는 봉투가 이동할 수 있다는 것만 증명합니다. 내부 목적지가 승인되었는지, 캡슐 해제 후 도달 가능한지, 올바른 보안 통제의 시야 안에 있는지는 증명하지 않습니다.

2000년 3월 표준 트랙에서 발표된RFC 2784는 Dino Farinacci, Tony Li, Stan Hanks, David Meyer, Paul Traina의 이름을 밝히고 있습니다. 이 문서는 Hanks, Li, Farinacci, Traina가 쓴 이전 정보성 문서RFC 1701을 대체했습니다.IETF Datatracker 프로필은 고정된 기록 속에서 Li의 공개 신원, RFC 대장, 현재 역할을 제공합니다. 이 출처들은 공동 저작을 확립할 뿐, 단독 발명가 서사나 배포된 터널에 대한 개인적 통제권을 입증하지는 않습니다.

인물 수준에서 유용한 관찰은 더 좁습니다. Li는 먼저 일반적인 봉투를 기술하고 나서 그 공통 코어를 의도적으로 축소한 설계의 두 단계 모두에 등장합니다. 그의 공개 기록은 통제가 아니라 절제가 지속적인 엔지니어링 선택이었던 표준 기여를 연구할 수 있게 해줍니다.

공통 봉투는 특수 사례의 행렬을 대체했다

재사용 가능한 캡슐화가 없다면 모든 페이로드 프로토콜은 모든 전달 프로토콜 위에서 별도의 방법을 요구할 수 있습니다. 프로토콜이 하나 추가되면 조합 수는 행렬처럼 늘어납니다. RFC 2784는 GRE의 야망을 그O(n²)문제를 다룰 수 있는 형태로 줄이는 것으로 기술합니다. 페이로드, 공통 봉투, 전달입니다.

일반성이 마법처럼 제시되지는 않았습니다. 문서는 프로토콜 고유의 미세 차이가 무시되며, 특정 조합에는 목적에 맞게 만든X over Y메커니즘이 더 나을 수 있다고 경고합니다. 무엇보다 이 문서는 패킷을 언제 캡슐화해야 하는지 규정하지 않습니다. GRE는 문법을 제공할 뿐, 정당성을 제공하지 않습니다.

이 경계는 표준이 기술적 선택을 보편적 정책으로 바꾸는 것을 막습니다. 기업은 분리된 사설 프리픽스를 연결할 수 있습니다. 사업자는 서비스를 언더레이를 통해 운반할 수 있습니다. 실험실은 그렇지 않으면 지원되지 않는 프로토콜을 시험할 수 있습니다. 패킷이 GRE에 부합한다는 이유만으로 그 어떤 목적도 승인되지 않습니다. 운영자는 여전히 소유자, 종단, 허용되는 페이로드, 보안 경계, 용량, 폐기 조건을 명시해야 합니다.

이 구분은 경제적으로 중요합니다. 공통 봉투는 구현과 조율 비용을 줄입니다. 그러나 이를 사용하는 네트워크의 운영적 하방은 흡수하지 않습니다. GRE 재사용으로 절약하는 당사자는 터널이 만들 수 있는 경로 누수, 블랙홀, 검사 공백, 의존성에 대한 책임을 그대로 지고 있습니다.

4옥텟은 상대가 알아야 하는 것만 표준화한다

선택적 체크섬이 없으면 RFC 2784 헤더는 16비트 워드 두 개로 구성됩니다. 첫 번째는 체크섬 존재 비트 하나, 예약 비트, 버전 값을 담습니다. 두 번째는 페이로드를 식별하는 EtherType인 프로토콜 타입을 담습니다. 버전 0이 기본 형식입니다.

이 작은 헤더에는 전역 터널 식별자, 소유자, 정책, 경로, 암호화 주장, 서비스 수준 약속이 들어 있지 않습니다. 상대에게 다음 바이트를 어떻게 해석할지 알려줄 뿐입니다. 수신자는 알 수 없는 프로토콜 타입을 폐기해야 합니다. 예약 비트는 0으로 전송되며, 구버전 동작을 구현하지 않는 수신자는 특정 0이 아닌 확장 위치를 사용하는 패킷을 폐기해야 합니다. 알 수 없는 의미는 추측이 아니라 거부됩니다.

선택적 체크섬은 4옥텟을 추가하고 GRE 헤더와 페이로드를 보통의 인터넷 체크섬으로 덮습니다. 준수 구현은 그것이 존재하면 처리해야 합니다. 결과는 덮인 자료의 우발적 손상을 감지할 수 있습니다. 그러나 종단을 인증하거나, 내용을 숨기거나, 권한을 확립할 수는 없습니다.

이것이 최소 공통 사양이 패킷 캡처에서 어떤 모습인지 보여줍니다. 공통의 모든 비트는 상호운용성 질문에 답합니다. 답하지 않는 모든 것은 프로토콜의 권한 밖에 남습니다.

캡슐 해제 뒤의 경로는 여전히 페이로드에 속한다

안쪽 패킷이 IPv4일 때 RFC 2784는 이그레스가 안쪽 목적지를 사용해 전달하고 안쪽 TTL을 감소하도록 지시합니다. 바깥 목적지는 자신의 임무를 다한 뒤입니다. 바깥 목적지는 페이로드의 라우팅 의미를 대체하지 않습니다.

사양은 또한 날카로운 루프 조건을 명시합니다. 캡슐 해제된 안쪽 목적지가 반대쪽 끝의 캡슐화 장치라면, 패킷이 같은 관계로 되돌아가 다시 보내질 수 있으므로 폐기해야 합니다. 터널링은 안쪽 패킷에게 토폴로지를 숨길 수 있지만 루프의 결과를 폐지할 수는 없습니다.

이 분리는 진단에서 중요합니다. 바깥 traceroute가 이그레스에 도달할 수 있지만 안쪽 경로는 없을 수 있습니다. 터널 인터페이스는 관리적으로 up이지만 페이로드는 캡슐 해제 후 폐기될 수 있습니다. 반대로 안쪽 애플리케이션 장애가 GRE 탓으로 돌려질 수 있으나 실제 원인은 언더레이 경로, 방화벽, MTU 또는 되돌아오는 경로 불일치일 수 있습니다. 세 기록을 따로 관찰한 다음 결합해야 합니다.

1994년 선택지는 조용히 상속된 것이 아니라 좁혀졌다

RFC 1701은 더 넓은 헤더를 제시했습니다. 라우팅, 키, 시퀀스, 엄격 출발지 경로, 재귀 통제가 모두 나타날 수 있었습니다. RFC 2784는 여러 벤더가 배포한 교집합을 표준화하고 기본 프로필에서 그 필드들을 폐기했습니다. 구버전의 0이 아닌 플래그 위치를 만난 기본 수신자는 구버전 동작을 명시적으로 구현하지 않는 한 패킷을 폐기합니다.

이 역사는 기능을 더한 단순한 이야기가 아닙니다. 공유 코어는 더 작아졌고, 그 덕분에 독립 구현들이 더 적은 의미를 더 높은 확실성으로 일치시킬 수 있었습니다. 선택적 필요는 모호한 예약 비트 뒤에 숨는 대신 별도로 지정된 확장을 통해 돌아올 수 있었습니다.

따라서 호환성이란 설명 가능한 거부 경계를 뜻합니다. 한쪽 종단이 확장을 기대해서 실패하는 터널은 추측한 레이아웃으로 바이트를 수용한다고 고쳐지지 않습니다. 운영자는 기능 쌍을 증명하고, 합의된 프로필만 활성화하고, 이전 파싱 계약을 복원하는 롤백을 보존해야 합니다.

Key라고 불리는 필드는 보안 키가 아니다

Li가 아닌 Govindan Dommety가 나중에 집필한RFC 2890은 선택적 Key와 시퀀스 넘버 확장을 정의했습니다. 4옥텟 Key는 캡슐화 장치와 캡슐 해제 장치 사이에서 트래픽 흐름 또는 컨텍스트를 식별합니다. 그 값을 어떻게 얻는지는 문서 범위 밖입니다.

표준은 이 명명 위험에 대해 이례적으로 직접적입니다. Key라고 불리지만 이 필드는 보안을 제공하지 않습니다. 현지 합의에 따라 테넌트, 서비스 또는 흐름을 구분할 수 있지만, GRE를 만들 수 있는 관찰자는 다른 메커니즘이 패킷을 보호하지 않는 한 그 숫자를 복사하거나 만들어낼 수 있습니다. 이를 비밀번호처럼 다루면 컨텍스트 레이블이 가짜 신뢰 경계로 변합니다.

선택적 시퀀스 넘버는 다른 채무를 지닙니다. 신뢰할 수 없는 순차 전달을 지원할 수 있습니다. 수신자는 성공적으로 캡슐 해제된 마지막 값을 유지하고, 더 오래된 값은 폐기하며, 유한한 재정렬 버퍼를 사용할 수 있습니다. 이 동작은 재정렬에 민감한 페이로드에 도움이 되지만 흐름당 상태와 새로운 서비스 거부 경로를 더합니다. 주입된 높은 시퀀스 값은 정상 트래픽이 오래된 것처럼 보이게 만들 수 있습니다.

RFC 2890은 이 공격에 대한 보호를 위해 IPsec AH 또는 ESP를 요구합니다. 또한 상위 계층이 이미 순서를 제공하거나 재정렬을 허용하는 곳에서 GRE 순서를 사용하지 말라고 경고합니다. 따라서 선택적 비트는 공짜 기능이 아니라 시스템 판단입니다. 이를 켜면 양쪽 종단에서 메모리, 버퍼링, 공격 표면, 로깅, 장애 의미가 바뀝니다.

필터링은 의미가 보이는 곳으로 옮겨진다

RFC 2784는 경로 필터링은 보통의 IPv4 라우팅과 계속 정렬되지만, 패킷 필터링은 GRE 패킷 내부를 검사하거나 터널 종단에서 일어나야 한다고 말합니다. 언더레이는 전달 헤더에 대해 올바른 판단을 하면서 내부 프로토콜, 주소, 포트에 대해 아무것도 모를 수 있습니다.

이는 책임의 일반적 실패를 만듭니다. 전송팀은 바깥 경로가 제한되어 있다고 말합니다. 보안팀은 방화벽이 두 주소 사이의 GRE만 허용한다고 말합니다. 서비스팀은 안쪽 트래픽이 두 판단을 물려받았다고 가정합니다. 실제로 어느 바깥 사실도 캡슐 해제 후 어떤 페이로드가 허용되는지 정의하지 않습니다.

책임 있는 설계는 허용되는 내부 프리픽스와 프로토콜, 캡슐 해제가 일어나는 위치, 캡슐 해제 전후에 어느 장치가 검사하는지, IPsec이 전달 패킷을 인증하는지 암호화하는지를 기록합니다. “GRE up”은 보안 상태가 아닙니다. 증거는 두 계층 모두에서의 실효 정책과 실제로 그것을 통과한 패킷입니다.

IPv6는 생략된 세부사항을 활성화 게이트로 바꿨다

Carlos Pignataro, Ron Bonica, Suresh Krishnan이 나중에 집필한RFC 7676은 IPv6를 GRE 페이로드 또는 전달 프로토콜로 지정했습니다. 이는 Li의 저작 기록에 속하지 않습니다. 여기서 가치를 지니는 이유는 얇은 기본 계약이 새로운 네트워크 계층과 만났을 때 무엇이 일어나는지 보여주기 때문입니다.

IPv6가 페이로드일 때 GRE 터널은 페이로드를 단편화하지 않고 1280옥텟 IPv6 패킷을 진입점에서 이그레스까지 운반할 수 있어야 합니다. 진입점은 활성화 전에 그 능력을 검증하고 이후 주기적으로 검증한 뒤 그에 따라 활성화하거나 비활성화해야 합니다. GRE MTU는 언더레이 경로 MTU에서 전달 및 GRE 오버헤드를 뺀 값입니다. 그 값보다 큰 페이로드가 이동할 수 없다면 진입점은 그것을 폐기하고 사용 가능한 값을 담은 ICMPv6 Packet Too Big 메시지를 돌려보내야 할 수 있습니다.

작은 헤더가 패킷 크기의 문제를 없애지는 않았습니다. 오버헤드를 계산 가능하게 만들고, 테스트와 신호 전달의 책임을 종단에 남겼습니다. Packet Too Big 메시지가 유실되면 전형적인 터널 착시가 생길 수 있습니다. 작은 프로브는 통과하고, 더 큰 애플리케이션 흐름은 멈추며, 제어 평면은 여전히 녹색입니다.

체크섬 선택은 또 다른 경계를 드러냅니다. 안쪽 전송 계층이 이미 데이터를 검사하는 곳에서 GRE 체크섬을 끄면 계산을 절약할 수 있습니다. 그러나 IPv6 전달 헤더에는 체크섬이 없고, 어차피 GRE 체크섬이 그것을 덮지도 않습니다. RFC 7676은 손상된 바깥 목적지가 잘못된 VPN 제공자 에지 라우터에 도달하는 드물지만 실질적인 사례를 분석합니다. 겹치는 사설 주소가 있다면 페이로드가 잘못된 VPN에서 유효해질 수 있습니다. 문서는 운영자에게 그 위험을 수용하지 않은 상태에서는 GRE over IPv6를 배포하지 말라고 지시하고, 종단 간 페이로드 인증을 완화책으로 언급합니다.

표준은 이 시나리오가 특정 네트워크에 존재한다고 약속하지 않습니다. 운영자가 답해야 할 질문을 확립할 뿐입니다. 범용 운반은 결코 범용 안전과 동치가 아닙니다.

얇은 조율은 가장자리에서 두터운 증거를 요구한다

Lu Heng의 이후 저작Minimum Initial Specification, Localized Future Decision, and Voluntary Adoption은 GRE에 대해 Sofia Ren에게 유용한 관점을 제공합니다. 공통 계층은 좁게 유지될 수 있습니다. 레이아웃, 버전, 페이로드 타입, 선택적 필드, 거부 동작입니다. 각 네트워크는 자유로우며, 동시에 터널이 왜 존재하는지, 누가 운영하는지, 어떤 내부 트래픽을 수용하는지, 전달을 어떻게 보호하는지, 이 의존성을 언제 폐기할지를 판단해야 합니다.

그 귀결은Running-Code Primacy에서 나옵니다. 구성 객체는 의도일 뿐입니다. 증거는 바깥 경로, 송출된 GRE 플래그, 프로토콜 타입, 실효 오버헤드, 선택적 컨텍스트, 보안 연관, 내부 경로, 필터 판단, MTU 피드백, 카운터, 애플리케이션 결과를 연결해야 합니다.

이 Lu Heng 문헌들은 인용된 RFC들 너머의 Li의 사적 의도나 합의에 대한 증거가 아니라, 이후의 편집적 틀입니다. 그 가치는 책임의 배분을 명확히 하는 데 있습니다. 표준은 공유 봉투를 소유합니다. 구현은 올바른 파싱과 상태를 소유합니다. 운영자는 봉투가 존재할 수 있게 되는 모든 이유를 소유합니다.

GRE가 살아남은 이유는 자신의 페이로드를 지배하려 하지 않았기 때문입니다. 그 절제 덕분에 휴대성을 얻었습니다. 동시에 4바이트 헤더 안에 부주의한 배포를 구원해줄 어떤 기관도 남기지 않았습니다. 봉투는 거의 무엇이든 운반할 수 있습니다. 그것이 운반되어야 함을 증명할 수 있는 것은 오직 종단뿐입니다.

출처