Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -716,11 +716,12 @@ These settings are critical on the server:
| :--- | :--- | :--- | :--- |
| `UDP_HOST` | `"0.0.0.0"` | if empty, this value is used | Address where the DNS server binds.<br>`0.0.0.0` means listen on all interfaces. |
| `UDP_PORT` | `53` | `1..65535` | UDP port used by the server.<br>In most deployments this should remain `53` so resolvers can query it directly. |
| `FALLBACK` | omitted | empty/off, or `HOST:PORT`; bracket IPv6 addresses | Optional raw UDP proxy for non-DNS datagrams received on the DNS listener. Routing is tracked per source, and only a structurally complete DNS datagram establishes or resets DNS classification. An unknown non-DNS source is forwarded immediately and remains sticky to fallback, while a DNS-classified source switches after 16 consecutive non-DNS packets. While the source remains DNS-classified, every packet retained on the DNS path refreshes its 180-second idle timer; DNS resets the non-DNS streak and non-DNS increments it. After a gap longer than 180 seconds, the next non-DNS packet is treated as a new source and forwarded immediately. Active fallback sessions also expire after 180 seconds without traffic in either direction. Fallback mode uses one ingress reader to preserve packet order and a full 65,535-byte receive buffer; startup rejects a target that resolves back to the listener. Sessions have no hard cap, so untrusted or spoofed traffic can consume file descriptors and CPU; use network filtering or rate limiting on public listeners. |
| `UDP_READERS` | `4` | auto-default if `<=0` | Number of goroutines reading directly from the UDP socket.<br>A larger number may help on very busy servers, but beyond a point it only increases context switching. |
| `DNS_REQUEST_WORKERS` | `8` | auto-default if `<=0` | Number of workers that take requests from the front-door queue and pass them into the session/decode layer. |
| `MAX_CONCURRENT_REQUESTS` | `16384` | fallback if `<=0` | Capacity of the incoming request queue.<br>If this queue fills up, packets are dropped and the server emits rate-limited overload logs. |
| `SOCKET_BUFFER_SIZE` | `4194304` | fallback if `<=0` | Operating-system socket buffer size request for the UDP listener.<br>This matters for heavy bursts of incoming traffic. |
| `MAX_PACKET_SIZE` | `65535` | fallback if `<=0` | Size of the largest packet buffer that the packet pool allocates. |
| `MAX_PACKET_SIZE` | `65535` | fallback if `<=0`; at least `65535` with `FALLBACK` | Size of the largest packet buffer that the packet pool allocates. Fallback forces a full-size UDP receive buffer so raw datagrams are not truncated. |
| `DROP_LOG_INTERVAL_SECONDS` | `2.0` | fallback if `<=0` | Minimum interval between repeated overload/drop logs, to avoid log spam during pressure. |

### 3.5.3) 🧠 Deferred Session Runtime
Expand Down
3 changes: 2 additions & 1 deletion README_ES.MD
Original file line number Diff line number Diff line change
Expand Up @@ -718,11 +718,12 @@ Estos ajustes son críticos en el servidor:
| :--- | :--- | :--- | :--- |
| `UDP_HOST` | `"0.0.0.0"` | si está vacío, se usa este valor | Dirección donde se vincula el servidor DNS.<br>`0.0.0.0` significa escuchar en todas las interfaces. |
| `UDP_PORT` | `53` | `1..65535` | Puerto UDP usado por el servidor.<br>En la mayoría de los despliegues debe permanecer en `53` para que los resolutores puedan consultarlo directamente. |
| `FALLBACK` | omitido | vacío/desactivado, o `HOST:PORT`; IPv6 entre corchetes | Proxy UDP sin procesar opcional para datagramas no DNS recibidos por el listener DNS. El enrutamiento se mantiene por origen y solo un datagrama DNS estructuralmente completo establece o reinicia la clasificación DNS. Un origen no DNS desconocido se reenvía de inmediato y queda asociado al fallback, mientras que un origen clasificado como DNS cambia después de 16 paquetes no DNS consecutivos. Mientras el origen siga clasificado como DNS, cada paquete retenido en la ruta DNS actualiza su temporizador de inactividad de 180 segundos; un paquete DNS reinicia la racha no DNS y uno no DNS la incrementa. Tras una pausa superior a 180 segundos, el siguiente paquete no DNS se trata como procedente de un origen nuevo y se reenvía de inmediato. Las sesiones fallback activas también vencen tras 180 segundos sin tráfico en ninguna dirección. El modo fallback usa un único lector de entrada para conservar el orden y un búfer completo de 65.535 bytes; el inicio rechaza un destino que resuelva al propio listener. Las sesiones no tienen un límite estricto, por lo que el tráfico no confiable o falsificado puede consumir descriptores de archivo y CPU; use filtrado de red o limitación de tasa en listeners públicos. |
| `UDP_READERS` | `4` | valor automático por defecto si es `<=0` | Número de goroutines que leen directamente del socket UDP.<br>Un número mayor puede ayudar en servidores muy concurridos, pero a partir de cierto punto solo aumenta el cambio de contexto. |
| `DNS_REQUEST_WORKERS` | `8` | valor automático por defecto si es `<=0` | Número de workers que toman solicitudes de la cola de entrada y las pasan a la capa de sesión/decodificación. |
| `MAX_CONCURRENT_REQUESTS` | `16384` | valor de reserva si es `<=0` | Capacidad de la cola de solicitudes entrantes.<br>Si esta cola se llena, los paquetes se descartan y el servidor emite registros de sobrecarga limitados por tasa. |
| `SOCKET_BUFFER_SIZE` | `4194304` | valor de reserva si es `<=0` | Tamaño de búfer de socket del sistema operativo solicitado para el escuchador UDP.<br>Esto importa para las ráfagas intensas de tráfico entrante. |
| `MAX_PACKET_SIZE` | `65535` | valor de reserva si es `<=0` | Tamaño del búfer de paquete más grande que asigna el pool de paquetes. |
| `MAX_PACKET_SIZE` | `65535` | valor de reserva si es `<=0`; al menos `65535` con `FALLBACK` | Tamaño del búfer de paquete más grande que asigna el pool de paquetes. Fallback fuerza un búfer UDP de tamaño completo para no truncar datagramas sin procesar. |
| `DROP_LOG_INTERVAL_SECONDS` | `2.0` | valor de reserva si es `<=0` | Intervalo mínimo entre registros repetidos de sobrecarga/descarte, para evitar el spam de registros bajo presión. |

### 3.5.3) 🧠 Runtime de Sesión Diferida
Expand Down
3 changes: 2 additions & 1 deletion README_FA.MD
Original file line number Diff line number Diff line change
Expand Up @@ -687,11 +687,12 @@ sudo journalctl -u masterdnsvpn-client -f
| :--- | :--- | :--- | :--- |
| `UDP_HOST` | `"0.0.0.0"` | اگر خالی باشد همین مقدار استفاده می‌شود | آدرسی که سرور DNS روی آن bind می‌شود.<br>`0.0.0.0` یعنی روی همه interfaceها گوش بدهد. |
| `UDP_PORT` | `53` | `1..65535` | پورت UDP سرور است.<br>به‌طور معمول باید همان `53` باشد تا resolverها بتوانند مستقیماً به آن query بفرستند. |
| `FALLBACK` | حذف‌شده | خالی/خاموش، یا `HOST:PORT`؛ IPv6 داخل براکت | یک raw UDP proxy اختیاری برای datagramهای غیر DNS روی listener DNS است. routing برای هر source جدا نگه داشته می‌شود و فقط یک DNS datagram کامل از نظر ساختار، DNS classification را ایجاد یا reset می‌کند. source ناشناخته با اولین packet غیر DNS فوراً forward و روی fallback ثابت می‌شود، ولی source شناخته‌شده به‌عنوان DNS بعد از ۱۶ packet غیر DNS پیاپی جابه‌جا می‌شود. تا وقتی source به‌عنوان DNS شناخته می‌شود، هر packet نگه‌داشته‌شده روی مسیر DNS، timer بی‌کاری ۱۸۰ ثانیه‌ای را refresh می‌کند؛ packet DNS شمارنده non-DNS را reset و packet غیر DNS آن را افزایش می‌دهد. بعد از وقفه‌ای بیش از ۱۸۰ ثانیه، packet غیر DNS بعدی مانند packet یک source جدید فوراً forward می‌شود. session فعال fallback نیز پس از ۱۸۰ ثانیه نبود ترافیک در هر دو جهت منقضی می‌شود. حالت fallback برای حفظ ترتیب از یک ingress reader و buffer کامل ۶۵۵۳۵ بایتی استفاده می‌کند؛ startup مقصدی را که دوباره به همین listener resolve شود رد می‌کند. sessionها سقف سخت ندارند، پس ترافیک untrusted یا spoofed می‌تواند file descriptor و CPU مصرف کند؛ روی listener عمومی از filtering یا rate limit استفاده کنید. |
| `UDP_READERS` | `4` | اگر `<=0` باشد auto-default | تعداد goroutineهای خواندن مستقیم از socket UDP.<br>عدد بالاتر در سرورهای پر ترافیک مفید است، ولی از یک حد به بعد فقط context switching را زیاد می‌کند. |
| `DNS_REQUEST_WORKERS` | `8` | اگر `<=0` باشد auto-default | تعداد workerهایی که requestهای ورودی را از front-door queue برمی‌دارند و به لایه session/decode می‌دهند. |
| `MAX_CONCURRENT_REQUESTS` | `16384` | اگر `<=0` باشد fallback | ظرفیت صف requestهای ورودی است.<br>اگر این صف پر شود، پکت‌ها drop می‌شوند و سرور rate-limited overload log می‌دهد. |
| `SOCKET_BUFFER_SIZE` | `4194304` | اگر `<=0` باشد fallback | اندازه بافر socket UDP در سطح سیستم‌عامل است.<br>برای burstهای ورودی زیاد مهم است. |
| `MAX_PACKET_SIZE` | `65535` | اگر `<=0` باشد fallback | اندازه بزرگ‌ترین bufferی که packet pool برای هر packet می‌گیرد. |
| `MAX_PACKET_SIZE` | `65535` | اگر `<=0` باشد fallback؛ با `FALLBACK` حداقل `65535` | اندازه بزرگ‌ترین bufferی که packet pool برای هر packet می‌گیرد. fallback برای جلوگیری از truncate شدن raw datagramها buffer کامل UDP را اجباری می‌کند. |
| `DROP_LOG_INTERVAL_SECONDS` | `2.0` | اگر `<=0` باشد fallback | حداقل فاصله بین لاگ‌های drop/overload است تا لاگ سرور در زمان فشار spam نشود. |

### ۳.۵.۳) بخش 🧠 Deferred Session Runtime
Expand Down
3 changes: 2 additions & 1 deletion README_IT.MD
Original file line number Diff line number Diff line change
Expand Up @@ -718,11 +718,12 @@ Queste impostazioni sono critiche sul server:
| :--- | :--- | :--- | :--- |
| `UDP_HOST` | `"0.0.0.0"` | se vuoto, viene usato questo valore | Indirizzo su cui il server DNS si lega.<br>`0.0.0.0` significa ascoltare su tutte le interfacce. |
| `UDP_PORT` | `53` | `1..65535` | Porta UDP usata dal server.<br>Nella maggior parte delle distribuzioni questa dovrebbe rimanere `53` così che i resolver possano interrogarla direttamente. |
| `FALLBACK` | omesso | vuoto/disattivato, oppure `HOST:PORT`; IPv6 tra parentesi quadre | Proxy UDP raw opzionale per i datagrammi non DNS ricevuti dal listener DNS. Il routing è mantenuto per origine e solo un datagramma DNS strutturalmente completo stabilisce o reimposta la classificazione DNS. Una nuova origine non DNS viene inoltrata subito e resta associata al fallback, mentre un'origine classificata come DNS passa al fallback dopo 16 pacchetti non DNS consecutivi. Finché l'origine resta classificata come DNS, ogni pacchetto trattenuto sul percorso DNS aggiorna il timer di inattività di 180 secondi; un pacchetto DNS azzera la sequenza non DNS e un pacchetto non DNS la incrementa. Dopo una pausa superiore a 180 secondi, il pacchetto non DNS successivo viene trattato come proveniente da una nuova origine e inoltrato immediatamente. Anche le sessioni fallback attive scadono dopo 180 secondi senza traffico in entrambe le direzioni. La modalità fallback usa un solo reader di ingresso per conservare l'ordine e un buffer completo da 65.535 byte; l'avvio rifiuta una destinazione che risolve al listener stesso. Le sessioni non hanno un limite rigido, quindi traffico non attendibile o con origine falsificata può consumare file descriptor e CPU; usare filtri di rete o rate limiting sui listener pubblici. |
| `UDP_READERS` | `4` | predefinito automatico se `<=0` | Numero di goroutine che leggono direttamente dal socket UDP.<br>Un numero maggiore può essere d'aiuto su server molto trafficati, ma oltre un certo punto aumenta solo il context switching. |
| `DNS_REQUEST_WORKERS` | `8` | predefinito automatico se `<=0` | Numero di worker che prelevano le richieste dalla coda di ingresso e le passano al livello di sessione/decodifica. |
| `MAX_CONCURRENT_REQUESTS` | `16384` | fallback se `<=0` | Capacità della coda delle richieste in entrata.<br>Se questa coda si riempie, i pacchetti vengono scartati e il server emette log di sovraccarico a frequenza limitata. |
| `SOCKET_BUFFER_SIZE` | `4194304` | fallback se `<=0` | Dimensione del buffer del socket richiesta al sistema operativo per il listener UDP.<br>Questo è importante per i picchi pesanti di traffico in entrata. |
| `MAX_PACKET_SIZE` | `65535` | fallback se `<=0` | Dimensione del buffer del pacchetto più grande che il pool di pacchetti alloca. |
| `MAX_PACKET_SIZE` | `65535` | fallback se `<=0`; almeno `65535` con `FALLBACK` | Dimensione del buffer del pacchetto più grande che il pool di pacchetti alloca. Fallback forza un buffer UDP completo per evitare il troncamento dei datagrammi raw. |
| `DROP_LOG_INTERVAL_SECONDS` | `2.0` | fallback se `<=0` | Intervallo minimo tra log di sovraccarico/scarto ripetuti, per evitare lo spam di log durante la pressione. |

### 3.5.3) 🧠 Runtime delle Sessioni Differite
Expand Down
3 changes: 2 additions & 1 deletion README_RU.MD
Original file line number Diff line number Diff line change
Expand Up @@ -721,11 +721,12 @@ Copy-Item client_resolvers.simple client_resolvers.txt
| :--- | :--- | :--- | :--- |
| `UDP_HOST` | `"0.0.0.0"` | если поле пустое, используется значение по умолчанию. | Адрес, на котором привязан DNS-сервер. <br>`0.0.0.0` означает прослушивание на всех интерфейсах. |
| `UDP_PORT` | `53` | `1..65535` | UDP-порт, используемый сервером.<br>В большинстве случаев должно быть `53`, чтобы резолверы могли напрямую отправлять запросы на этот порт. |
| `FALLBACK` | не задан | пусто/выключено или `HOST:PORT`; IPv6 в квадратных скобках | Необязательный прокси для пересылки необработанных UDP-датаграмм, не являющихся DNS, которые приходят на DNS-listener. Маршрутизация хранится отдельно для каждого источника, и только структурно полная DNS-датаграмма устанавливает или сбрасывает DNS-классификацию. Новый источник с не-DNS пакетом пересылается сразу и закрепляется за fallback, а источник, классифицированный как DNS, переключается после 16 последовательных не-DNS пакетов. Пока источник остаётся классифицированным как DNS, каждый пакет, удержанный на DNS-пути, обновляет 180-секундный таймер бездействия; DNS-пакет сбрасывает последовательность не-DNS, а не-DNS пакет увеличивает её. После паузы более 180 секунд следующий не-DNS пакет считается пакетом от нового источника и пересылается немедленно. Активные fallback-сессии также истекают после 180 секунд без трафика в обоих направлениях. Режим fallback использует один входной reader для сохранения порядка и полный буфер 65 535 байт; запуск отклоняет адрес, который разрешается обратно в этот listener. Жёсткого лимита числа сессий нет, поэтому недоверенный или поддельный трафик может расходовать файловые дескрипторы и CPU; для публичных listener'ов используйте сетевую фильтрацию или ограничение частоты. |
| `UDP_READERS` | `4` | По умолчанию если `<=0` | Количество горутин, осуществляющих чтение непосредственно из UDP-сокета.<br>Большее количество может помочь на очень загруженных серверах, но после определенного предела это только увеличивает количество переключений контекста. |
| `DNS_REQUEST_WORKERS` | `8` | По умолчанию если `<=0` | Количество обработчиков, которые принимают запросы из входной очереди и передают их на уровень сеанса/декодирования. |
| `MAX_CONCURRENT_REQUESTS` | `16384` | По умолчанию если `<=0` | Емкость очереди входящих запросов.<br>Если эта очередь заполняется, пакеты отбрасываются, и сервер выдает сообщения о перегрузке с ограничением скорости. |
| `SOCKET_BUFFER_SIZE` | `4194304` | По умолчанию если `<=0` | Запрос размера буфера сокета операционной системы для UDP-прослушивателя. <br>Это важно при интенсивных всплесках входящего трафика. |
| `MAX_PACKET_SIZE` | `65535` | По умолчанию если `<=0` | Размер самого большого буфера пакетов, выделяемого пулом пакетов. |
| `MAX_PACKET_SIZE` | `65535` | По умолчанию если `<=0`; не менее `65535` с `FALLBACK` | Размер самого большого буфера пакетов, выделяемого пулом пакетов. Fallback принудительно использует полный UDP-буфер, чтобы необработанные датаграммы не обрезались. |
| `DROP_LOG_INTERVAL_SECONDS` | `2.0` | По умолчанию если `<=0` | Минимальный интервал между повторными логами о перегрузке/падении, чтобы избежать избыточного количества логов. |

### 3.5.3) 🧠 Отложенная среда выполнения сессии
Expand Down
Loading