diff --git a/CHANGELOG.md b/CHANGELOG.md index b5094c99..04d41bf5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,10 +26,16 @@ NOTE: Add new changes BELOW THIS COMMENT. ### Added - Ability to set client's custom DNS cache ([#6362], [dnsproxy#169]). +- Ability to disable plain-DNS serving through configuration file if an + encrypted protocol is already used ([#1660]). - Ability to specify rate limiting settings in the Web UI ([#6369]). +### Changed + #### Configuration changes +- The new property `dns.serve_plain_dns` has been added to the configuration + file ([#1660]). - The property `dns.bogus_nxdomain` is now validated more strictly. - Added new properties `clients.persistent.*.upstreams_cache_enabled` and `clients.persistent.*.upstreams_cache_size` that describe cache configuration @@ -38,9 +44,10 @@ NOTE: Add new changes BELOW THIS COMMENT. ### Fixed - `ipset` entries family validation ([#6420]). -- Pre-filling the New static lease window with data ([#6402]). +- Pre-filling the *New static lease* window with data ([#6402]). - Protection pause timer synchronization ([#5759]). +[#1660]: https://github.com/AdguardTeam/AdGuardHome/issues/1660 [#5759]: https://github.com/AdguardTeam/AdGuardHome/issues/5759 [#6362]: https://github.com/AdguardTeam/AdGuardHome/issues/6362 [#6369]: https://github.com/AdguardTeam/AdGuardHome/issues/6369 diff --git a/client/src/__locales/be.json b/client/src/__locales/be.json index b6ed5cdd..359712fd 100644 --- a/client/src/__locales/be.json +++ b/client/src/__locales/be.json @@ -307,6 +307,7 @@ "edns_use_custom_ip": "Выкарыстоўваць указаны IP для DNS", "edns_use_custom_ip_desc": "Дазволіць выкарыстоўваць уласны IP для DNS", "rate_limit_desc": "Абмежаванне на колькасць запытаў у секунду для кожнага кліента (0 — неабмежавана)", + "rate_limit_whitelist_placeholder": "Увядзіце па адным адрасе на радок", "blocking_ipv4_desc": "IP-адрас, што вяртаецца пры блакаванню A-запыту", "blocking_ipv6_desc": "IP-адрас, што вяртаецца пры блакаванню AAAA-запыту", "blocking_mode_default": "Стандартны: Адказвае з нулёвым IP-адрасам (0.0.0.0 для A; :: для AAAA), калі заблакавана правілам у стылі Adblock; адказвае з IP-адрасам, паказаным у правіле, калі заблакавана правілам у стылі /etc/hosts-style", diff --git a/client/src/__locales/cs.json b/client/src/__locales/cs.json index 6122dec8..390aafcb 100644 --- a/client/src/__locales/cs.json +++ b/client/src/__locales/cs.json @@ -310,6 +310,16 @@ "edns_use_custom_ip": "Použít vlastní IP pro EDNS", "edns_use_custom_ip_desc": "Povolit použití vlastní IP pro EDNS", "rate_limit_desc": "Počet požadavků za sekundu, které smí jeden klient provádět (0: neomezeno)", + "rate_limit_subnet_len_ipv4": "Délka předpony podsítě pro adresy IPv4", + "rate_limit_subnet_len_ipv4_desc": "Délka předpony podsítě pro adresy IPv4 používané pro omezení rychlosti. Výchozí hodnota je 24", + "rate_limit_subnet_len_ipv4_error": "Délka předpony podsítě IPv4 by měla být mezi 0 a 32", + "rate_limit_subnet_len_ipv6": "Délka předpony podsítě pro adresy IPv6", + "rate_limit_subnet_len_ipv6_desc": "Délka předpony podsítě pro adresy IPv6 používané pro omezení rychlosti. Výchozí hodnota je 56", + "rate_limit_subnet_len_ipv6_error": "Délka předpony podsítě IPv6 by měla být mezi 0 a 128", + "form_enter_rate_limit_subnet_len": "Zadejte délku předpony podsítě pro omezení rychlosti", + "rate_limit_whitelist": "Seznam výjimek pro omezení rychlosti", + "rate_limit_whitelist_desc": "IP adresy vyloučené z omezení rychlosti", + "rate_limit_whitelist_placeholder": "Zadejte jednu IP adresu na řádek", "blocking_ipv4_desc": "IP adresa, která se má vrátit v případě blokovaného požadavku typu A", "blocking_ipv6_desc": "IP adresa, která se má vrátit v případě blokovaného požadavku typu AAAA", "blocking_mode_default": "Výchozí: Odezva s nulovou IP adresou (0.0.0.0 pro A; :: pro AAAA), pokud je blokováno pravidlem ve stylu Adblock; odezva pomocí IP adresy uvedené v pravidle, pokud je blokováno pravidlem /etc/hosts-style", diff --git a/client/src/__locales/da.json b/client/src/__locales/da.json index dcf6722c..da8dad42 100644 --- a/client/src/__locales/da.json +++ b/client/src/__locales/da.json @@ -310,6 +310,16 @@ "edns_use_custom_ip": "Brug tilpasset IP til EDNS", "edns_use_custom_ip_desc": "Tillad brug af tilpasset IP til EDNS", "rate_limit_desc": "Antallet af forespørgsler pr. sekund tilladt pr. klient (værdien 0 = ubegrænset)", + "rate_limit_subnet_len_ipv4": "Længde på undernetpræfiks for IPv4-adresser", + "rate_limit_subnet_len_ipv4_desc": "Længde på undernetpræfiks for IPv4-adresser til hastighedsbegrænsning. Standard er 24", + "rate_limit_subnet_len_ipv4_error": "Længden på IPv4-undernetpræfiks skal være mellem 0 og 32", + "rate_limit_subnet_len_ipv6": "Længde på undernetpræfiks for IPv6-adresser", + "rate_limit_subnet_len_ipv6_desc": "Længde på undernetpræfiks for IPv6-adresser til hastighedsbegrænsning. Standard er 56", + "rate_limit_subnet_len_ipv6_error": "Længden på IPv6-undernetpræfiks skal være mellem 0 og 128", + "form_enter_rate_limit_subnet_len": "Angiv længden på undernetpræfiks til hastighedsbegrænsning", + "rate_limit_whitelist": "Hvidliste til hastighedsbegrænsning", + "rate_limit_whitelist_desc": "IP-adresser undtaget fra hastighedsbegrænsning", + "rate_limit_whitelist_placeholder": "Angiv én IP-adresse pr. linje", "blocking_ipv4_desc": "Returneret IP-adresse for en blokeret A-forespørgsel", "blocking_ipv6_desc": "Returneret IP-adresse for en blokeret AAAA-forespørgsel", "blocking_mode_default": "Standard: Svar med nul IP-adresse (0.0.0.0 for A; :: for AAAA), når blokeret af Adblock-lignende regel. Svar med IP-adressen angivet i reglen, når blokeret af /etc/hosts-lignende regel", diff --git a/client/src/__locales/de.json b/client/src/__locales/de.json index e9ed256c..a495e39e 100644 --- a/client/src/__locales/de.json +++ b/client/src/__locales/de.json @@ -310,6 +310,16 @@ "edns_use_custom_ip": "Benutzerdefinierte IP für EDNS verwenden", "edns_use_custom_ip_desc": "Benutzerdefinierte IP für EDNS zulassen", "rate_limit_desc": "Die Anzahl der Anfragen pro Sekunde, die ein einzelner Client stellen darf. Das Setzen auf 0 bedeutet keine Begrenzung.", + "rate_limit_subnet_len_ipv4": "Länge des Subnetzpräfixes für IPv4-Adressen", + "rate_limit_subnet_len_ipv4_desc": "Subnetpräfixlänge für IPv4-Adressen, die für die Ratebegrenzung verwendet werden. Der Standardwert ist 24", + "rate_limit_subnet_len_ipv4_error": "Die Subnetzpräfixlänge für IPv4-Adressen sollte zwischen 0 und 32 liegen", + "rate_limit_subnet_len_ipv6": "Subnetzpräfixlänge für IPv6-Adressen", + "rate_limit_subnet_len_ipv6_desc": "Subnetpräfixlänge für IPv6-Adressen, die für die Ratebegrenzung verwendet werden. Der Standardwert ist 56", + "rate_limit_subnet_len_ipv6_error": "Die Subnetzpräfixlänge für IPv6-Adressen sollte zwischen 0 und 128 liegen", + "form_enter_rate_limit_subnet_len": "Geben Sie die Subnetzpräfixlänge für die Ratebegrenzung ein", + "rate_limit_whitelist": "Zulassungsliste für die Ratebegrenzung", + "rate_limit_whitelist_desc": "IP-Adressen, die von der Ratebegrenzung ausgeschlossen sind", + "rate_limit_whitelist_placeholder": "Geben Sie eine IP-Adresse pro Zeile ein", "blocking_ipv4_desc": "IP-Adresse, die für eine gesperrte A-Anfrage zurückgegeben werden soll", "blocking_ipv6_desc": "IP-Adresse, die für eine gesperrte AAAA-Anfrage zurückgegeben werden soll", "blocking_mode_default": "Standard: Mit Null IP Adress (0.0.0.0 for A; :: for AAAA) antworten, wenn sie durch eine Regel im Adblock-Stil gesperrt sind; mit der in der Regel angegebenen IP-Adresse antworten, wenn sie durch eine Regel im /etc/hosts-Stil gesperrt wurde", diff --git a/client/src/__locales/es.json b/client/src/__locales/es.json index badc0c42..a3ea63e5 100644 --- a/client/src/__locales/es.json +++ b/client/src/__locales/es.json @@ -310,6 +310,16 @@ "edns_use_custom_ip": "Usar IP personalizada para EDNS", "edns_use_custom_ip_desc": "Permitir el uso de IP personalizadas para EDNS", "rate_limit_desc": "Número de peticiones por segundo permitidas por cliente. Establecerlo en 0 significa que no hay límite.", + "rate_limit_subnet_len_ipv4": "Longitud del prefijo de subred para direcciones IPv4", + "rate_limit_subnet_len_ipv4_desc": "Longitud del prefijo de subred para direcciones IPv4 utilizadas para limitar la velocidad. El valor predeterminado es 24", + "rate_limit_subnet_len_ipv4_error": "La longitud del prefijo de subred IPv4 debe estar entre 0 y 32", + "rate_limit_subnet_len_ipv6": "Longitud del prefijo de subred para direcciones IPv6", + "rate_limit_subnet_len_ipv6_desc": "Longitud del prefijo de subred para direcciones IPv6 utilizadas para limitar la velocidad. El valor predeterminado es 56", + "rate_limit_subnet_len_ipv6_error": "La longitud del prefijo de subred IPv6 debe estar entre 0 y 128", + "form_enter_rate_limit_subnet_len": "Ingresa la longitud del prefijo de subred para limitar la velocidad", + "rate_limit_whitelist": "Lista de permitidos de limitación de velocidad", + "rate_limit_whitelist_desc": "Direcciones IP excluidas de la limitación de velocidad", + "rate_limit_whitelist_placeholder": "Ingresa una dirección IP por línea", "blocking_ipv4_desc": "Dirección IP devolverá una petición A bloqueada", "blocking_ipv6_desc": "Dirección IP devolverá una petición AAAA bloqueada", "blocking_mode_default": "Predeterminado: Responde con dirección IP cero (0.0.0.0 para A; :: para AAAA) cuando está bloqueado por la regla de estilo Adblock; responde con la dirección IP especificada en la regla cuando está bloqueado por una regla de estilo /etc/hosts", diff --git a/client/src/__locales/fi.json b/client/src/__locales/fi.json index e04256c7..dd09ccb9 100644 --- a/client/src/__locales/fi.json +++ b/client/src/__locales/fi.json @@ -1,6 +1,7 @@ { "client_settings": "Päätelaiteasetukset", "example_upstream_reserved": "ylävirta <0>tietyille verkkotunnuksille;", + "example_multiple_upstreams_reserved": "useita ylävirtoja <0>tietyille verkkotunnuksille;", "example_upstream_comment": "kommentti.", "upstream_parallel": "Käytä rinnakkaisia pyyntöjä ja nopeuta selvitystä käyttämällä kaikkia ylävirtapalvelimia samanaikaisesti.", "parallel_requests": "Rinnakkaiset pyynnöt", @@ -143,6 +144,7 @@ "enforced_save_search": "Turvallinen haku pakotettiin", "number_of_dns_query_to_safe_search": "DNS-pyyntöjen määrä, joille turvallinen haku pakotettiin käyttöön", "average_processing_time": "Keskimääräinen käsittelyaika", + "average_upstream_response_time": "Ylävirran keskimääräinen vasteaika", "response_time": "Vasteaika", "average_processing_time_hint": "Keskimääräinen DNS-pyynnön käsittelyyn kulutettu aika millisekunteina", "block_domain_use_filters_and_hosts": "Estä verkkotunnuksia suodattimilla ja hosts-tiedostoilla", @@ -308,6 +310,16 @@ "edns_use_custom_ip": "Käytä omaa IP-osoitetta EDNS:lle", "edns_use_custom_ip_desc": "Salli oman IP-osoitteen käyttö EDNS-mekanismille.", "rate_limit_desc": "Päätelaitteelle sallittu pyyntöjen enimmäismäärä sekunnissa. Arvo 0 tarkoittaa rajatonta.", + "rate_limit_subnet_len_ipv4": "IPv4-osoitteiden aliverkon etuliitteen pituus", + "rate_limit_subnet_len_ipv4_desc": "Aliverkon etuliitteen pituus IPv4-osoitteille, joita käytetään nopeuden rajoittamiseen. Oletusarvo on 24", + "rate_limit_subnet_len_ipv4_error": "IPv4-aliverkon etuliitteen pituuden tulee olla 0–32", + "rate_limit_subnet_len_ipv6": "IPv6-osoitteiden aliverkon etuliitteen pituus", + "rate_limit_subnet_len_ipv6_desc": "Aliverkon etuliitteen pituus IPv6-osoitteille, joita käytetään nopeuden rajoittamiseen. Oletusarvo on 56", + "rate_limit_subnet_len_ipv6_error": "IPv6-aliverkon etuliitteen pituuden tulee olla 0–128", + "form_enter_rate_limit_subnet_len": "Anna aliverkon etuliitteen pituus nopeuden rajoittamista varten", + "rate_limit_whitelist": "Nopeutta rajoittava sallittu luettelo", + "rate_limit_whitelist_desc": "IP-osoitteet, jotka eivät kuulu nopeusrajoituksen piiriin", + "rate_limit_whitelist_placeholder": "Syötä yksi IP-osoite per rivi", "blocking_ipv4_desc": "Estettyyn A-pyyntöön palautettava IP-osoite", "blocking_ipv6_desc": "Estettyyn AAAA-pyyntöön palautettava IP-osoite", "blocking_mode_default": "Oletus: Vastaa IP-nollaosoitteella (0.0.0.0 korvaa A; :: korvaa AAAA) kun estetään mainoseston säännöllä; vastaa säännön määrittämällä IP-osoitteella kun estetään /etc/hosts-tyyppisellä säännöllä", diff --git a/client/src/__locales/fr.json b/client/src/__locales/fr.json index 2be62963..842b7148 100644 --- a/client/src/__locales/fr.json +++ b/client/src/__locales/fr.json @@ -310,6 +310,7 @@ "edns_use_custom_ip": "Utiliser une IP personnalisée pour EDNS", "edns_use_custom_ip_desc": "Autoriser l'utilisation d'une adresse IP personnalisée pour EDNS", "rate_limit_desc": "Le nombre de requêtes par seconde qu’un seul client est autorisé à faire. Le réglage 0 fait illimité.", + "rate_limit_whitelist_placeholder": "Saisissez une adresse IP par ligne", "blocking_ipv4_desc": "Adresse IP à renvoyer pour une demande A bloquée", "blocking_ipv6_desc": "Adresse IP à renvoyer pour une demande AAAA bloquée", "blocking_mode_default": "Par défaut : Répondre avec adresse IP zéro (0.0.0.0 pour A ; :: pour AAAA) lorsque bloqué par la règle de style Adblock ; répondre avec l’adresse IP spécifiée dans la règle lorsque bloquée par la règle du style /etc/hosts", diff --git a/client/src/__locales/hr.json b/client/src/__locales/hr.json index 1c9ec62e..f92ede4e 100644 --- a/client/src/__locales/hr.json +++ b/client/src/__locales/hr.json @@ -310,6 +310,7 @@ "edns_use_custom_ip": "Koristi prilagođeni IP za EDNS", "edns_use_custom_ip_desc": "Dopusti korištenje prilagođenog IP-a za EDNS", "rate_limit_desc": "Broj zahtjeva u sekundi koji su dopušteni po jednom klijentu. Postavljanje na 0 znači neograničeno.", + "rate_limit_whitelist_placeholder": "Unesite jednu adresu poslužitelja po retku", "blocking_ipv4_desc": "Povratna IP adresa za blokirane A zahtjeve", "blocking_ipv6_desc": "Povratna IP adresa za blokirane AAAA zahtjeve", "blocking_mode_default": "Zadano: Odgovori s nultom IP adresom (0.0.0.0 za A; :: za AAAA) kada ga blokira Adblock slično pravilo; odgovorite s IP adresom definiranom u pravilu kada je blokirano od /etc/hosts sličnog pravila", diff --git a/client/src/__locales/hu.json b/client/src/__locales/hu.json index 454704c8..e9a36123 100644 --- a/client/src/__locales/hu.json +++ b/client/src/__locales/hu.json @@ -310,6 +310,16 @@ "edns_use_custom_ip": "Használjon egyéni IP-címet az EDNS-hez", "edns_use_custom_ip_desc": "Engedélyezze az egyéni IP-cím használatát az EDNS-hez", "rate_limit_desc": "Maximálisan hány kérést küldhet egy kliens másodpercenkén. Ha 0-ra állítja, akkor nincs korlátozás.", + "rate_limit_subnet_len_ipv4": "Az IPv4-címek alhálózati előtagjának hossza", + "rate_limit_subnet_len_ipv4_desc": "A sebességkorlátozáshoz használt IPv4-címek alhálózati előtagjának hossza. Az alapértelmezett érték 24", + "rate_limit_subnet_len_ipv4_error": "Az IPv4 alhálózati előtag hosszának 0 és 32 között kell lennie", + "rate_limit_subnet_len_ipv6": "Az IPv6-címek alhálózati előtagjának hossza", + "rate_limit_subnet_len_ipv6_desc": "A sebességkorlátozáshoz használt IPv6-címek alhálózati előtagjának hossza. Az alapértelmezett érték 56", + "rate_limit_subnet_len_ipv6_error": "Az IPv6 alhálózati előtag hosszának 0 és 128 között kell lennie", + "form_enter_rate_limit_subnet_len": "Adja meg az alhálózati előtag hosszát a sebességkorlátozáshoz", + "rate_limit_whitelist": "Sebességkorlátozó engedélyezési lista", + "rate_limit_whitelist_desc": "A sebességkorlátozásból kizárt IP-címek", + "rate_limit_whitelist_placeholder": "Adjon meg egy IP-címet soronként", "blocking_ipv4_desc": "A blokkolt A kéréshez visszaadandó IP-cím", "blocking_ipv6_desc": "A blokkolt AAAA kéréshez visszaadandó IP-cím", "blocking_mode_default": "Alapértelmezés: Válaszoljon nulla IP-címmel (vagyis 0.0.0.0 az A-hoz, :: pedig az AAAA-hoz), amikor a blokkolás egy adblock-stílusú szabállyal történik; illetve válaszoljon egy, a szabály által meghatározott IP címmel, amikor a blokkolás egy /etc/hosts stílusú szabállyal történik", diff --git a/client/src/__locales/id.json b/client/src/__locales/id.json index 2f7caecc..0bea8a8a 100644 --- a/client/src/__locales/id.json +++ b/client/src/__locales/id.json @@ -310,6 +310,16 @@ "edns_use_custom_ip": "Gunakan IP khusus untuk EDNS", "edns_use_custom_ip_desc": "Izinkan untuk menggunakan IP kustom untuk EDNS", "rate_limit_desc": "Jumlah permintaan per detik yang diperbolehkan untuk satu klien. Atur ke 0 untuk tidak terbatas.", + "rate_limit_subnet_len_ipv4": "Panjang awalan subnet untuk alamat IPv4", + "rate_limit_subnet_len_ipv4_desc": "Panjang awalan subnet untuk alamat IPv4 yang digunakan untuk pembatasan kecepatan. Standarnya adalah 24", + "rate_limit_subnet_len_ipv4_error": "Panjang awalan subnet IPv4 harus antara 0 dan 32", + "rate_limit_subnet_len_ipv6": "Panjang awalan subnet untuk alamat IPv6", + "rate_limit_subnet_len_ipv6_desc": "Panjang awalan subnet untuk alamat IPv6 yang digunakan untuk pembatasan kecepatan. Standarnya adalah 56", + "rate_limit_subnet_len_ipv6_error": "Panjang awalan subnet IPv6 harus antara 0 dan 128", + "form_enter_rate_limit_subnet_len": "Masukkan panjang awalan subnet untuk pembatasan kecepatan", + "rate_limit_whitelist": "Daftar pembatasan tarif yang diizinkan", + "rate_limit_whitelist_desc": "Alamat IP dikecualikan dari pembatasan tarif", + "rate_limit_whitelist_placeholder": "Masukkan satu alamat IP per baris", "blocking_ipv4_desc": "Alamat IP akan dikembalikan untuk permintaan A yang diblokir", "blocking_ipv6_desc": "Alamat IP akan dipulihkan untuk permintaan AAAA yang diblokir", "blocking_mode_default": "Default: Tanggapi dengan alamat IP nol (0.0.0.0 untuk A; :: untuk AAAA) saat diblokir oleh aturan gaya Adblock; tanggapi dengan alamat IP yang ditentukan dalam aturan ketika diblokir oleh aturan gaya host /etc/", diff --git a/client/src/__locales/it.json b/client/src/__locales/it.json index 04a09411..7b9abc5f 100644 --- a/client/src/__locales/it.json +++ b/client/src/__locales/it.json @@ -310,6 +310,7 @@ "edns_use_custom_ip": "Usa IP personalizzato per EDNS", "edns_use_custom_ip_desc": "Consentire l'uso di un IP personalizzato per EDNS", "rate_limit_desc": "Il numero di richieste al secondo consentite da un singolo client. Impostare questo valore a 0 rimuove le limitazioni.", + "rate_limit_whitelist_placeholder": "Inserisci un indirizzo IP per riga", "blocking_ipv4_desc": "Indirizzo IP per una richiesta DNS IPv4 bloccata", "blocking_ipv6_desc": "Indirizzo IP restituito per una richiesta DNS IPv6 bloccata", "blocking_mode_default": "Risponde con un indirizzo IP pari a zero (0.0.0.0 per A; :: per AAAA) quando bloccato da una regola in stile Blocca-annunci; risponde con l'indirizzo IP specificato nella regola quando bloccato da una regola in stile /etc/hosts", diff --git a/client/src/__locales/ja.json b/client/src/__locales/ja.json index 1e2bb4a4..cfcb502b 100644 --- a/client/src/__locales/ja.json +++ b/client/src/__locales/ja.json @@ -310,6 +310,16 @@ "edns_use_custom_ip": "EDNSにカスタムIPを使用する", "edns_use_custom_ip_desc": "EDNS に対してカスタム IP の使用を許可します。", "rate_limit_desc": "一つのクライアントに対して許可される1秒あたりのリクエスト数(「0」に設定すると、制限なしになります)", + "rate_limit_subnet_len_ipv4": "IPv4 アドレスのサブネットプレフィックス長", + "rate_limit_subnet_len_ipv4_desc": "rate limiting(レート制限)に使用される IPv4 アドレスのサブネットプレフィックス長です。デフォルト値は 24 です。", + "rate_limit_subnet_len_ipv4_error": "IPv4 サブネットプレフィックス長は0〜32の範囲内である必要があります。", + "rate_limit_subnet_len_ipv6": "IPv6 アドレスのサブネットプレフィックス長", + "rate_limit_subnet_len_ipv6_desc": "rate limiting(レート制限)に使用される IPv6 アドレスのサブネットプレフィックス長です。デフォルト値は 56 です。", + "rate_limit_subnet_len_ipv6_error": "IPv6 サブネットのプレフィックス長は0〜128の範囲内である必要があります。", + "form_enter_rate_limit_subnet_len": "rate limiting(レート制限)のためのサブネットプレフィックス長を入力してください", + "rate_limit_whitelist": "rate limiting(レート制限)の許可リスト", + "rate_limit_whitelist_desc": "rate limiting(レート制限)の対象から外すIPアドレスを指定できます。", + "rate_limit_whitelist_placeholder": "IPアドレスを1行に1つずづ入力してください。", "blocking_ipv4_desc": "ブロックされたAリクエストに対して応答されるIPアドレス", "blocking_ipv6_desc": "ブロックされたAAAAリクエストに対して応答されるIPアドレス", "blocking_mode_default": "デフォルト:Adblock系ルールによってブロックされると、ゼロIPアドレス(Aに対しては「0.0.0.0」、AAAAに対しては「::」)で応答します。/etc/hosts系ルールによってブロックされると、ルールにて指定されているIPアドレスで応答します。", diff --git a/client/src/__locales/ko.json b/client/src/__locales/ko.json index b10190e8..6df30031 100644 --- a/client/src/__locales/ko.json +++ b/client/src/__locales/ko.json @@ -310,6 +310,7 @@ "edns_use_custom_ip": "EDNS에 사용자 지정 IP 사용", "edns_use_custom_ip_desc": "EDNS에 사용자 지정 IP 사용하도록 허용합니다.", "rate_limit_desc": "단일 클라이언트에서 허용 가능한 초 당 요청 생성 숫자 (0: 무제한)", + "rate_limit_whitelist_placeholder": "한 줄에 하나씩 IP 주소를 입력하세요.", "blocking_ipv4_desc": "차단된 A 요청에 대해서 반환할 IP 주소", "blocking_ipv6_desc": "차단된 AAAA 요청에 대해서 반환할 IP 주소", "blocking_mode_default": "기본: Adblock 스타일 규칙에 의해 차단되면 제로 IP 주소(A는 0.0.0.0; AAAA는 ::)로 응답합니다; /etc/hosts 스타일 규칙에 의해 차단되면 규칙에 정의된 IP 주소로 응답합니다", diff --git a/client/src/__locales/nl.json b/client/src/__locales/nl.json index d35bd741..645e0fda 100644 --- a/client/src/__locales/nl.json +++ b/client/src/__locales/nl.json @@ -310,6 +310,16 @@ "edns_use_custom_ip": "Aangepast IP-adres gebruiken voor EDNS", "edns_use_custom_ip_desc": "Toestaan om aangepast IP-adres voor EDNS te gebruiken", "rate_limit_desc": "Het aantal verzoeken per seconde toegelaten per toestel. 0 betekent onbeperkt.", + "rate_limit_subnet_len_ipv4": "Lengte subnetvoorvoegsel voor IPv4-adressen", + "rate_limit_subnet_len_ipv4_desc": "Lengte subnetvoorvoegsel voor IPv4-adressen die worden gebruikt voor snelheidsbeperking. De standaardwaarde is 24", + "rate_limit_subnet_len_ipv4_error": "De lengte van het IPv4-subnetvoorvoegsel moet tussen 0 en 32 liggen", + "rate_limit_subnet_len_ipv6": "Lengte subnetvoorvoegsel voor IPv6-adressen", + "rate_limit_subnet_len_ipv6_desc": "Lengte subnetvoorvoegsel voor IPv6-adressen die worden gebruikt voor snelheidsbeperking. De standaardwaarde is 56", + "rate_limit_subnet_len_ipv6_error": "De lengte van het IPv6-subnetvoorvoegsel moet tussen 0 en 128 liggen", + "form_enter_rate_limit_subnet_len": "Voer de lengte van het subnetvoorvoegsel in voor snelheidsbeperking", + "rate_limit_whitelist": "Toelatingslijst voor snelheidsbeperking", + "rate_limit_whitelist_desc": "IP-adressen uitgesloten van snelheidsbeperking", + "rate_limit_whitelist_placeholder": "Voer één IP-adres per regel in", "blocking_ipv4_desc": "IP-adres dat moet worden teruggegeven voor een geblokkeerd A-verzoek", "blocking_ipv6_desc": "IP-adres dat moet worden teruggegeven voor een geblokkeerd A-verzoek", "blocking_mode_default": "Standaard: Reageer met een nul IP adres (0.0.0.0 for A; :: voor AAAA) wanneer geblokkeerd door een Adblock-type regel; reageer met het IP-adres dat is opgegeven in de regel wanneer geblokkeerd door een /etc/hosts type regel", diff --git a/client/src/__locales/pl.json b/client/src/__locales/pl.json index 0668a8be..66230c89 100644 --- a/client/src/__locales/pl.json +++ b/client/src/__locales/pl.json @@ -310,6 +310,16 @@ "edns_use_custom_ip": "Użyj niestandardowego adresu IP dla EDNS", "edns_use_custom_ip_desc": "Zezwól na użycie niestandardowego adresu IP dla EDNS", "rate_limit_desc": "Liczba żądań na sekundę dozwolona na klienta. Ustawienie wartości 0 oznacza brak ograniczeń.", + "rate_limit_subnet_len_ipv4": "Długość maski podsieci dla adresów IPv4", + "rate_limit_subnet_len_ipv4_desc": "Długość maski podsieci dla adresów IPv4 używanych do ograniczania prędkości. Domyślnie jest to 24", + "rate_limit_subnet_len_ipv4_error": "Długość maski podsieci IPv4 powinna wynosić od 0 do 32", + "rate_limit_subnet_len_ipv6": "Długość prefiksu podsieci dla adresów IPv6", + "rate_limit_subnet_len_ipv6_desc": "Długość prefiksu podsieci dla adresów IPv6 używanych do ograniczania szybkości. Domyślnie jest to 56", + "rate_limit_subnet_len_ipv6_error": "Długość prefiksu podsieci IPv6 powinna wynosić od 0 do 128", + "form_enter_rate_limit_subnet_len": "Wprowadź długość prefiksu podsieci dla ograniczenia prędkości", + "rate_limit_whitelist": "Lista zezwoleń ograniczających prędkość", + "rate_limit_whitelist_desc": "Adresy IP wykluczone z ograniczania prędkości", + "rate_limit_whitelist_placeholder": "Wprowadź po jednym adresie IP w każdym wierszu", "blocking_ipv4_desc": "Adres IP, który ma zostać zwrócony w przypadku zablokowanego żądania A", "blocking_ipv6_desc": "Adres IP, który ma zostać zwrócony w przypadku zablokowanego żądania AAAA", "blocking_mode_default": "Domyślna: Odpowiedz z zerowym adresem IP (0.0.0.0 dla A; :: dla AAAA) po zablokowaniu przez regułę Adblock; odpowiedź adresem IP wpisanym w regule, jeśli jest blokowany przez regułę w stylu /etc/hosts", diff --git a/client/src/__locales/pt-br.json b/client/src/__locales/pt-br.json index cee9aa64..1fd38dac 100644 --- a/client/src/__locales/pt-br.json +++ b/client/src/__locales/pt-br.json @@ -303,13 +303,23 @@ "download_mobileconfig_dot": "BAixar .mobileconfig para DNS-sobre-TLS", "download_mobileconfig": "Baixar arquivo de configuração", "plain_dns": "DNS simples", - "form_enter_rate_limit": "Insira a taxa limite", - "rate_limit": "Taxa limite", + "form_enter_rate_limit": "Insira a velocidade limite", + "rate_limit": "Velocidade limite", "edns_enable": "Ativar a sub-rede do cliente EDNS", "edns_cs_desc": "Adicione a opção de sub-rede de cliente EDNS (ECS) às solicitações de servidor DNS primário e registre os valores enviados pelos clientes no registro de consulta.", "edns_use_custom_ip": "Usar IP personalizado para EDNS", "edns_use_custom_ip_desc": "Permitir o uso de IP personalizado para EDNS", "rate_limit_desc": "O número de solicitações por segundo permitidas por cliente. Definir como 0 significa que não há limite.", + "rate_limit_subnet_len_ipv4": "Comprimento do prefixo de sub-rede para endereços IPv4", + "rate_limit_subnet_len_ipv4_desc": "Comprimento do prefixo de sub-rede para endereços IPv4 usados para limitação de velocidade. O padrão é 24", + "rate_limit_subnet_len_ipv4_error": "O comprimento do prefixo da sub-rede IPv4 deve estar entre 0 e 32", + "rate_limit_subnet_len_ipv6": "Comprimento do prefixo de sub-rede para endereços IPv6", + "rate_limit_subnet_len_ipv6_desc": "Comprimento do prefixo de sub-rede para endereços IPv6 usados para limitação de velocidade. O padrão é 56", + "rate_limit_subnet_len_ipv6_error": "O comprimento do prefixo da sub-rede IPv6 deve estar entre 0 e 128", + "form_enter_rate_limit_subnet_len": "Insira o comprimento do prefixo da sub-rede para limitação de taxa", + "rate_limit_whitelist": "Lista de permissões de limitação de velocidade", + "rate_limit_whitelist_desc": "Endereços IP excluídos da limitação de velocidade", + "rate_limit_whitelist_placeholder": "Insira um endereço IP por linha", "blocking_ipv4_desc": "Endereço de IP a ser retornado para uma solicitação bloqueada", "blocking_ipv6_desc": "Endereço de IP a ser retornado para uma solicitação AAAA bloqueada", "blocking_mode_default": "Padrão: Responder com zero endereço IP (0.0.0.0 para A; :: para AAAA) quando bloqueado pela regra de estilo Adblock; responde com o endereço IP especificado na regra quando bloqueado pela regra /etc/hosts-style", diff --git a/client/src/__locales/pt-pt.json b/client/src/__locales/pt-pt.json index 053d4f6f..20dda61c 100644 --- a/client/src/__locales/pt-pt.json +++ b/client/src/__locales/pt-pt.json @@ -303,13 +303,23 @@ "download_mobileconfig_dot": "Transferir .mobileconfig para DNS-sobre-TLS", "download_mobileconfig": "Transferir ficheiro de configuração", "plain_dns": "DNS simples", - "form_enter_rate_limit": "Insira o limite de taxa", - "rate_limit": "Limite de taxa", + "form_enter_rate_limit": "Insira o limite de velocidade", + "rate_limit": "Limite de velocidade", "edns_enable": "Ativar a sub-rede do cliente EDNS", "edns_cs_desc": "Adicione a opção de sub-rede de cliente EDNS (ECS) às solicitações de servidor DNS primário e registre os valores enviados pelos clientes no registo de consulta.", "edns_use_custom_ip": "Usar IP personalizado para EDNS", "edns_use_custom_ip_desc": "Permitir a utilização de IP personalizado para EDNS", "rate_limit_desc": "O número de solicitações por segundo permitido por cliente. Configurando para 0 significa sem limite.", + "rate_limit_subnet_len_ipv4": "Comprimento do prefixo de sub-rede para endereços IPv4", + "rate_limit_subnet_len_ipv4_desc": "Comprimento do prefixo de sub-rede para endereços IPv4 usados para limitação de velocidade. O padrão é 24", + "rate_limit_subnet_len_ipv4_error": "O comprimento do prefixo da sub-rede IPv4 deve estar entre 0 e 32", + "rate_limit_subnet_len_ipv6": "Comprimento do prefixo de sub-rede para endereços IPv6", + "rate_limit_subnet_len_ipv6_desc": "Comprimento do prefixo de sub-rede para endereços IPv6 usados para limitação de velocidade. O padrão é 56", + "rate_limit_subnet_len_ipv6_error": "O comprimento do prefixo da sub-rede IPv6 deve situar-se entre 0 e 128", + "form_enter_rate_limit_subnet_len": "Introduza o comprimento do prefixo da sub-rede para limitação da velocidade", + "rate_limit_whitelist": "Lista de permissões de limitação de velocidade", + "rate_limit_whitelist_desc": "Endereços IP excluídos da limitação de velocidade", + "rate_limit_whitelist_placeholder": "Insira um endereço IP por linha", "blocking_ipv4_desc": "Endereço IP a ser devolvido para uma solicitação A bloqueada", "blocking_ipv6_desc": "Endereço IP a ser devolvido para uma solicitação AAAA bloqueada", "blocking_mode_default": "Predefinido: Responder com zero endereço IP (0.0.0.0 para A; :: para AAAA) quando bloqueado pela regra de estilo Adblock; responde com o endereço IP especificado na regra quando bloqueado pela regra /etc/hosts-style", diff --git a/client/src/__locales/ro.json b/client/src/__locales/ro.json index 3d86bc6d..f49a6085 100644 --- a/client/src/__locales/ro.json +++ b/client/src/__locales/ro.json @@ -310,6 +310,7 @@ "edns_use_custom_ip": "Utilizați IP personalizat pentru EDNS", "edns_use_custom_ip_desc": "Permiteți utilizarea IP-ului personalizat pentru EDNS", "rate_limit_desc": "Numărul de interogări pe secundă permise pe client. Setarea la 0 înseamnă că nu există limită.", + "rate_limit_whitelist_placeholder": "Introduceți o adresă IP per linie", "blocking_ipv4_desc": "Adresa IP de returnat pentru o cerere A de blocare", "blocking_ipv6_desc": "Adresa IP de returnat pentru o cerere AAAA de blocare", "blocking_mode_default": "Implicit: Răspunde cu adresa IP (0.0.0.0 for A; :: pentru AAAA) când sunt blocate de regulă tip Adblock; răspunde cu adresa IP specificată în regulă când sunt blocate de regula tip /etc/hosts", diff --git a/client/src/__locales/ru.json b/client/src/__locales/ru.json index 9cc1c787..d5b6da4d 100644 --- a/client/src/__locales/ru.json +++ b/client/src/__locales/ru.json @@ -310,6 +310,16 @@ "edns_use_custom_ip": "Использовать указанный IP для EDNS", "edns_use_custom_ip_desc": "Разрешить использовать собственный IP для EDNS", "rate_limit_desc": "Ограничение на количество запросов в секунду для каждого клиента (0 — неограниченно).", + "rate_limit_subnet_len_ipv4": "Длина префикса подсети для IPv4-адресов", + "rate_limit_subnet_len_ipv4_desc": "Длина префикса подсети для IPv4-адресов, используемых для ограничения скорости. По умолчанию 24", + "rate_limit_subnet_len_ipv4_error": "Длина префикса IPv4-подсетей должна составлять от 0 до 32", + "rate_limit_subnet_len_ipv6": "Длина префикса подсети для IPv6-адресов", + "rate_limit_subnet_len_ipv6_desc": "Длина префикса подсети для IPv6-адресов, используемых для ограничения скорости. По умолчанию 56", + "rate_limit_subnet_len_ipv6_error": "Длина префикса IPv6-подсетей должна составлять от 0 до 128", + "form_enter_rate_limit_subnet_len": "Введите длину префикса подсети для ограничения скорости", + "rate_limit_whitelist": "Белый список ограничения скорости", + "rate_limit_whitelist_desc": "IP-адреса, на которые не распространяется ограничение скорости", + "rate_limit_whitelist_placeholder": "Введите по одному адресу на строчку", "blocking_ipv4_desc": "IP-адрес, возвращаемый при блокировке A-запроса", "blocking_ipv6_desc": "IP-адрес, возвращаемый при блокировке AAAA-запроса", "blocking_mode_default": "Стандартный: Отвечает с нулевым IP-адресом, (0.0.0.0 для A; :: для AAAA) когда заблокировано правилом в стиле Adblock; отвечает с IP-адресом, указанным в правиле, когда заблокировано правилом в стиле файлов hosts", diff --git a/client/src/__locales/sk.json b/client/src/__locales/sk.json index 53c00d69..5e32186f 100644 --- a/client/src/__locales/sk.json +++ b/client/src/__locales/sk.json @@ -310,6 +310,16 @@ "edns_use_custom_ip": "Použiť vlastnú IP adresu pre EDNS", "edns_use_custom_ip_desc": "Povoliť používanie vlastnej IP adresy pre EDNS", "rate_limit_desc": "Počet požiadaviek za sekundu, ktoré môže jeden klient vykonať. Nastavenie na hodnotu 0 znamená neobmedzene.", + "rate_limit_subnet_len_ipv4": "Dĺžka prefixu podsiete pre adresy IPv4", + "rate_limit_subnet_len_ipv4_desc": "Dĺžka prefixu podsiete pre adresy IPv4 používané na obmedzenie rýchlosti. Predvolená hodnota je 24", + "rate_limit_subnet_len_ipv4_error": "Dĺžka prefixu podsiete IPv4 musí byť od 0 do 32", + "rate_limit_subnet_len_ipv6": "Dĺžka prefixu podsiete pre adresy IPv6", + "rate_limit_subnet_len_ipv6_desc": "Dĺžka prefixu podsiete pre adresy IPv6 používané na obmedzenie rýchlosti. Predvolená hodnota je 56", + "rate_limit_subnet_len_ipv6_error": "Dĺžka prefixu podsiete IPv6 musí byť od 0 do 128", + "form_enter_rate_limit_subnet_len": "Zadajte dĺžku prefixu podsiete pre obmedzenie rýchlosti", + "rate_limit_whitelist": "Zoznam povolení obmedzujúcich rýchlosť", + "rate_limit_whitelist_desc": "IP adresy vylúčené z obmedzenia rýchlosti", + "rate_limit_whitelist_placeholder": "Na každý riadok zadajte IP adresu jedného servera", "blocking_ipv4_desc": "IP adresa, ktorá sa má vrátiť v prípade blokovanej žiadosti A", "blocking_ipv6_desc": "IP adresa, ktorá sa má vrátiť v prípade blokovanej žiadosti AAAA", "blocking_mode_default": "Predvolené: Odpovedať nulovou adresou IP (0,0.0.0 pre A; :: pre AAAA), keď je blokovaná pravidlom v štýle Adblock; odpovedať IP adresou uvedenou v pravidle, keď je blokovaná pravidlom v štýle /etc/hosts", diff --git a/client/src/__locales/sl.json b/client/src/__locales/sl.json index d26f994d..b881039c 100644 --- a/client/src/__locales/sl.json +++ b/client/src/__locales/sl.json @@ -310,6 +310,16 @@ "edns_use_custom_ip": "Uporabi IP po meri za EDNS", "edns_use_custom_ip_desc": "Dovoli uporabo naslova IP po meri za EDNS", "rate_limit_desc": "Dovoljeno število zahtev na sekundo na odjemalca. Nastavitev na 0 pomeni brez omejitve.", + "rate_limit_subnet_len_ipv4": "Dolžina predpone podomrežja za naslove IPv4", + "rate_limit_subnet_len_ipv4_desc": "Dolžina predpone podomrežja za naslove IPv4, ki se uporabljajo za omejevanje hitrosti. Privzeto je 24", + "rate_limit_subnet_len_ipv4_error": "Dolžina predpone podomrežja IPv4 mora biti med 0 in 32", + "rate_limit_subnet_len_ipv6": "Dolžina predpone podomrežja za naslove IPv4", + "rate_limit_subnet_len_ipv6_desc": "Dolžina predpone podomrežja za naslove IPv6, ki se uporabljajo za omejevanje hitrosti. Privzeta vrednost je 56", + "rate_limit_subnet_len_ipv6_error": "Dolžina podomrežne predpone IPv6 mora biti med 0 in 128", + "form_enter_rate_limit_subnet_len": "Vnesite dolžino predpone podomrežja za omejitev hitrosti", + "rate_limit_whitelist": "Seznam dovoljenih za omejevanje hitrosti", + "rate_limit_whitelist_desc": "Naslovi IP so izključeni iz omejitve hitrosti", + "rate_limit_whitelist_placeholder": "Vnesite en naslov IP na vrstico", "blocking_ipv4_desc": "IP naslov, ki mora biti vrnjen za onemogočeno zahtevo A", "blocking_ipv6_desc": "IP naslov, ki mora biti vrnjen za onemogočeno zahtevo AAAA", "blocking_mode_default": "Privzeto: odgovori z ničelnim naslovom IP (0.0.0.0 za A; :: za AAAA), ko je onemogočen s pravilom v slogu Adblocka; odgovor z naslovom IP, določenim v pravilu, ko je onemogočen s pravilom /etc/hosts", diff --git a/client/src/__locales/sr-cs.json b/client/src/__locales/sr-cs.json index 2e0aadf6..b07b34bb 100644 --- a/client/src/__locales/sr-cs.json +++ b/client/src/__locales/sr-cs.json @@ -310,6 +310,16 @@ "edns_use_custom_ip": "Koristi prilagođeni IP za EDNS", "edns_use_custom_ip_desc": "Dozvoli korišćenje prilagođenog IP-a za EDNS", "rate_limit_desc": "Broj zahteva u sekundi dozvoljen po klijentu. Postavljanje na 0 znači da nema ograničenja.", + "rate_limit_subnet_len_ipv4": "Dužina prefixa podmreže za IPv4 adrese", + "rate_limit_subnet_len_ipv4_desc": "Dužina prefixa podmreže za IPv4 adrese koje se koriste za ograničavanje brzine. Podrazumevano je 24", + "rate_limit_subnet_len_ipv4_error": "Dužina prefixa IPv4 podmreže treba da bude između 0 i 32", + "rate_limit_subnet_len_ipv6": "Dužina prefixa podmreže za IPv6 adrese", + "rate_limit_subnet_len_ipv6_desc": "Dužina prefixa podmreže za IPv6 adrese koje se koriste za ograničavanje brzine. Podrazumevano je 56", + "rate_limit_subnet_len_ipv6_error": "Dužina prefixa IPv6 podmreže treba da bude između 0 i 128", + "form_enter_rate_limit_subnet_len": "Unesite dužinu prefixa podmreže da biste ograničili brzinu", + "rate_limit_whitelist": "Lista dozvoljenih lista za ograničavanje brzine", + "rate_limit_whitelist_desc": "IP adrese koje nisu obuhvaćene ograničenjem brzine", + "rate_limit_whitelist_placeholder": "Unesite jednu IP adresu servera po redu", "blocking_ipv4_desc": "IP adresa koja će biti vraćena za blokirane zahteve", "blocking_ipv6_desc": "IP adresa koja će biti vraćena za blokirane AAAA zahteve", "blocking_mode_default": "Podrazumevano: Odgovara sa REFUSED kada je blokirano od Adblock-style pravila; odgovara sa IP adresom koja je određena u pravilu kada je blokiran od /etc/hosts-style pravila", diff --git a/client/src/__locales/sv.json b/client/src/__locales/sv.json index 457859f6..d656500d 100644 --- a/client/src/__locales/sv.json +++ b/client/src/__locales/sv.json @@ -310,6 +310,7 @@ "edns_use_custom_ip": "Använd anpassad IP för EDNS", "edns_use_custom_ip_desc": "Tillåt att använda anpassad IP för EDNS", "rate_limit_desc": "Antalet förfrågningar per sekund som tillåts per klient. Att sätta den till 0 innebär ingen gräns.", + "rate_limit_whitelist_placeholder": "Ange en IP-adress per rad", "blocking_ipv4_desc": "IP adress som ska returneras för en blockerad A förfrågan", "blocking_ipv6_desc": "IP adress som ska returneras för en blockerad AAAA förfrågan", "blocking_mode_default": "Standard: Svara med noll IP-adress (0.0.0.0 för A; :: för AAAA) när det blockeras av regel i Adblock-stil; svara med IP-adressen som anges i regeln när den blockeras av regel i /etc/hosts-stil", diff --git a/client/src/__locales/tr.json b/client/src/__locales/tr.json index 82ad2c70..c0ecab73 100644 --- a/client/src/__locales/tr.json +++ b/client/src/__locales/tr.json @@ -98,7 +98,7 @@ "filters": "Filtreler", "filter": "Filtre", "query_log": "Sorgu Günlüğü", - "compact": "Yoğun", + "compact": "Sık", "nothing_found": "Hiçbir şey bulunamadı", "faq": "SSS", "version": "Sürüm", @@ -310,6 +310,16 @@ "edns_use_custom_ip": "EDNS için özel IP kullan", "edns_use_custom_ip_desc": "EDNS için özel IP kullanımına izin ver", "rate_limit_desc": "İstemci başına izin verilen saniyedeki istek sayısı. 0 olarak ayarlamak, sınır olmadığı anlamına gelir.", + "rate_limit_subnet_len_ipv4": "IPv4 adresleri için alt ağ önek uzunluğu", + "rate_limit_subnet_len_ipv4_desc": "Hız sınırlaması için kullanılan IPv4 adreslerinin alt ağ önek uzunluğu. Varsayılan 24'tür", + "rate_limit_subnet_len_ipv4_error": "IPv4 alt ağ önek uzunluğu 0 ile 32 arasında olmalıdır", + "rate_limit_subnet_len_ipv6": "IPv6 adresleri için alt ağ önek uzunluğu", + "rate_limit_subnet_len_ipv6_desc": "Hız sınırlaması için kullanılan IPv6 adreslerinin alt ağ önek uzunluğu. Varsayılan 56'tür", + "rate_limit_subnet_len_ipv6_error": "IPv6 alt ağ önek uzunluğu 0 ile 128 arasında olmalıdır", + "form_enter_rate_limit_subnet_len": "Hız sınırlaması için alt ağ önek uzunluğunu girin", + "rate_limit_whitelist": "Hız sınırlama izin listesi", + "rate_limit_whitelist_desc": "Hız sınırlamasından hariç tutulan IP adresleri", + "rate_limit_whitelist_placeholder": "Her satıra bir IP adresi girin", "blocking_ipv4_desc": "Engellenen bir A isteği için geri döndürülecek IP adresi", "blocking_ipv6_desc": "Engellenen bir AAAA isteği için geri döndürülecek IP adresi", "blocking_mode_default": "Varsayılan: Reklam engelleme tarzı kural tarafından engellendiğinde sıfır IP adresiyle (A için 0.0.0.0; :: AAAA için) yanıt verin; /etc/hosts-tarzı kural tarafından engellendiğinde, kuralda belirtilen IP adresiyle yanıt verin", diff --git a/client/src/__locales/uk.json b/client/src/__locales/uk.json index 1f38d597..30b3864f 100644 --- a/client/src/__locales/uk.json +++ b/client/src/__locales/uk.json @@ -1,6 +1,7 @@ { "client_settings": "Налаштування клієнта", "example_upstream_reserved": "DNS-сервер <0>для певних доменів;", + "example_multiple_upstreams_reserved": "кілька DNS-серверів <0>для конкретних доменів;", "example_upstream_comment": "коментар.", "upstream_parallel": "Використовувати паралельні запити, щоб пришвидшити вирішення одночасною чергою всіх оригінальних серверів.", "parallel_requests": "Паралельні запити", @@ -143,6 +144,8 @@ "enforced_save_search": "Примусовий безпечний пошук", "number_of_dns_query_to_safe_search": "Кількість DNS-запитів до пошукових систем, для яких примусово застосований безпечний пошук", "average_processing_time": "Середній час обробки", + "average_upstream_response_time": "Середній час відгуку upstream-сервера", + "response_time": "Час відгуку", "average_processing_time_hint": "Середній час обробки DNS запиту в мілісекундах", "block_domain_use_filters_and_hosts": "Блокування доменів за допомогою фільтрів та hosts-файлів", "filters_block_toggle_hint": "Ви можете налаштувати правила блокування в розділі Фільтри.", @@ -307,6 +310,16 @@ "edns_use_custom_ip": "Використання користувацької IP-адреси для EDNS", "edns_use_custom_ip_desc": "Дозволити використовувати користувацьку IP-адресу для EDNS", "rate_limit_desc": "Кількість запитів в секунду, які може робити один клієнт. Встановлене значення «0» означатиме необмежену кількість.", + "rate_limit_subnet_len_ipv4": "Довжина префікса підмережі для адрес IPv4", + "rate_limit_subnet_len_ipv4_desc": "Довжина префікса підмережі для адрес IPv4, які використовуються для обмеження швидкості. Типовим значенням є 24", + "rate_limit_subnet_len_ipv4_error": "Довжина префікса підмережі IPv4 має бути від 0 до 32", + "rate_limit_subnet_len_ipv6": "Довжина префікса підмережі для адрес IPv6", + "rate_limit_subnet_len_ipv6_desc": "Довжина префікса підмережі для адрес IPv6, які використовуються для обмеження швидкості. Типовим значенням є 56", + "rate_limit_subnet_len_ipv6_error": "Довжина префікса підмережі IPv6 має бути від 0 до 128", + "form_enter_rate_limit_subnet_len": "Введіть довжину префікса підмережі для обмеження швидкості", + "rate_limit_whitelist": "Список дозволених обмежень швидкості", + "rate_limit_whitelist_desc": "IP-адреси, на які не поширюється обмеження швидкості", + "rate_limit_whitelist_placeholder": "Вводьте одну адресу на рядок", "blocking_ipv4_desc": "IP-адреса, яку потрібно видати для заблокованого A запиту", "blocking_ipv6_desc": "IP-адреса, яку потрібно видати для заблокованого АААА запиту", "blocking_mode_default": "Усталено: відповідь із нульовою IP-адресою (0.0.0.0 для A; :: для AAAA), якщо заблоковано правилом у Adblock-стилі; відповідь зазначеною у правилі IP-адресою, якщо заблокувано правилом у hosts-стилі", diff --git a/client/src/__locales/vi.json b/client/src/__locales/vi.json index 29c49769..a58a509b 100644 --- a/client/src/__locales/vi.json +++ b/client/src/__locales/vi.json @@ -310,6 +310,16 @@ "edns_use_custom_ip": "Sử dụng địa chỉ IP tùy chỉnh cho EDNS", "edns_use_custom_ip_desc": "Cho phép sử dụng địa chỉ IP tùy chỉnh cho EDNS", "rate_limit_desc": "Số lượng yêu cầu mỗi giây mà một khách hàng được phép thực hiện (0: không giới hạn)", + "rate_limit_subnet_len_ipv4": "Độ dài tiền tố mạng con cho địa chỉ IPv4", + "rate_limit_subnet_len_ipv4_desc": "Độ dài tiền tố mạng con cho các địa chỉ IPv4 được sử dụng để giới hạn tốc độ. Mặc định là 24", + "rate_limit_subnet_len_ipv4_error": "Độ dài tiền tố mạng con IPv4 phải nằm trong khoảng từ 0 đến 32", + "rate_limit_subnet_len_ipv6": "Độ dài tiền tố mạng con cho địa chỉ IPv6", + "rate_limit_subnet_len_ipv6_desc": "Độ dài tiền tố mạng con cho các địa chỉ IPv6 được sử dụng để giới hạn tốc độ. Mặc định là 56", + "rate_limit_subnet_len_ipv6_error": "Độ dài tiền tố mạng con IPv6 phải nằm trong khoảng từ 0 đến 128", + "form_enter_rate_limit_subnet_len": "Nhập độ dài tiền tố mạng con để giới hạn tốc độ", + "rate_limit_whitelist": "Danh sách cho phép giới hạn tỷ lệ", + "rate_limit_whitelist_desc": "Địa chỉ IP bị loại trừ khỏi giới hạn tốc độ", + "rate_limit_whitelist_placeholder": "Nhập một địa chỉ IP trên mỗi dòng", "blocking_ipv4_desc": "Địa chỉ IP được trả lại cho một yêu cầu A bị chặn", "blocking_ipv6_desc": "Địa chỉ IP được trả lại cho một yêu cầu AAA bị chặn", "blocking_mode_default": "Mặc định: Trả lời với NXDOMAIN khi bị chặn bởi quy tắc kiểu Adblock; phản hồi với địa chỉ IP được chỉ định trong quy tắc khi bị chặn bởi quy tắc / etc / hosts-style", diff --git a/client/src/__locales/zh-cn.json b/client/src/__locales/zh-cn.json index 26a2c3a0..472a4fa5 100644 --- a/client/src/__locales/zh-cn.json +++ b/client/src/__locales/zh-cn.json @@ -310,6 +310,16 @@ "edns_use_custom_ip": "为 EDNS 使用自定义 IP", "edns_use_custom_ip_desc": "允许为 EDNS 使用自定义 IP", "rate_limit_desc": "每个客户端每秒钟查询次数的限制。设置为 0 意味着不限制。", + "rate_limit_subnet_len_ipv4": "IPv4 地址子网前缀长度", + "rate_limit_subnet_len_ipv4_desc": "用于速率限制的 IPv4 地址子网前缀长度。默认为 24", + "rate_limit_subnet_len_ipv4_error": "IPv4 子网前缀长度应介于 0 到 32 之间", + "rate_limit_subnet_len_ipv6": "IPv6 地址子网前缀长度", + "rate_limit_subnet_len_ipv6_desc": "用于速率限制的 IPv6 地址子网前缀长度。默认为 56", + "rate_limit_subnet_len_ipv6_error": "IPv6 子网前缀长度应介于 0 到 128 之间", + "form_enter_rate_limit_subnet_len": "输入用于速率限制的子网前缀长度", + "rate_limit_whitelist": "速率限制白名单", + "rate_limit_whitelist_desc": "排除在速率限制之外的 IP 地址", + "rate_limit_whitelist_placeholder": "每行输入一个 IP 地址", "blocking_ipv4_desc": "拦截 A 记录请求返回的 IP 地址", "blocking_ipv6_desc": "拦截 AAAA 记录请求返回的 IP 地址", "blocking_mode_default": "默认:被 Adblock 规则拦截时反应为零 IP 地址(A记录:0.0.0.0;AAAA记录:::);被 /etc/hosts 规则拦截时反应为规则中指定 IP 地址", diff --git a/client/src/__locales/zh-tw.json b/client/src/__locales/zh-tw.json index 26b0ed6c..99bea7e7 100644 --- a/client/src/__locales/zh-tw.json +++ b/client/src/__locales/zh-tw.json @@ -310,6 +310,16 @@ "edns_use_custom_ip": "為 EDNS 使用自訂的 IP", "edns_use_custom_ip_desc": "允許為 EDNS 使用自訂的 IP", "rate_limit_desc": "每個用戶端被允許的每秒請求之數量。設定它為 0 表示無限制。", + "rate_limit_subnet_len_ipv4": "IPv4 位址的子網路前綴長度", + "rate_limit_subnet_len_ipv4_desc": "用於速率限制的 IPv4 位址的子網路前綴長度。預設值為 24", + "rate_limit_subnet_len_ipv4_error": "IPv4 子網路前綴長度應在 0 至 32 之間", + "rate_limit_subnet_len_ipv6": "IPv6 位址的子網路前綴長度", + "rate_limit_subnet_len_ipv6_desc": "用於速率限制的 IPv6 位址的子網路前綴長度。預設值為 56", + "rate_limit_subnet_len_ipv6_error": "IPv6 子網路前綴長度應在 0 至 128 之間", + "form_enter_rate_limit_subnet_len": "輸入用於速率限制的子網路前綴長度", + "rate_limit_whitelist": "速率限制允許清單", + "rate_limit_whitelist_desc": "從速率限制中排除的 IP 位址", + "rate_limit_whitelist_placeholder": "每行輸入一個 IP 位址", "blocking_ipv4_desc": "要被返回給已封鎖的 A 請求之 IP 位址", "blocking_ipv6_desc": "要被返回給已封鎖的 AAAA 請求之 IP 位址", "blocking_mode_default": "預設:當被 AdBlock 樣式的規則封鎖時,以零值 IP 位址(0.0.0.0 供 A;:: 供 AAAA)回覆;當被 /etc/hosts 樣式的規則封鎖時,以在該規則中之已明確指定的 IP 位址回覆", diff --git a/client/src/helpers/filters/filters.js b/client/src/helpers/filters/filters.js index e38c8c2e..a1bf0555 100644 --- a/client/src/helpers/filters/filters.js +++ b/client/src/helpers/filters/filters.js @@ -190,6 +190,12 @@ export default { "homepage": "https://github.com/hagezi/dns-blocklists#piracy", "source": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_46.txt" }, + "hagezi_encrypted_dns_vpn_tor_proxy_bypass": { + "name": "HaGeZi's Encrypted DNS/VPN/TOR/Proxy Bypass", + "categoryId": "security", + "homepage": "https://github.com/hagezi/dns-blocklists#bypass", + "source": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_52.txt" + }, "hagezi_gambling_blocklist": { "name": "HaGeZi's Gambling Blocklist", "categoryId": "other", diff --git a/go.mod b/go.mod index a969dc57..d05f1fc4 100644 --- a/go.mod +++ b/go.mod @@ -48,8 +48,8 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect github.com/google/pprof v0.0.0-20231101202521-4ca4178f5c7a // indirect - github.com/jessevdk/go-flags v1.5.0 // indirect - github.com/mdlayher/socket v0.5.0 // indirect + // TODO(a.garipov): Upgrade to v0.5.0 once we switch to Go 1.21+. + github.com/mdlayher/socket v0.4.1 // indirect github.com/onsi/ginkgo/v2 v2.13.1 // indirect github.com/patrickmn/go-cache v2.1.0+incompatible // indirect github.com/pierrec/lz4/v4 v4.1.18 // indirect diff --git a/go.sum b/go.sum index d0568ebc..c913a0e8 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,3 @@ -github.com/AdguardTeam/dnsproxy v0.58.0 h1:1zPmDYWIc60D5Mn2idt3TcH+CQzKBvkWzJ5/u49wraw= -github.com/AdguardTeam/dnsproxy v0.58.0/go.mod h1:ZvkbM71HwpilgkCnTubDiR4Ba6x5Qvnhy2iasMWaTDM= -github.com/AdguardTeam/dnsproxy v0.58.1-0.20231114082217-26ee425d7cb9 h1:8JLgm92qlmd9LHh9maxo1Ao+vGLvLRSOClYH2/IvJ2g= -github.com/AdguardTeam/dnsproxy v0.58.1-0.20231114082217-26ee425d7cb9/go.mod h1:ZvkbM71HwpilgkCnTubDiR4Ba6x5Qvnhy2iasMWaTDM= github.com/AdguardTeam/dnsproxy v0.59.0 h1:J0Iw4+GZ7U44scgkrNCM5W2G+tNS0r9nfQOuSLBqapE= github.com/AdguardTeam/dnsproxy v0.59.0/go.mod h1:ZvkbM71HwpilgkCnTubDiR4Ba6x5Qvnhy2iasMWaTDM= github.com/AdguardTeam/golibs v0.17.2 h1:vg6wHMjUKscnyPGRvxS5kAt7Uw4YxcJiITZliZ476W8= @@ -56,8 +52,6 @@ github.com/hugelgupf/socketpair v0.0.0-20190730060125-05d35a94e714 h1:/jC7qQFrv8 github.com/insomniacslk/dhcp v0.0.0-20231016090811-6a2c8fbdcc1c h1:PgxFEySCI41sH0mB7/2XswdXbUykQsRUGod8Rn+NubM= github.com/insomniacslk/dhcp v0.0.0-20231016090811-6a2c8fbdcc1c/go.mod h1:3A9PQ1cunSDF/1rbTq99Ts4pVnycWg+vlPkfeD2NLFI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= -github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/josharian/native v1.0.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= github.com/josharian/native v1.0.1-0.20221213033349-c1e37c09b531/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= github.com/josharian/native v1.1.1-0.20230202152459-5c7d0dd6ab86 h1:elKwZS1OcdQ0WwEDBeqxKwb7WB62QX8bvZ/FJnVXIfk= @@ -77,8 +71,8 @@ github.com/mdlayher/packet v1.1.2/go.mod h1:GEu1+n9sG5VtiRE4SydOmX5GTwyyYlteZiFU github.com/mdlayher/raw v0.1.0 h1:K4PFMVy+AFsp0Zdlrts7yNhxc/uXoPVHi9RzRvtZF2Y= github.com/mdlayher/raw v0.1.0/go.mod h1:yXnxvs6c0XoF/aK52/H5PjsVHmWBCFfZUfoh/Y5s9Sg= github.com/mdlayher/socket v0.2.1/go.mod h1:QLlNPkFR88mRUNQIzRBMfXxwKal8H7u1h3bL1CV+f0E= -github.com/mdlayher/socket v0.5.0 h1:ilICZmJcQz70vrWVes1MFera4jGiWNocSkykwwoy3XI= -github.com/mdlayher/socket v0.5.0/go.mod h1:WkcBFfvyG8QENs5+hfQPl1X6Jpd2yeLIYgrGFmJiJxI= +github.com/mdlayher/socket v0.4.1 h1:eM9y2/jlbs1M615oshPQOHZzj6R6wMT7bX5NPiQvn2U= +github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA= github.com/miekg/dns v1.1.56 h1:5imZaSeoRNvpM9SzWNhEcP9QliKiz20/dA2QabIGVnE= github.com/miekg/dns v1.1.56/go.mod h1:cRm6Oo2C8TY9ZS/TqsSrseAcncm74lfK5G+ikN2SWWY= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= @@ -106,7 +100,6 @@ github.com/shirou/gopsutil/v3 v3.23.7 h1:C+fHO8hfIppoJ1WdsVm1RoI0RwXoNdfTK7yWXV0 github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= @@ -152,7 +145,6 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/internal/dnsforward/config.go b/internal/dnsforward/config.go index 9b5bdc8c..e6f7c57d 100644 --- a/internal/dnsforward/config.go +++ b/internal/dnsforward/config.go @@ -289,14 +289,15 @@ type ServerConfig struct { // UseHTTP3Upstreams defines if HTTP/3 is be allowed for DNS-over-HTTPS // upstreams. UseHTTP3Upstreams bool + + // ServePlainDNS defines if plain DNS is allowed for incoming requests. + ServePlainDNS bool } -// createProxyConfig creates and validates configuration for the main proxy. -func (s *Server) createProxyConfig() (conf proxy.Config, err error) { +// newProxyConfig creates and validates configuration for the main proxy. +func (s *Server) newProxyConfig() (conf *proxy.Config, err error) { srvConf := s.conf - conf = proxy.Config{ - UDPListenAddr: srvConf.UDPListenAddrs, - TCPListenAddr: srvConf.TCPListenAddrs, + conf = &proxy.Config{ HTTP3: srvConf.ServeHTTP3, Ratelimit: int(srvConf.Ratelimit), RatelimitSubnetMaskIPv4: net.CIDRMask(srvConf.RatelimitSubnetLenIPv4, netutil.IPv4BitLen), @@ -328,7 +329,7 @@ func (s *Server) createProxyConfig() (conf proxy.Config, err error) { } setProxyUpstreamMode( - &conf, + conf, srvConf.AllServers, srvConf.FastestAddr, srvConf.FastestTimeout.Duration, @@ -336,12 +337,17 @@ func (s *Server) createProxyConfig() (conf proxy.Config, err error) { conf.BogusNXDomain, err = parseBogusNXDOMAIN(srvConf.BogusNXDomain) if err != nil { - return proxy.Config{}, fmt.Errorf("bogus_nxdomain: %w", err) + return nil, fmt.Errorf("bogus_nxdomain: %w", err) } - err = s.prepareTLS(&conf) + err = s.prepareTLS(conf) if err != nil { - return proxy.Config{}, fmt.Errorf("validating tls: %w", err) + return nil, fmt.Errorf("validating tls: %w", err) + } + + err = s.preparePlain(conf) + if err != nil { + return nil, fmt.Errorf("validating plain: %w", err) } if c := srvConf.DNSCryptConfig; c.Enabled { @@ -352,7 +358,7 @@ func (s *Server) createProxyConfig() (conf proxy.Config, err error) { } if conf.UpstreamConfig == nil || len(conf.UpstreamConfig.Upstreams) == 0 { - return proxy.Config{}, errors.Error("no default upstream servers configured") + return nil, errors.Error("no default upstream servers configured") } return conf, nil @@ -664,6 +670,31 @@ func (s *Server) onGetCertificate(ch *tls.ClientHelloInfo) (*tls.Certificate, er return &s.conf.cert, nil } +// preparePlain prepares the plain-DNS configuration for the DNS proxy. +// preparePlain assumes that prepareTLS has already been called. +func (s *Server) preparePlain(proxyConf *proxy.Config) (err error) { + if s.conf.ServePlainDNS { + proxyConf.UDPListenAddr = s.conf.UDPListenAddrs + proxyConf.TCPListenAddr = s.conf.TCPListenAddrs + + return nil + } + + lenEncrypted := len(proxyConf.DNSCryptTCPListenAddr) + + len(proxyConf.DNSCryptUDPListenAddr) + + len(proxyConf.HTTPSListenAddr) + + len(proxyConf.QUICListenAddr) + + len(proxyConf.TLSListenAddr) + if lenEncrypted == 0 { + // TODO(a.garipov): Support full disabling of all DNS. + return errors.Error("disabling plain dns requires at least one encrypted protocol") + } + + log.Info("dnsforward: warning: plain dns is disabled") + + return nil +} + // UpdatedProtectionStatus updates protection state, if the protection was // disabled temporarily. Returns the updated state of protection. func (s *Server) UpdatedProtectionStatus() (enabled bool, disabledUntil *time.Time) { diff --git a/internal/dnsforward/dns64_test.go b/internal/dnsforward/dns64_test.go index 53a18c4e..55c08db7 100644 --- a/internal/dnsforward/dns64_test.go +++ b/internal/dnsforward/dns64_test.go @@ -292,6 +292,7 @@ func TestServer_HandleDNSRequest_dns64(t *testing.T) { Config: Config{ EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, }, + ServePlainDNS: true, }, localUps) t.Run(tc.name, func(t *testing.T) { diff --git a/internal/dnsforward/dnsforward.go b/internal/dnsforward/dnsforward.go index a6d6ef2a..d3bca111 100644 --- a/internal/dnsforward/dnsforward.go +++ b/internal/dnsforward/dnsforward.go @@ -109,7 +109,7 @@ type Server struct { // stats is the statistics collector for client's DNS usage data. stats stats.Interface - // access drops unallowed clients. + // access drops disallowed clients. access *accessManager // localDomainSuffix is the suffix used to detect internal hosts. It @@ -232,8 +232,10 @@ func NewServer(p DNSCreateParams) (s *Server, err error) { if p.Anonymizer == nil { p.Anonymizer = aghnet.NewIPMut(nil) } + s = &Server{ dnsFilter: p.DNSFilter, + dhcpServer: p.DHCPServer, stats: p.Stats, queryLog: p.QueryLog, privateNets: p.PrivateNets, @@ -246,6 +248,9 @@ func NewServer(p DNSCreateParams) (s *Server, err error) { MaxCount: defaultClientIDCacheCount, }), anonymizer: p.Anonymizer, + conf: ServerConfig{ + ServePlainDNS: true, + }, } s.sysResolvers, err = sysresolv.NewSystemResolvers(nil, defaultPlainDNSPort) @@ -253,8 +258,6 @@ func NewServer(p DNSCreateParams) (s *Server, err error) { return nil, fmt.Errorf("initializing system resolvers: %w", err) } - s.dhcpServer = p.DHCPServer - if runtime.GOARCH == "mips" || runtime.GOARCH == "mipsle" { // Use plain DNS on MIPS, encryption is too slow defaultDNS = defaultBootstrap @@ -540,7 +543,7 @@ func (s *Server) Prepare(conf *ServerConfig) (err error) { return err } - proxyConfig, err := s.createProxyConfig() + proxyConfig, err := s.newProxyConfig() if err != nil { return fmt.Errorf("preparing proxy: %w", err) } @@ -559,7 +562,7 @@ func (s *Server) Prepare(conf *ServerConfig) (err error) { // Set the proxy here because [setupLocalResolvers] sets its values. // // TODO(e.burkov): Remove once the local resolvers logic moved to dnsproxy. - s.dnsProxy = &proxy.Proxy{Config: proxyConfig} + s.dnsProxy = &proxy.Proxy{Config: *proxyConfig} err = s.setupLocalResolvers(boot) if err != nil { diff --git a/internal/dnsforward/dnsforward_test.go b/internal/dnsforward/dnsforward_test.go index c74d97f7..5353215c 100644 --- a/internal/dnsforward/dnsforward_test.go +++ b/internal/dnsforward/dnsforward_test.go @@ -182,6 +182,7 @@ func createTestTLS(t *testing.T, tlsConf TLSConfig) (s *Server, certPem []byte) Config: Config{ EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, }, + ServePlainDNS: true, }, nil) tlsConf.CertificateChainData, tlsConf.PrivateKeyData = certPem, keyPem @@ -309,6 +310,7 @@ func TestServer(t *testing.T) { Config: Config{ EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, }, + ServePlainDNS: true, }, nil) s.conf.UpstreamConfig.Upstreams = []upstream.Upstream{newGoogleUpstream()} startDeferStop(t, s) @@ -347,6 +349,7 @@ func TestServer_timeout(t *testing.T) { Config: Config{ EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, }, + ServePlainDNS: true, } s, err := NewServer(DNSCreateParams{DNSFilter: createTestDNSFilter(t)}) @@ -381,6 +384,7 @@ func TestServer_Prepare_fallbacks(t *testing.T) { }, EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, }, + ServePlainDNS: true, } s, err := NewServer(DNSCreateParams{}) @@ -402,6 +406,7 @@ func TestServerWithProtectionDisabled(t *testing.T) { Config: Config{ EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, }, + ServePlainDNS: true, }, nil) s.conf.UpstreamConfig.Upstreams = []upstream.Upstream{newGoogleUpstream()} startDeferStop(t, s) @@ -479,6 +484,7 @@ func TestServerRace(t *testing.T) { UpstreamDNS: []string{"8.8.8.8:53", "8.8.4.4:53"}, }, ConfigModified: func() {}, + ServePlainDNS: true, } s := createTestServer(t, filterConf, forwardConf, nil) s.conf.UpstreamConfig.Upstreams = []upstream.Upstream{newGoogleUpstream()} @@ -532,6 +538,7 @@ func TestSafeSearch(t *testing.T) { Enabled: false, }, }, + ServePlainDNS: true, } s := createTestServer(t, filterConf, forwardConf, nil) startDeferStop(t, s) @@ -594,6 +601,7 @@ func TestInvalidRequest(t *testing.T) { Enabled: false, }, }, + ServePlainDNS: true, }, nil) startDeferStop(t, s) @@ -622,6 +630,7 @@ func TestBlockedRequest(t *testing.T) { Enabled: false, }, }, + ServePlainDNS: true, } s := createTestServer(t, &filtering.Config{ ProtectionEnabled: true, @@ -657,6 +666,7 @@ func TestServerCustomClientUpstream(t *testing.T) { Enabled: false, }, }, + ServePlainDNS: true, } s := createTestServer(t, &filtering.Config{ BlockingMode: filtering.BlockingModeDefault, @@ -733,6 +743,7 @@ func TestBlockCNAMEProtectionEnabled(t *testing.T) { Enabled: false, }, }, + ServePlainDNS: true, }, nil) testUpstm := &aghtest.Upstream{ CName: testCNAMEs, @@ -765,6 +776,7 @@ func TestBlockCNAME(t *testing.T) { Enabled: false, }, }, + ServePlainDNS: true, } s := createTestServer(t, &filtering.Config{ ProtectionEnabled: true, @@ -839,6 +851,7 @@ func TestClientRulesForCNAMEMatching(t *testing.T) { Enabled: false, }, }, + ServePlainDNS: true, } s := createTestServer(t, &filtering.Config{ BlockingMode: filtering.BlockingModeDefault, @@ -883,6 +896,7 @@ func TestNullBlockedRequest(t *testing.T) { Enabled: false, }, }, + ServePlainDNS: true, } s := createTestServer(t, &filtering.Config{ ProtectionEnabled: true, @@ -948,6 +962,7 @@ func TestBlockedCustomIP(t *testing.T) { Enabled: false, }, }, + ServePlainDNS: true, } // Invalid BlockingIPv4. @@ -999,6 +1014,7 @@ func TestBlockedByHosts(t *testing.T) { Enabled: false, }, }, + ServePlainDNS: true, } s := createTestServer(t, &filtering.Config{ @@ -1049,6 +1065,7 @@ func TestBlockedBySafeBrowsing(t *testing.T) { Enabled: false, }, }, + ServePlainDNS: true, } s := createTestServer(t, filterConf, forwardConf, nil) startDeferStop(t, s) @@ -1107,6 +1124,7 @@ func TestRewrite(t *testing.T) { Enabled: false, }, }, + ServePlainDNS: true, })) ups := aghtest.NewUpstreamMock(func(req *dns.Msg) (resp *dns.Msg, err error) { diff --git a/internal/dnsforward/dnsrewrite_test.go b/internal/dnsforward/dnsrewrite_test.go index 79aecdef..1022388f 100644 --- a/internal/dnsforward/dnsrewrite_test.go +++ b/internal/dnsforward/dnsrewrite_test.go @@ -40,6 +40,7 @@ func TestServer_FilterDNSRewrite(t *testing.T) { Config: Config{ EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, }, + ServePlainDNS: true, }, nil) makeQ := func(qtype rules.RRType) (req *dns.Msg) { diff --git a/internal/dnsforward/filter_test.go b/internal/dnsforward/filter_test.go index fe64cdf0..961ddcf7 100644 --- a/internal/dnsforward/filter_test.go +++ b/internal/dnsforward/filter_test.go @@ -35,6 +35,7 @@ func TestHandleDNSRequest_handleDNSRequest(t *testing.T) { Enabled: false, }, }, + ServePlainDNS: true, } filters := []filtering.Filter{{ ID: 0, Data: []byte(rules), diff --git a/internal/dnsforward/http_test.go b/internal/dnsforward/http_test.go index 99b03786..b16c26df 100644 --- a/internal/dnsforward/http_test.go +++ b/internal/dnsforward/http_test.go @@ -79,6 +79,7 @@ func TestDNSForwardHTTP_handleGetConfig(t *testing.T) { EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, }, ConfigModified: func() {}, + ServePlainDNS: true, } s := createTestServer(t, filterConf, forwardConf, nil) s.sysResolvers = &emptySysResolvers{} @@ -158,6 +159,7 @@ func TestDNSForwardHTTP_handleSetConfig(t *testing.T) { EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, }, ConfigModified: func() {}, + ServePlainDNS: true, } s := createTestServer(t, filterConf, forwardConf, nil) s.sysResolvers = &emptySysResolvers{} @@ -533,6 +535,7 @@ func TestServer_HandleTestUpstreamDNS(t *testing.T) { Config: Config{ EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, }, + ServePlainDNS: true, }, nil) srv.etcHosts = hc startDeferStop(t, srv) diff --git a/internal/dnsforward/process_internal_test.go b/internal/dnsforward/process_internal_test.go index 168a97a1..a6977247 100644 --- a/internal/dnsforward/process_internal_test.go +++ b/internal/dnsforward/process_internal_test.go @@ -81,6 +81,7 @@ func TestServer_ProcessInitial(t *testing.T) { AAAADisabled: tc.aaaaDisabled, EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, }, + ServePlainDNS: true, } s := createTestServer(t, &filtering.Config{ @@ -180,6 +181,7 @@ func TestServer_ProcessFilteringAfterResponse(t *testing.T) { AAAADisabled: tc.aaaaDisabled, EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, }, + ServePlainDNS: true, } s := createTestServer(t, &filtering.Config{ @@ -369,6 +371,7 @@ func prepareTestServer(t *testing.T, portDoH, portDoT, portDoQ int, ddrEnabled b TLSConfig: TLSConfig{ ServerName: ddrTestDomainName, }, + ServePlainDNS: true, }, } @@ -699,6 +702,7 @@ func TestServer_ProcessRestrictLocal(t *testing.T) { Config: Config{ EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, }, + ServePlainDNS: true, }, ups) s.conf.UpstreamConfig.Upstreams = []upstream.Upstream{ups} startDeferStop(t, s) @@ -776,6 +780,7 @@ func TestServer_ProcessLocalPTR_usingResolvers(t *testing.T) { Config: Config{ EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, }, + ServePlainDNS: true, }, aghtest.NewUpstreamMock(func(req *dns.Msg) (resp *dns.Msg, err error) { return aghalg.Coalesce( diff --git a/internal/dnsforward/svcbmsg_test.go b/internal/dnsforward/svcbmsg_test.go index 83645b32..58275ef4 100644 --- a/internal/dnsforward/svcbmsg_test.go +++ b/internal/dnsforward/svcbmsg_test.go @@ -19,6 +19,7 @@ func TestGenAnswerHTTPS_andSVCB(t *testing.T) { Config: Config{ EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, }, + ServePlainDNS: true, }, nil) req := &dns.Msg{ diff --git a/internal/filtering/servicelist.go b/internal/filtering/servicelist.go index 03c51ac8..ec893ecf 100644 --- a/internal/filtering/servicelist.go +++ b/internal/filtering/servicelist.go @@ -509,6 +509,15 @@ var blockedServices = []blockedService{{ "||clubhouse.com^", "||clubhouseapi.com^", }, +}, { + ID: "coolapk", + Name: "CoolApk", + IconSVG: []byte(""), + Rules: []string{ + "||coolapk.com^", + "||coolapkmarket.com^", + "||coolapkmarket.net^", + }, }, { ID: "crunchyroll", Name: "Crunchyroll", @@ -1923,6 +1932,14 @@ var blockedServices = []blockedService{{ Rules: []string{ "||ok.ru^", }, +}, { + ID: "olvid", + Name: "Olvid", + IconSVG: []byte(""), + Rules: []string{ + "||olvid-attachment-chunks.s3.eu-west-3.amazonaws.com^", + "||olvid.io^", + }, }, { ID: "onlyfans", Name: "OnlyFans", diff --git a/internal/home/config.go b/internal/home/config.go index 92e78697..e78bf8e9 100644 --- a/internal/home/config.go +++ b/internal/home/config.go @@ -228,6 +228,9 @@ type dnsConfig struct { // TODO(a.garipov): Add to the UI when HTTP/3 support is no longer // experimental. UseHTTP3Upstreams bool `yaml:"use_http3_upstreams"` + + // ServePlainDNS defines if plain DNS is allowed for incoming requests. + ServePlainDNS bool `yaml:"serve_plain_dns"` } type tlsConfigSettings struct { @@ -335,6 +338,7 @@ var config = &configuration{ }, UpstreamTimeout: timeutil.Duration{Duration: dnsforward.DefaultTimeout}, UsePrivateRDNS: true, + ServePlainDNS: true, }, TLS: tlsConfigSettings{ PortHTTPS: defaultPortHTTPS, diff --git a/internal/home/dns.go b/internal/home/dns.go index 5c6ad2cc..592e84f2 100644 --- a/internal/home/dns.go +++ b/internal/home/dns.go @@ -142,9 +142,12 @@ func initDNSServer( EtcHosts: Context.etcHosts, LocalDomain: config.DHCP.LocalDomainName, }) + defer func() { + if err != nil { + closeDNSServer() + } + }() if err != nil { - closeDNSServer() - return fmt.Errorf("dnsforward.NewServer: %w", err) } @@ -152,15 +155,11 @@ func initDNSServer( dnsConf, err := newServerConfig(&config.DNS, config.Clients.Sources, tlsConf, httpReg) if err != nil { - closeDNSServer() - return fmt.Errorf("newServerConfig: %w", err) } err = Context.dnsServer.Prepare(dnsConf) if err != nil { - closeDNSServer() - return fmt.Errorf("dnsServer.Prepare: %w", err) } @@ -253,6 +252,7 @@ func newServerConfig( UsePrivateRDNS: dnsConf.UsePrivateRDNS, ServeHTTP3: dnsConf.ServeHTTP3, UseHTTP3Upstreams: dnsConf.UseHTTP3Upstreams, + ServePlainDNS: dnsConf.ServePlainDNS, } var initialAddresses []netip.Addr