• EDNS(Extension Mechanisms for DNS)는 인터넷 엔지니어링 커뮤니티에서 프로토콜의 기능을 향상시키기에는 너무 제한적이라고 판단한 크기 제한이 있는 Domain Name System(DNS) 프로토콜의 여러 매개변수 크기를 확장하기 위한 개발
  • 1999년 인터넷 엔지니어링 태스크 포스에 의해 EDNS0이라고도 알려진 RFC 2671로 발표
  • 2013년에 RFC 6891에 의해 약어가 EDNS(0)으로 약간 변경되어 업데이트
  • RFC 참고 자료 : https://www.ietf.org/rfc/rfc2671.txt

 

 

1. EDNS Motivation

  • Domain Name System(DNS)은 1980년대 초에 처음 개발 → DNS 초기 개발된 설정 제한이 새로운 기능을 추가하는 데 큰 장애물
  • 기본 DNS 프로토콜에서는 사용할 수 있는 여러 플래그 필드(several flags fields), 리턴 코드(return codes) 및 레이블 유형(label types)의 크기 제한으로 인해 일부 바람직한 기능을 지원하지 못함
  • UDP로 전송되는 DNS 메시지는 인터넷 프로토콜(IP) 및 전송 계층 헤더(transport layer headers)를 고려하지 않고 512바이트로 제한
  • TCP(전송 제어 프로토콜)를 사용하는 가상 회로 전송(virtual circuit transport)에 의존하면 오버헤드가 크게 증가
  • 1999년에 폴 빅시는 새로운 플래그(new flags)와 응답 코드(response codes)를 허용하고 이전 구현과 역호환되는 프레임워크에서 더 긴 응답을 지원하기 위해 DNS 확장을 제안

 

 

2. EDNS 매키니즘(Mechanism)

  • DNS 헤더에 새로운 플래그를 추가할 수 없기 때문에 EDNS는 DNS 메시지의 "추가 데이터(additional data)" 섹션에 포함된 pseudo-Resource Records ("pseudo-RR"s)의 형태로 DNS 메시지에 정보를 추가
  • 섹션은 요청과 응답 모두에 존재
  • EDNS는 단일 의사 RR 유형(single pseudo-RR type)을 도입 OPT.
  • pseudo-RRs인 OPT 유형 RR(OPT type RRs)은 어떤 영역 파일에도 나타나지 않으며, DNS 참여자(participants)가 조작한 메시지에만 존재

 

  • 이전 DNS 응답자(responders)는 요청에 알 수 없는 OPT 유형의 RR(OPT type RRs)을 무시하고 최신 DNS 응답자(responders)는 요청에 OPT가 없는 한 응답에 OPT를 포함하지 않음
  • 요청에 OPT가 있다면 최신 요청자(requester)가 응답에서 OPT로 무엇을 해야 하는지 알고 있다는 것을 의미

 

  • OPT 의사 레코드(pseudo-record)는 최대 16개의 플래그(flags)를 위한 공간을 제공하며 응답 코드(response code)를 위한 공간을 확장함
  • UDP 패킷의 전체 크기(The overall size of the UDP packet)와 버전 번호(현재 0)가 OPT 레코드에 포함
  • 가변 길이 데이터 필드(variable length data field)를 사용하면 향후 버전의 프로토콜에 추가 정보를 등록할 수 있음
  • DNS 프로토콜은 DNS 패킷의 처음 두 비트로 정의되는 두 가지 레이블 유형 제공(RFC 1035)→ 00(standard label)과 11(compressed label)
  • EDNS는 확장 레이블로 레이블 유형 01을 도입
  • 첫 번째 바이트의 하위 6비트는 최대 63개의 새로운 확장 레이블을 정의하는 데 사용될 수 있음

 

2.1. EDNS 사용하지 않는 경우(Without EDNS0 Client Subnet Option)

 

2.2. EDNS 사용하는 경우(With EDNS0 Client Subnet Option)

 

3. EDNS Example

  • dig 명령으로 표시되는 OPT 의사 레코드의 예
    • EDNS: version: 0 → EDNS0을 완전히 준수함을 표시
    • flags: do → DNSSEC OK가 설정되었음을 표시
    • flags: do → DNSSEC를 완전히 준수함을 표시
      ;; OPT PSEUDOSECTION:
      ; EDNS: version: 0, flags: do; udp: 4096

 

 

4. EDNS Applications

  • EDNS는 DNSSEC(DNS 보안 확장;DNS Security Extensions)를 구현하는 데 필수
  • EDNS는 resolvers에서 name servers로 클라이언트의 지리적 위치에 대한 일반 정보를 EDNS Client Subnet(ECS) 옵션의 형태로 전송하는 데 사용
  • EDNS를 사용하여 DNS message에 얼마나 많은 패딩이 있어야 하는지 설정하고, TCP 연결을 얼마나 오래 유지해야 하는지 표시하는 제안

 

 

5. EDNS Issues

  • 방화벽은 최대 DNS 메시지 길이를 512바이트로 가정하고 더 긴 DNS 패킷을 차단하기 때문에 실제로 방화벽을 통과하는 EDNS를 사용할 때 어려움이 발생할 수 있음
  • EDNS는 상대적으로 작은 요청 패킷에 비해 매우 큰 응답 패킷을 용이하게 하기 때문에 EDNS의 도입으로 반사 서비스 거부 공격(reflected denial-of-service attack)의 일종인 DNS 증폭 공격(DNS amplification attack)이 가능해졌음
  • IETF DNS 확장 작업 그룹(dnsext)은 EDNS0의 개선 작업을 마쳤으며, 이는 RFC 6891로 게시

 

참고 자료

'GTM과 DNS' 카테고리의 다른 글

cloudflare DNS와 google DNS의 cache flush  (0) 2023.09.16
Bind DNS recursion 설정  (0) 2023.09.16
DNS의 TTL(Time To Live)  (0) 2023.09.16
DNS 응답 코드와 의미  (0) 2023.09.16
DNS TXT Record(DNS 텍스트 레코드)  (0) 2023.09.16

+ Recent posts