요약

  • DNSOP GREASE 초안의 03차 개정본은 DNS 필드를 아직 할당되지 않은 값으로 행사하여, 구현체와 미들박스가 오늘의 할당 내역을 하드코딩하지 않도록 하는 방안을 제안한다. 이는 활성 인터넷 초안(Internet-Draft)이며, RFC, 할당 결정, 배포 지시가 아니다.
  • 실패 처리에는 실질적인 대가가 따른다. 순차 재시도는 지연을 늘릴 수 있고, 병렬 일반 질의는 응답 시간을 지키는 대신 트래픽을 늘리며, 응답 서버 주도 그리싱은 응답 서버가 관찰할 수 없는 다운스트림 장애를 유발할 수 있다.
  • 그리싱이 구현 기본값이 되기 전에, 기한이 정해진 실험 헌장이 확장 지점, 값 선정 알고리즘, 트래픽·비용 상한, 텔레메트리, 핑거프린팅 통제, 종료일, 중단 조건, 롤백 담당자를 기록해야 한다. 이것은 Daniel Kade의 거버넌스 제안이며 IETF 문서가 아니다.

프로토콜 확장 지점은 설계된 당일에 실패하는 일이 드물다. 실패는 수년 뒤, 소프트웨어가 “자신이 본 적 있는 값만 가능하다”고 학습한 이후에 일어난다. 구현체는 명세가 그 값을 무시하라고 지시했음에도 낯선 숫자를 거부한다. 미들박스는 이해하지 못하는 필드를 재작성한다. 의도적으로 열어둔 공간을 누군가 사용하려 들 때까지, 설치된 기반은 건강해 보인다.

GREASE는 이 시점을 뒤집는다. 실제 확장이 나와서 관절이 녹슬어 굳었음을 발견하기를 기다리는 대신, 구현체가 유용한 프로토콜 의미를 지니지 않으며 무시되어야 하는 값을 미리 보내는 것이다. 값이 아직 버려도 되는 동안에 내성 문제가 드러난다. RFC 8701은 이 패턴을 TLS에 대해 확립했으며, 클라이언트가 광고할 수 있는 희소한 값들을 예약했다. 정상적인 서버는 계속 동작하고, 결함이 있는 서버는 미래의 기능이 이 경로에 의존하기 전에 자신을 드러낸다.

활성 DNSOP 초안Greasing Protocol Extension Points in the DNS는 이 규율을 DNS에 어떻게 적용할 수 있을지를 묻는다. 03차 개정본은 2026년 7월 6일에 공표되어 2027년 1월 7일에 만료된다. 미완의 결정을 남긴 워킹 그룹 인터넷 초안이다. RFC도, 모든 세부 사항에 대한 합의 증명도, 특정 실험을 프로덕션 트래픽에 켤 수 있는 허가도 아니다.

이 지위가 중요한 이유는, 초안이 거버넌스가 아직 필요한 부분에서 가장 솔직하기 때문이다. 초안은 유용한 대상, 재시도 선택지, 텔레메트리를 제시한다. 동시에 예약 범위, 세부 동작, IANA 조치는 미해결로 남겨둔다. 이 두 상태 사이의 간극은, 매력적인 구현 기능이 운영상의 거래가 수락되기도 전에 기본값이 되어버릴 수 있는 바로 그 자리다.

하나의 기술, 여러 가지 서로 다른 와이어 계약

DNS에는 하나의 범용 확장 버킷이 없다. 03차 개정본은 일곱 가지 가능한 표면을 나열한다: DNS 헤더 플래그의 남은 비트, Opcode, EDNS 버전, EDNS 헤더 플래그, Class, 리소스 레코드 타입, EDNS 옵션 코드. 이 공간들의 크기는 극적으로 다르다. 단일 플래그에는 거의 여유가 없다. 16비트 타입과 옵션에는 현재 미할당 값이 수만 개 있다. 어떤 공간은 내부 구조를 갖고, 어떤 값들은 이미 예약·사설 사용·실험적 의미를 지닌다.

이 목록은 의도적으로 선별적이다. 이 요소들의 알 수 없는 값은 규격을 준수하는 수신자가 투명하게 허용할 것으로 기대된다. RCODE와 확장 RCODE는 응답자의 상태이기 때문에 제외된다. 이들을 바꾸면 질의자가 답변을 이해하는 방식 자체가 바뀌며, 단지 선택적 값이 무시되는지를 시험하는 일에 그치지 않는다.

이 경계 덕분에 GREASE를 “형태가 틀어진 DNS를 보낸다”는 쉽지만 그릇된 묘사를 막을 수 있다. 제안된 값들은 수신 시스템이 무시하도록 되어 있기 때문에, 역설적으로 실험에는 의미를 갖는다. 수신 시스템이 이를 무시하고 상호 운용한다면, 확장 관절은 여전히 움직인다. 실패한다면, 그 결과는 미래의 변경을 가로막을 수 있는 내성을 특정해 준다.

그렇다고 모든 필드를 같은 방식으로 행사해야 하는 것은 아니다. 알 수 없는 EDNS 옵션은 데이터도 함께 실으므로, 옵션 페이로드에는 별도의 생성 규칙이 필요하다. 새 질의 타입은 무시되는 값을 붙이는 것만으로는 부족하고, 별도의 질의를 만들어야 할 수 있다. 1비트 플래그는 16비트 레지스트리와 같은 예약 전략을 지원할 수 없다. 따라서 승인의 단위는DNS GREASE라는 이름의 광범위한 스위치가 아니라, 정확한 확장 지점과 시험 동작이어야 한다.

프로덕션 답변과 실험은 다른 경로를 택할 수 있다

03차 개정본은 리졸버가 내성에 대응하는 두 가지 방식을 개략한다. 첫째는 순차 방식이다. 리졸버는 그리싱된 질의를 보내고, 실패하면 일반적으로 미할당 확장 없이 다시 시도한다. 이는 호환성을 지키지만, 첫 시도의 실패를 지연이라는 형태로 사용자에게 지울 수 있다. 재시도는 첫 결과를 별도로 보존하지 않는 한, 일반 서비스 지표 속에서 결함을 가릴 수도 있다.

둘째는 병렬 방식이다. 리졸버는 그리싱된 질의와 함께 일반 질의를 보낸다. 일반 응답으로 리졸빙을 수행하고, 그리싱 결과는 텔레메트리 용도로만 기록한다. 사용자는 실험이 실패하기를 기다릴 필요가 없지만, 권위 측에는 추가 질의가 도착한다. 충분히 낮은 샘플링 비율에서는 그 비용이 적을 수 있다. 그래도 실험을 선택하지 않은 인프라에 배정되는 비용이긴 하다.

이 차이는 구현 세부 사항이 아니다. 순차 모드는 지연 예산을 소모하고, 병렬 모드는 질의량과 처리 예산을 소모한다. 둘 다 로깅, 분석, 인시던트 대응 주의력을 소모한다. “천분의 일만 샘플링”이라고만 쓴 헌장은 어느 예산이 승인되었는지 보여줄 수 없다.

그 비율조차 미완이다. 초안은 트래픽의 샘플링된 일부만 필요하다고 말하며, “아마 1000건 중 1건?”이라는 잠정적 표현을 제안한다. 물음표는 기록에 그대로 남아야 한다. 그것은 표준 안전 임계치도, 용량 계산도 아니며, 동일한 비율이 소규모 리졸버, 글로벌 공개 서비스, 기업 배포에 모두 맞다는 증거도 아니다.

유용한 시험 예산은 트래픽 클래스에서 출발한다. 고중요 도메인명, 취약한 권위 서버 시스템, 장애 기간, 지연에 민감한 클라이언트는 제외가 필요할 수 있다. 운영자는 백분율과 경질 상한을 구분해야 한다: 비율이라도 대량 리졸버에서 큰 버스트를 만들 수 있다. 병렬 질의에는 목적지별 및 전역 최대 추가 비율이 필요하고, 순차 시험에는 지연·실패 상한이 필요하다. 둘 다 소프트웨어 릴리스를 기다리지 않고 작동하는 서킷 브레이커가 필요하다.

두 방향은 대칭적이지 않다

DNS 초안의 대부분은 리졸버나 질의자가 주도하는 그리싱을 다룬다. 개시자는 응답이 도착하는지 관찰할 수 있고, 그리싱 결과를 정상 재시도나 병렬 질의와 비교할 수 있다. 그것도 완전한 증거는 아니지만, 최소한 실험을 수행하는 주체가 근접한 결과를 볼 수는 있다.

DNS 응답자도 답변에 예상치 못한 플래그, 옵션, 버전을 넣을 수 있다. 이는 표적 측정에 도움이 될 수 있지만, 사각지대를 옮긴다. 응답자는 질의자가 답변을 수용했는지, 다른 서버로 재시도했는지, 조용히 실패했는지, 다운스트림 애플리케이션에 장애를 일으켰는지 알지 못한다. 평범한 권위 서버 로그로는 마지막 단계를 재구성할 수 없다.

그래서 03차 개정본은 응답자 주도 그리싱은 기본적으로 비활성화해야 한다고 말한다. 이 문장은 초안을 감싸는 모든 제품 포장을 통과해서 살아남아야 한다. “GREASE 지원”이라는 벤더 토글이 리졸버와 응답자 동작을 합쳐서는 안 된다. 아웃바운드 리졸버 시험에 동의한 운영자가, 자신의 권위 서비스가 보내는 답변을 수정하는 데까지 동의한 것은 아니다.

응답자 실험에는 더 엄격한 헌장이 필요하다: 명명된 시험 존 또는 트래픽 클래스, 외부 클라이언트 관측 경로, 더 낮은 상한, 신속한 비활성화, 그리고 평범한 답변이 계속 제공된다는 증명. 소유자가 다운스트림 실패를 관찰할 수 없는 서버 측 시험에는 방어 가능한 자동 확대 경로가 없다.

무작위 값과 예약 값은 서로 다른 리스크를 움직인다

초안은 DNS가 GREASE용 범위를 예약할지, 아니면 현재 미할당 공간에서 무작위로 선택할지 아직 결정하지 못했다. 각 접근은 하나의 보호를 얻기 위해 다른 노출을 감수한다.

예약 값은 트레이스에서 인식하기 쉽고, 예약 상태인 동안 진짜 의미를 부여받을 수 없다. 동시에 그 자체가 하드코딩된 예외가 될 수도 있다. 수신자가 알려진 GREASE 범위만 무시하는 법을 배우고 다른 모든 알 수 없는 값을 계속 거부할 수 있다. 그러면 시험은 초록불이지만, 원래 행사하려 했던 더 일반적인 허용성은 증명되지 않는다.

미할당 공간에서의 무작위 선택은 인식 가능한 패턴을 넘어선다. 대신 IANA가 나중에 그 값을 진짜 확장에 할당할 위험이 있다. 그 숫자를 무시하도록 학습된 소프트웨어는, 숫자가 의미를 갖게 된 뒤에도 무시를 계속할 수 있다. 초안은 이후 할당과의 충돌 전에 작업을 은퇴시키도록, 사전 구성되거나 구성 가능한 시험 종료일을 제안한다.

이것은 DNS 전체에 대한 하나의 결정이 아니다. 어떤 필드는 유용한 범위를 내줄 만큼 크지 않다. 어떤 타입 공간은 구조화되어 있어서, 한 블록으로는 관련 클래스마다 행사할 수 없다. IANA DNS 파라미터 레지스트리는 이 필드들에 별도의 표와 할당 절차를 둔다. 이 글의 조사 시점 기준으로, 초안이 상정하는 DNS 전역 GREASE 예약은 아직 제공되지 않았다.

헌장에 레지스트리 스냅샷을 넣는 일은 두 가지를 한다. 승인 시점에 개시자가 무할당이라고 믿은 것이 무엇인지 증명한다. 그리고 비교 대상을 만든다. 관련 할당이 바뀌면, 한번 비어 있던 숫자가 이제 공개적 의미를 갖는다는 사실을 운영자가 기억해야만 하도록 두는 대신, 시험이 자동으로 은퇴하거나 재계산해야 한다.

따라서 종료일은 프로젝트 관리 장식이 아니다. 그것은 와이어 안전 설계의 일부다. “비활성화할 때까지 실행”은 미래의 레지스트리 감시를, 수년 뒤 그 구현체를 우연히 소유하게 된 사람에게 조용히 떠넘긴다. 자동 만료는 갱신을, 새 레지스트리 스냅샷과 새 운영 증거에 근거한 명시적 결정으로 만든다.

텔레메트리는 그 교란을 정당화할 수 있어야 한다

GREASE의 목적은 관찰이다. 결과가 수선을 이끌 만큼 충분히 측정되지 않는다면, 운영자는 공공의 이익을 받지 못한 채 실패만 감당한 것이다.

일반 프로토콜 그리싱 초안은 좁은 균형을 기술한다. 너무 드물게 보내면 생긴 오류가 기준 노이즈 속에 사라진다. 너무 일관되게 보내면 수신자가 패턴을 특수 처리할 수 있다. DNS에는 또 하나의 어려움이 있다: 재시도가 첫 교환이 실패했음에도 사용자에게 보이는 요청이 성공한 것처럼 보이게 할 수 있다. 따라서 서비스 성공과 실험 성공은 분리된 측정이다.

최소 이벤트는 확장 지점, 생성된 값 클래스, 선택 버전, 시각, 질의 방향, 재시도 또는 병렬 분기, 근접 응답, 경과 시간, 그리고 평범한 답변이 제공되었는지 여부를 기록해야 한다. 결함이 있는 구현체를 찾을 만큼의 목적지 그룹핑을 유지하되, 질의된 모든 도메인명이나 리졸버 경로를 무기한 감시 기록으로 만들지는 않아야 한다.

실패 레이블에는 절제가 필요하다. 타임아웃은 미들박스를 식별하지 않는다. FORMERR는 어느 구성요소가 메시지를 거부했는지 증명하지 않는다. 정상 재시도는 원래 경로가 미래의 실제 확장에도 안전했을 것이라 증명하지 않는다. 이 증거는 그리싱 트래픽과 대조 트래픽 사이의 재현 가능한 차이를 확립할 수 있다; 귀속에는 더 많은 작업이 필요하다.

프라이버시도 설계에 속하며, 나중의 고지에 속하는 것이 아니다. 03차 개정본은 무작위가 아닌 선택이 관측자가 리졸버 구현체를 핑거프린팅하게 할 수 있다고 경고한다. 더 넓은 그리싱 초안은 파라미터 변동성이 핑거프린팅에 영향을 줄 수 있다고 적는다. 안정적인 값, 위치, 주기는 실패 재현을 쉽게 만들면서도 인식 가능한 제품 서명을 만들 수 있다. TLS 지침도 다양성과 결정성 사이의 트레이드오프를 지적한다: 연결별 변동은 재시도가 간헐적 버그를 가리게 할 수 있고, 릴리스 안정 동작은 더 적은 경우를 더 일관되게 행사한다.

헌장은 완전한 예측불가능성과 완전한 재현성을 둘 다 약속하는 대신, 이 트레이드오프를 기록해야 한다. 헌장은 유한한 에포크 내에서 동작을 회전하고, 배포별 비밀을 노출하지 않고 알고리즘 클래스를 공표하며, 텔레메트리를 집계하고, 도메인명 수집을 최소화하고, 원시 이벤트를 특정 실패 진단에 필요한 기간만큼만 보관할 수 있다.

폴백은 서비스를 지키면서 교훈을 약화시킬 수 있다

DNS 구현체는 확장을 거부하는 피어를 살아남기 위해 오래전부터 폴백을 써왔다. 운영적으로 매력적이다: 낯선 기능을 끄고 다시 시도하면 된다. 그러나 이는 생태계에 “변화 거부에는 지속되는 대가가 없다”고 가르친다.

보안 문제는 비활성화된 확장이 중요한 것을 보호할 때 더 날카롭다. 03차 개정본은 공격자가 보안 기능을 조용히 꺼 버리는 경로를 유도할 수 있다고 경고한다. GREASE는 이러한 호환성 실패를 드러내서, 구현자가 미래 확장에 대해 안전하지 않은 폴백을 결국 제거할 수 있게 하려는 것이다.

그러나 문제를 발견하는 행위가 치료를 자동으로 승인하지는 않는다. 운영자는 고장 난 권위 서비스를 격리하거나, 구현 결함을 보고하거나, 그쪽 트래픽을 줄일 수 있다. 내성을 일으킨 미들박스나 소프트웨어 릴리스를 통제하지 못할 수도 있다. 폴백을 즉시 제거하면 유지보수 분쟁이 사용자에게 보이는 서비스 중단으로 전가될 수 있다.

헌장은 세 가지 상태를 분리해야 한다: 내성을 관찰한다; 그 즉각적인 서비스 영향을 억제한다; 폴백을 언제, 어떻게 철회할지 결정한다. 첫째는 측정이다. 둘째는 인시던트 관리다. 셋째는 더 많은 이해관계자와 더 큰 폭발 반경을 가진 호환성 정책 결정이다.

GREASE 실험 헌장

헌장은 권한에서 시작한다. 시험을 승인하는 리졸버 또는 응답자 운영자, 이를 구현하는 벤더나 팀, 이를 멈출 수 있는 소유자, 결과를 평가할 책임자를 명명한다. 코드 출시는 모든 운영자가 동일한 서비스 거래를 수락했다는 증거가 아니다.

다음은 정확한 와이어 객체다: 확장 지점, 후보 값 집합, 선정 알고리즘, 해당 시 페이로드 생성 규칙, 질의 방향, 구현 버전. 현재 IANA 레지스트리 스냅샷은 그 옆에 해시되거나 보관된다. 예약, 사설 사용, 실험, 단순 미할당 값은 하나의 버킷으로 뭉개서는 안 된다.

트래픽 범위가 뒤따른다. 헌장은 포함·제외 질의 클래스, 백분율과 경질 비율 상한, 목적지 캡, 단계적 배포, 관측 기간을 기록한다. 대조가 이후 재시도인지 병렬 일반 질의인지 명시한다. 추가 지연, 타임아웃, 중복 트래픽, CPU, 로그, 운영 알림에 대해 별도의 예산을 배정한다.

텔레메트리 항목은 성공과 실패가 무엇을 의미하는지 정한다. 대조 트래픽과의 비교를 유지하고, 보관·공유 경계를 정하고, 질의명 수집을 제한하며, 리졸버 핑거프린팅을 다루고, 모호한 타임아웃이 명명된 운영자를 비난하는 고발로 공표되지 않도록 한다.

마지막으로 헌장은 시간을 정의한다. 각 시험에는 시작, 기본 종료일, 갱신 소유자, 현재 레지스트리 재확인, 시험별 킬 스위치, 자동 충돌 은퇴가 있다. 중단 조건에는 사용자에게 보이는 실패 증가, 지연 퇴행, 목적지 과부하, 텔레메트리 상실, 실험 트래픽과 정상 트래픽을 구분하지 못하는 상태가 포함될 수 있다. 롤백 경로는 샘플을 확대하기 전에 시행되어야 한다.

그 결과는 무분별한 배포의 허가증이 아니다. 그것은 거래의 압축된 기록이다: 오늘의 사용자와 운영자는 한정된 시험을 감담하여, 내일의 DNS가 여전히 변할 수 있게 한다. 그 거래가 진술되고, 측정되고, 멈출 수 없다면, 기본값이 될 준비가 되지 않은 것이다.

출처

  1. Greasing Protocol Extension Points in the DNS — 03차 개정본
  2. DNS GREASE 초안의 Datatracker 기록
  3. DNS GREASE 문서 이력
  4. DNSOP 활성 문서
  5. DNSOP 헌장
  6. RFC 8701 — TLS용 GREASE
  7. RFC 6891 — DNS 확장 메커니즘
  8. Maintaining Protocols Using Grease and Variability — 06차 개정본
  9. IANA 도메인 네임 시스템 파라미터