Skip to content

Commit 7f51aaf

Browse files
committed
Merge upstream/main into tests - resolve type-hint conflicts
Made-with: Cursor
2 parents 32f975c + c041fa0 commit 7f51aaf

15 files changed

Lines changed: 1841 additions & 486 deletions

.github/workflows/build-test-cython.yml

Lines changed: 544 additions & 0 deletions
Large diffs are not rendered by default.

.github/workflows/build.yml

Lines changed: 336 additions & 10 deletions
Large diffs are not rendered by default.

README.MD

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ The table below explains all available settings and their functions in the clien
235235
| `DOMAINS` | `["v.domain.com"]` | Array list (e.g., `["sub.site.com"]`) | The <br>NS<br> subdomain configured in Section 1. This must be exactly the same on both Client and Server. <br> Currently, avoid adding multiple domains! |
236236
| `DATA_ENCRYPTION_METHOD` | `1` | `0` to `5` | **Encryption Algorithm:**<br><br>`0`: Disabled (No security)<br>`1`: XOR algorithm (Recommended - High speed, Medium security)<br>`2`: ChaCha20<br>`3`: AES-128-GCM<br>`4`: AES-192-GCM<br>`5`: AES-256-GCM (Highest security, lowest speed) |
237237
| `ENCRYPTION_KEY` | `""` | String | Encryption key matched with the server. Connections fail without this. |
238+
| `BASE_ENCODE_DATA` | `false` | `true` or `false` | Adds DNS-safe base encoding before packet transport. Usually keep `false`; enabling it increases overhead and may reduce throughput. |
238239
| `LISTEN_IP` | `"0.0.0.0"` | Valid IP (e.g., `127.0.0.1`) | Local IP address the client listens on.<br><br>• `"127.0.0.1"`: Local device only (more secure)<br>• `"0.0.0.0"`: Accessible by all devices on your local network |
239240
| `LISTEN_PORT` | `1080` | Port number (e.g., `1080`) | The port the client listens on so your apps (Browser, Telegram) can connect. |
240241
| `SOCKS5_AUTH` | `true` | `true` or `false` | Enables local <br>SOCKS5<br> authentication. (If `false`, connecting to your proxy requires no user/pass). **Note:** This setting is solely for your local machine's security and has nothing to do with the tunnel connection. It only works if the protocol is set to <br>SOCKS5<br>. |
@@ -257,6 +258,7 @@ The table below explains all available settings and their functions in the clien
257258
| `NUM_DNS_WORKERS` | `3` | Integer (e.g., `1`, `3`, `5`) | Number of TX workers sending DNS queries. Higher values improve concurrency but use more CPU. |
258259
| `SOCKET_BUFFER_SIZE` | `8388608` | Integer (Bytes) | UDP Socket buffer size. Determines how much incoming data the OS buffers before dropping packets. High values recommended for high-traffic environments, requires sufficient RAM. |
259260
| `LOG_LEVEL` | `"INFO"` | `"DEBUG"`, `"INFO"`, `"WARNING"`, `"ERROR"`, `"CRITICAL"` | Client logging verbosity. `DEBUG` helps troubleshooting but generates massive logs. `INFO` or `WARNING` is best for daily use. |
261+
| `CONFIG_VERSION` | `3.0` | Float/Number | Config schema version used for compatibility checks with current client defaults. |
260262

261263
---
262264

@@ -293,13 +295,16 @@ The following items were added/changed in recent versions and are reflected in `
293295
| `SOCKS5_PASS` | `"123456"` | Custom string | Password for the external SOCKS proxy. |
294296
| `ARQ_INITIAL_RTO` | `1.0` | Float (Seconds) | Initial ARQ Timeout. See client config table for details. |
295297
| `ARQ_MAX_RTO` | `3.0` | Float (Seconds) | Max ARQ Retransmission limit. See client config table. |
298+
| `SUPPORTED_UPLOAD_COMPRESSION_TYPES` | `[0, 1, 2, 3]` | List of `0..3` | Server-allowed upload compression types. Invalid values are dropped; `0` (OFF) is always enforced as fallback. |
299+
| `SUPPORTED_DOWNLOAD_COMPRESSION_TYPES` | `[0, 1, 2, 3]` | List of `0..3` | Server-allowed download compression types. Invalid values are dropped; `0` (OFF) is always enforced as fallback. |
296300
| `ARQ_WINDOW_SIZE` | `3000` | Integer | Server-side window size. Must scale with Server <br>RAM<br>. |
297301
| `MAX_CONCURRENT_REQUESTS` | `1000` | Integer | Max concurrent async DNS queries handled by the server. 5000 for strong servers, 1000 for weaker ones. |
298302
| `MAX_PACKETS_PER_BATCH` | `20` | Integer | Max number of small control packets merged together. 5-20 is ideal. `1` disables packing (reduces latency but increases CPU load). |
299303
| `SOCKET_BUFFER_SIZE` | `8388608` | Integer (Bytes) | Server UDP Socket buffer size. High values recommended. |
300304
| `LOG_LEVEL` | `"INFO"` | `"DEBUG"`, `"INFO"`, `"WARNING"`, `"ERROR"`, `"CRITICAL"` | Server logging verbosity. |
301305
| `SESSION_TIMEOUT` | `300` | Integer (Seconds) | Inactivity duration before a Session is considered expired and killed. 300 (5 mins) is a good balance. |
302306
| `SESSION_CLEANUP_INTERVAL` | `60` | Integer (Seconds) | Frequency the background worker scans for and purges dead sessions to free memory. |
307+
| `CONFIG_VERSION` | `2.0` | Float/Number | Config schema version used for compatibility checks with current server defaults. |
303308

304309
---
305310

README_ES.MD

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@ La siguiente tabla explica todas las opciones disponibles y sus funciones en el
233233
| `DOMAINS` | `["v.domain.com"]` | Lista de valores (por ej., `["sub.site.com"]`) | El subdominio `NS` configurado en la Sección 1. Debe ser exactamente el mismo en el Cliente y en el Servidor. <br> ¡Por ahora, evitá agregar múltiples dominios! |
234234
| `DATA_ENCRYPTION_METHOD` | `1` | `0` a `5` | **Algoritmo de Cifrado:**<br><br>`0`: Desactivado (Sin seguridad)<br>`1`: Algoritmo XOR (Recomendado - Alta velocidad, seguridad media)<br>`2`: ChaCha20<br>`3`: AES-128-GCM<br>`4`: AES-192-GCM<br>`5`: AES-256-GCM (Máxima seguridad, menor velocidad) |
235235
| `ENCRYPTION_KEY` | `""` | Cadena de texto | Clave de cifrado que debe coincidir con el servidor. Las conexiones fallan sin esta clave. |
236+
| `BASE_ENCODE_DATA` | `false` | `true` o `false` | Aplica una codificación base compatible con DNS antes del transporte. Normalmente dejalo en `false`; activarlo agrega overhead y puede bajar el rendimiento. |
236237
| `LISTEN_IP` | `"0.0.0.0"` | IP válida (por ej., `127.0.0.1`) | Dirección IP local en la que escucha el cliente.<br><br>• `"127.0.0.1"`: Solo el dispositivo local (más seguro)<br>• `"0.0.0.0"`: Accesible por todos los dispositivos de tu red local |
237238
| `LISTEN_PORT` | `1080` | Número de puerto (por ej., `1080`) | El puerto en el que escucha el cliente para que tus apps (Navegador, Telegram) puedan conectarse. |
238239
| `SOCKS5_AUTH` | `true` | `true` o `false` | Habilita la autenticación local de `SOCKS5`. (Si es `false`, conectarse a tu proxy no requiere usuario/contraseña). **Nota:** Esta configuración es únicamente para la seguridad de tu máquina local y no tiene nada que ver con la conexión del túnel. Solo funciona si el protocolo está configurado en `SOCKS5`. |
@@ -255,6 +256,7 @@ La siguiente tabla explica todas las opciones disponibles y sus funciones en el
255256
| `NUM_DNS_WORKERS` | `3` | Entero (por ej., `1`, `3`, `5`) | Cantidad de trabajadores TX que envían consultas DNS. Valores mayores mejoran la concurrencia pero consumen más CPU. |
256257
| `SOCKET_BUFFER_SIZE` | `8388608` | Entero (Bytes) | Tamaño del buffer del socket UDP. Determina cuántos datos entrantes almacena en buffer el sistema operativo antes de descartar paquetes. Se recomiendan valores altos para entornos de alto tráfico; requiere RAM suficiente. |
257258
| `LOG_LEVEL` | `"INFO"` | `"DEBUG"`, `"INFO"`, `"WARNING"`, `"ERROR"`, `"CRITICAL"` | Nivel de detalle de los registros del cliente. `DEBUG` ayuda a solucionar problemas pero genera registros masivos. `INFO` o `WARNING` es mejor para uso diario. |
259+
| `CONFIG_VERSION` | `3.0` | Número (float/int) | Versión del esquema de configuración usada para validar compatibilidad con los valores actuales del cliente. |
258260

259261
---
260262

@@ -289,6 +291,8 @@ Estos cambios ya están reflejados en los archivos `.simple` y en el código act
289291
| `SOCKS5_AUTH` | `false` | `true` o `false` | Habilita la lógica de autenticación para el proxy SOCKS5 *Externo*. Solo se usa si `USE_EXTERNAL_SOCKS5=true`. |
290292
| `SOCKS5_USER` | `"admin"` | Cadena personalizada | Nombre de usuario para el proxy SOCKS externo. |
291293
| `SOCKS5_PASS` | `"123456"` | Cadena personalizada | Contraseña para el proxy SOCKS externo. |
294+
| `SUPPORTED_UPLOAD_COMPRESSION_TYPES` | `[0, 1, 2, 3]` | Lista de `0..3` | Tipos de compresión permitidos por el servidor para subida. Valores inválidos se eliminan y `0` (OFF) se garantiza siempre como fallback. |
295+
| `SUPPORTED_DOWNLOAD_COMPRESSION_TYPES` | `[0, 1, 2, 3]` | Lista de `0..3` | Tipos de compresión permitidos por el servidor para bajada. Valores inválidos se eliminan y `0` (OFF) se garantiza siempre como fallback. |
292296
| `ARQ_INITIAL_RTO` | `1.0` | Float (Segundos) | Timeout ARQ inicial. Ver tabla de configuración del cliente para más detalles. |
293297
| `ARQ_MAX_RTO` | `3.0` | Float (Segundos) | Límite máximo de retransmisión ARQ. Ver tabla del cliente. |
294298
| `ARQ_WINDOW_SIZE` | `3000` | Entero | Tamaño de ventana del lado del servidor. Debe escalar con la RAM del Servidor. |
@@ -298,6 +302,7 @@ Estos cambios ya están reflejados en los archivos `.simple` y en el código act
298302
| `LOG_LEVEL` | `"INFO"` | `"DEBUG"`, `"INFO"`, `"WARNING"`, `"ERROR"`, `"CRITICAL"` | Nivel de detalle de los registros del servidor. |
299303
| `SESSION_TIMEOUT` | `300` | Entero (Segundos) | Duración de inactividad antes de que una Sesión se considere expirada y se termine. 300 (5 minutos) es un buen equilibrio. |
300304
| `SESSION_CLEANUP_INTERVAL` | `60` | Entero (Segundos) | Frecuencia con la que el trabajador en segundo plano analiza y elimina sesiones muertas para liberar memoria. |
305+
| `CONFIG_VERSION` | `2.0` | Número (float/int) | Versión del esquema de configuración usada para validar compatibilidad con los valores actuales del servidor. |
301306

302307
---
303308

README_FA.MD

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ python client.py
237237
| `DOMAINS` | `["v.domain.com"]` | لیست آرایه‌ای (مثلاً `["sub.site.com"]`) | آدرس زیردامنهٔ <br>NS<br> که در بخش ۱ تنظیم کردید. این مقدار باید در کلاینت و سرور کاملاً یکسان باشد. <br> در حال حاضر از ثبت چندین دامنه خودداری کنید!|
238238
| `DATA_ENCRYPTION_METHOD` | `1` | `0` تا `5` | **الگوریتم رمزنگاری:**<br><br>`0`: خاموش (بدون امنیت)<br>`1`: الگوریتم XOR (توصیه شده - سرعت بالا، امنیت متوسط)<br>`2`: ChaCha20<br>`3`: AES-128-GCM<br>`4`: AES-192-GCM<br>`5`: AES-256-GCM (بالاترین امنیت، کمترین سرعت) |
239239
| `ENCRYPTION_KEY` | `""` | رشته متنی (String) | کلید رمزنگاری هماهنگ با سرور. بدون این کلید ارتباط با سرور رد می‌شود. |
240+
| `BASE_ENCODE_DATA` | `false` | `true` یا `false` | قبل از ارسال بسته‌ها، داده را به قالب Base سازگار با DNS تبدیل می‌کند. معمولاً روی `false` بماند؛ فعال بودنش سربار را بیشتر و سرعت را کمتر می‌کند. |
240241
| `LISTEN_IP` | `"0.0.0.0"` | IP معتبر (مثلاً `127.0.0.1`) | آدرس IP محلی که کلاینت روی آن سرویس می‌دهد.<br><br>• `"127.0.0.1"`: فقط دستگاه خودتان (امن‌تر)<br>• `"0.0.0.0"`: دسترسی تمام دستگاه‌های متصل به شبکه محلی شما |
241242
| `LISTEN_PORT` | `1080` | شماره پورت (مثلاً `1080`) | پورتی که کلاینت روی آن گوش می‌دهد تا برنامه‌های شما (تلگرام، مرورگر) به آن متصل شوند. |
242243
| `SOCKS5_AUTH` | `true` | `true` یا `false` | فعال‌سازی احراز هویت پروکسی <br>SOCKS5<br> محلی. (اگر <br>`false`<br> باشد، اتصال به پروکسی شما نیازی به یوزر/پسورد ندارد). **نکته:** این تنظیم فقط برای امنیت سیستم خودتان است و ربطی به اتصال به سرور تونل ندارد و فقط در صورتی کار میکند که نوع پروتکل ارتباطی <br>SOCKS5<br> باشد. |
@@ -259,6 +260,7 @@ python client.py
259260
| `NUM_DNS_WORKERS` | `3` | عدد صحیح (مثلاً `1` یا `3` یا `5`) | تعداد کارگرهای (Workers) DNS که مسئول ارسال کوئری‌های DNS و پردازش پاسخ‌ها هستند. افزایش این مقدار می‌تواند در شبکه‌های با ترافیک بالا یا تاخیر زیاد مفید باشد، اما مصرف منابع را نیز افزایش می‌دهد. |
260261
| `SOCKET_BUFFER_SIZE` | `8388608` | عدد صحیح (بایت) | اندازه بافر سوکت UDP. این مقدار تعیین می‌کند که چقدر داده می‌تواند در بافر سوکت ذخیره شود قبل از اینکه سیستم عامل شروع به رد کردن بسته‌ها کند. افزایش این مقدار در شبکه‌های با ترافیک بالا یا تاخیر زیاد توصیه می‌شود، اما توجه داشته باشید که مقادیر بسیار بالا ممکن است باعث مصرف بیش از حد حافظه شود. |
261262
| `LOG_LEVEL` | `"INFO"` | `"DEBUG"`, `"INFO"`, `"WARNING"`, `"ERROR"`, `"CRITICAL"` | سطح لاگ‌گیری برای کلاینت. تنظیم این مقدار به `DEBUG` می‌تواند در هنگام عیب‌یابی مفید باشد، اما ممکن است حجم زیادی از لاگ‌ها را تولید کند. برای استفاده روزمره، `INFO` یا `WARNING` معمولاً کافی است. |
263+
| `CONFIG_VERSION` | `3.0` | عدد (اعشاری/صحیح) | نسخه ساختار فایل کانفیگ برای بررسی سازگاری با نسخه فعلی کلاینت. |
262264

263265
---
264266

@@ -293,6 +295,8 @@ python client.py
293295
| `SOCKS5_AUTH` | `false` | `true` یا `false` | فعال‌سازی احراز هویت برای پروکسی ساکس5 خارجی. این تنظیم فقط در صورتی استفاده می‌شود که <br>`USE_EXTERNAL_SOCKS5=true`<br> باشد و پروکسی خارجی شما نیاز به احراز هویت داشته باشد. |
294296
| `SOCKS5_USER` | `"admin"` | رشته متنی دلخواه | هویت در پروکسی ساکس5 خارجی (در صورت فعال بودن `SOCKS5_AUTH`). |
295297
| `SOCKS5_PASS` | `"123456"` | رشته متنی دلخواه | رمز عبور برای احراز هویت در پروکسی ساکس5 خارجی (در صورت فعال بودن `SOCKS5_AUTH`). |
298+
| `SUPPORTED_UPLOAD_COMPRESSION_TYPES` | `[0, 1, 2, 3]` | لیست اعداد `0..3` | لیست الگوریتم‌های فشرده‌سازی مجاز سمت سرور برای آپلود. مقادیر نامعتبر حذف می‌شوند و مقدار `0` (خاموش) همیشه به‌عنوان حالت جایگزین اجباری است. |
299+
| `SUPPORTED_DOWNLOAD_COMPRESSION_TYPES` | `[0, 1, 2, 3]` | لیست اعداد `0..3` | لیست الگوریتم‌های فشرده‌سازی مجاز سمت سرور برای دانلود. مقادیر نامعتبر حذف می‌شوند و مقدار `0` (خاموش) همیشه به‌عنوان حالت جایگزین اجباری است. |
296300
| `ARQ_INITIAL_RTO` | `1.0` | عدد اعشاری (ثانیه) | زمان اولیه تایم‌اوت برای پروتکل <br>ARQ<br> در صورت عدم دریافت تایید برای یک بسته. این مقدار تعیین می‌کند که کلاینت پس از ارسال یک بسته، چقدر منتظر پاسخ بماند قبل از اینکه آن را مجدداً ارسال کند. افزایش این مقدار در شبکه‌های با تاخیر بالا یا تلفات سنگین توصیه می‌شود، اما ممکن است باعث کند شدن واکنش به بسته‌های گمشده شود. |
297301
| `ARQ_MAX_RTO` | `3.0` | عدد اعشاری (ثانیه) | حداکثر زمان قابل افزایش برای ارسال مجدد پکت توسط <br>ARQ<br>. این مقدار تعیین می‌کند که در صورت تکرار نشدن دریافت تایید برای یک بسته، حداکثر چقدر زمان بین تلاش‌های مجدد افزایش یابد. تنظیم این مقدار به ۵.۰ یا حتی ۱۰.۰ در شبکه‌های بسیار پر اختلال ممکن است لازم باشد، اما توجه داشته باشید که مقادیر بسیار بالا ممکن است باعث شود کلاینت برای مدت طولانی منتظر بماند قبل از تلاش مجدد، که می‌تواند تجربه کاربری را تحت تأثیر قرار دهد. |
298302
| `ARQ_WINDOW_SIZE` | `3000` | عدد صحیح (مثلاً `300` یا `1000` یا `3000`) | اندازه پنجره (تعداد بسته‌های بدون تایید که می‌توانند همزمان در جریان باشند). این مقدار باید متناسب با حافظه <br>RAM<br> سرور تنظیم شود. برای اکثر کاربران، مقدار ۳۰۰۰ تعادل خوبی بین عملکرد و مصرف منابع ایجاد می‌کند، اما اگر سرور شما <br>RAM<br> بسیار کمی دارد، کاهش این مقدار به ۳۰۰ ممکن است ضروری باشد. اما کاهش این مقدار ممکن است باعث قطع و وصل شدن ارتباطات شود. |
@@ -302,6 +306,7 @@ python client.py
302306
| `LOG_LEVEL` | `"INFO"` | `"DEBUG"`, `"INFO"`, `"WARNING"`, `"ERROR"`, `"CRITICAL"` | سطح لاگ‌گیری برای سرور. تنظیم این مقدار به `DEBUG` می‌تواند در هنگام عیب‌یابی مفید باشد، اما ممکن است حجم زیادی از لاگ‌ها را تولید کند. برای استفاده روزمره، `INFO` یا `WARNING` معمولاً کافی است. |
303307
| `SESSION_TIMEOUT` | `300` | عدد صحیح (ثانیه) | مدت زمان عدم فعالیت (ثانیه) پس از آنکه یک نشست (Session) منقضی در نظر گرفته می‌شود. این مقدار تعیین می‌کند که اگر یک نشست برای مدت زمان مشخصی بدون فعالیت باقی بماند، سرور آن را منقضی شده در نظر گرفته و منابع مربوط به آن را آزاد می‌کند. تنظیم این مقدار به ۳۰۰ ثانیه (۵ دقیقه) معمولاً تعادل خوبی بین حفظ نشست‌های فعال و آزادسازی منابع برای نشست‌های غیرفعال ایجاد می‌کند. |
304308
| `SESSION_CLEANUP_INTERVAL` | `60` | عدد صحیح (ثانیه) | فرکانس (ثانیه) که سرور برای بررسی و حذف نشست‌های منقضی شده استفاده می‌کند. این مقدار تعیین می‌کند که هر چند وقت یکبار سرور به صورت دوره‌ای بررسی کند که کدام نشست‌ها منقضی شده‌اند و منابع مربوط به آن‌ها را آزاد کند. تنظیم این مقدار به ۶۰ ثانیه (۱ دقیقه) معمولاً تعادل خوبی بین عملکرد و مصرف منابع ایجاد می‌کند. |
309+
| `CONFIG_VERSION` | `2.0` | عدد (اعشاری/صحیح) | نسخه ساختار فایل کانفیگ برای بررسی سازگاری با نسخه فعلی سرور. |
305310

306311
---
307312

build_setup.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,46 @@
44
from setuptools import Extension, setup
55

66

7-
def build_dns_utils_extensions() -> list[Extension]:
7+
def build_extensions() -> list[Extension]:
88
base_dir = Path(__file__).resolve().parent
99
utils_dir = base_dir / "dns_utils"
1010
extensions: list[Extension] = []
1111

12+
# Compile package modules.
1213
for py_file in sorted(utils_dir.glob("*.py")):
1314
if py_file.name == "__init__.py":
1415
continue
15-
1616
module_name = f"dns_utils.{py_file.stem}"
1717
extensions.append(Extension(module_name, [str(py_file)]))
1818

19-
return extensions
19+
# Compile top-level runtime modules.
20+
for entry_name in ("client.py", "server.py"):
21+
entry_path = base_dir / entry_name
22+
if entry_path.is_file():
23+
module_name = entry_path.stem
24+
extensions.append(Extension(module_name, [str(entry_path)]))
2025

26+
return extensions
2127

22-
extensions = build_dns_utils_extensions()
2328

29+
extensions = build_extensions()
2430
if not extensions:
25-
raise RuntimeError("No Python modules found in dns_utils for Cython build.")
31+
raise RuntimeError("No Python modules found for Cython build.")
32+
2633

2734
setup(
28-
name="dns_utils_cython_build",
35+
name="masterdnsvpn_cython_build",
2936
ext_modules=cythonize(
3037
extensions,
3138
compiler_directives={
3239
"language_level": "3",
40+
"annotation_typing": False,
3341
"boundscheck": False,
3442
"wraparound": False,
3543
"cdivision": True,
3644
"nonecheck": False,
3745
},
46+
force=True,
3847
annotate=False,
3948
),
4049
)

0 commit comments

Comments
 (0)