AdguardTeam / AdguardTeam/AdGuardHome

Retry without ECS when `REFUSED` returned from resolver (RFC 7871 7.1.3)

Abierto
#3,652 5 comentarios 6 reacciones 1 asignado Reclamado por @EugeneOne1 Ver en GitHub
enhancement P4: Low
Lenguaje dominante
TypeScript
Estrellas
36.9k
Forks
2.5k
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

### Problem Description

Per https://groups.google.com/g/public-dns-announce/c/h4XLjnWvAp8 (Jan 15, 2020) and RFC 7871 section 7.1.3, resolvers including Google DNS returns `REFUSED`...

> we plan to start sending REFUSED responses to queries with non-zero address ECS that is not a prefix of the source address

I came across this when I realized that Google was discarding subnet info in ECS data despite it being valid, for certain domains.

If I make this query from my subnet (without ECS) it returns properly.
However with ECS, for this specific Akamai domain:

```
2021/09/24 20:20:00.049785 1#561 [debug] github.com/AdguardTeam/dnsproxy/proxy.(*Proxy).handleTCPConnection(): Start handling the new tls connection xx.107.179.25:37562
2021/09/24 20:20:00.123522 1#561 [debug] github.com/AdguardTeam/dnsproxy/proxy.(*Proxy).logDNSMessage(): IN: ;; opcode: QUERY, status: NOERROR, id: 27442
;; flags: rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;a1806.dscb.akamai.net. IN A

;; ADDITIONAL SECTION:

;; OPT PSEUDOSECTION:
; EDNS: version 0; flags: ; udp: 4096
; PADDING: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

2021/09/24 20:20:00.123627 1#561 [debug] etchosts: answer: a1806.dscb.akamai.net -> []
2021/09/24 20:20:00.123662 1#561 [debug] Set ECS data: xx.107.179.0/24
2021/09/24 20:20:00.123708 1#561 [debug] https://dns.google:443/dns-query: sending request A a1806.dscb.akamai.net.
2021/09/24 20:20:00.140740 1#561 [debug] https://dns.google:443/dns-query: response: ok
2021/09/24 20:20:00.140815 1#561 [debug] github.com/AdguardTeam/dnsproxy/proxy.exchangeWithUpstream(): upstream https://dns.google:443/dns-query successfully finished exchange of ;a1806.dscb.akamai.net. IN A. Elapsed 17.101508ms.
2021/09/24 20:20:00.140873 1#561 [debug] github.com/AdguardTeam/dnsproxy/proxy.(*Proxy).replyFromUpstream(): RTT: 17.174509ms
2021/09/24 20:20:00.140898 1#561 [debug] ECS option in response: xx.107.179.0/0
2021/09/24 20:20:00.140988 1#561 [debug] ipset: starting processing
2021/09/24 20:20:00.141011 1#561 [debug] ipset: added 0 new ipset entries
2021/09/24 20:20:00.141063 1#561 [debug] github.com/AdguardTeam/dnsproxy/proxy.(*Proxy).logDNSMessage(): OUT: ;; opcode: QUERY, status: REFUSED, id: 27442
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;a1806.dscb.akamai.net. IN A

;; ADDITIONAL SECTION:

;; OPT PSEUDOSECTION:
; EDNS: version 0; flags: ; udp: 4096
```

I was able to use dns.google to actually verify this issue:

```json
// Using ECS xx.107.179.0/24
{
"Status": 5,
"TC": false,
"RD": true,
"RA": true,
"AD": false,
"CD": false,
"Question": [
{
"name": "a1806.dscb.akamai.net.",
"type": 1
}
],
"edns_client_subnet": "xx.107.179.0/0"
}
```

### Proposed Solution

1. Implement RFC 7871 section 7.1.3
2. Denote in the UI that the query was done without ECS (if enabled)

### Additional Information

**EDIT**: This seems to be the case with Google Public DNS and Akamai domains only (`akamai.net`, `akamaiedge.net`, `akadns.net`, etc)

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.