MasterDnsVPN یک نرمافزار متنباز و پیشرفته برای DNS Tunneling است که با زبان Go توسعه داده شده و با کپسولهسازی ترافیک TCP داخل درخواستها و پاسخهای DNS، امکان عبور از محدودیتها و فیلترینگ شدید اینترنت را فراهم میکند. این پروژه با تمرکز بر پایداری، سرعت و عملکرد در شبکههای دارای Packet Loss بالا طراحی شده و نسبت به ابزارهایی مانند DNSTT و SlipStream بهینهسازیهای گستردهای ارائه میدهد.
از مهمترین ویژگیهای آن میتوان به موارد زیر اشاره کرد:
- پشتیبانی از Load Balancing بین چند DNS Resolver
- سیستم Multipath برای ارسال همزمان بستهها از مسیرهای مختلف
- پروتکل اختصاصی ARQ با Overhead بسیار پایین
- رمزنگاریهای متنوع مانند AES-GCM و ChaCha20
- فشردهسازی دادهها با ZSTD و LZ4
- پشتیبانی از SOCKS5 و TCP Tunnel
- تشخیص خودکار MTU
- مانیتورینگ Resolverها
- قابلیت Multiplexing چند اتصال TCP روی یک Session
در ادامه قصد داریم تا MasterDnsVPN را بر روی یک سرور لینوکسی راه اندازی کنیم.
پیش نیازها:
۱. داشتن یک دامنه (Domain)
2. داشتن یک سرور
گام ۱ : تنظیمات دامنه
نیاز هست تا ۲ زیردامنه (subdomain) ایجاد شود. یک رکورد A برای آدرس سرور و یک رکورد NS که زیردامنه را به آن رکورد A ارجاع دهد.
۱.۱. ساخت رکورد A
یک رکورد از نوع A ایجاد کنید (با نام کوتاه) که به آدرس IPv4 سرور اشاره کند. به عنوان نمونه:
ns.example.com ==>> 192.168.1.70
نکته: اگر دامنه روی Cloudflare است، در صفحه DNS روی آیکون ابر کنار رکورد A کلیک کنید تا خاکستری (DNS only) شود؛ نباید Proxied (نارنجی) باشد.
گام ۱.۲. ساخت رکورد NS
یک رکورد از نوع ns ایجاد کنید که به رکورد A که قبلا ایجاد شد، اشاره کند. به عنوان نمونه:
v.example.com ==>> ns.example.com
گام ۲: نصب و تنظیمات سرور
۲.۱. راه اندازی با پادمن (Podman)
برای راه اندازی MasterDnsVPN با استفاده از پادمن (Podman) کافیست تا دستور زیر را اجرا کنید:
$ podman run -d --name masterdnsvpn --restart unless-stopped -e DOMAIN=v.example.com -v $(pwd)/data:/data:Z -p 53:53/tcp -p 53:53/udp ghcr.io/masterking32/masterdnsvpn:latest
اگر قصد دارید تا کانتینر هنگام راه اندازی سرور نیز اجرا شود باید مراحل زیر را انجام دهید. ابتدا فایل Podman Quadlet آن را بسازید:
$ vi ~/.config/containers/systemd/masterdnsvpn.container
[Unit]Description=masterdnsvpn containerAfter=network-online.targetWants=network-online.target[Container]Image=ghcr.io/masterking32/masterdnsvpn:latestPull=newerAutoUpdate=registryContainerName=masterdnsvpnVolume=%h/volumes/masterdnsvpn/data:/data:Z# Environment variablesEnvironment=DOMAIN=v.example.comPublishPort=53:53/udpPublishPort=53:53/tcp[Service]Restart=always[Install]WantedBy=default.target
$ systemctl --user daemon-reload $ systemctl --user start masterdnsvpn
$ podman logs -f masterdnsvpn
۲.۲. راه اندازی با داکر (Docker)
برای راه اندازی MasterDnsVPN با داکر کافیست تا دستور زیر را اجرا کنید:
# docker run -d --name masterdnsvpn --restart unless-stopped -e DOMAIN=v.example.com -v $(pwd)/data:/data -p 53:53/tcp -p 53:53/udp ghcr.io/masterking32/masterdnsvpn:latest
برای دیدن log های کانتینر می توانید از این دستور استفاده کنید:
# docker logs -f masterdnsvpn
روش اتصال به MasterDnsVPN
پس از راه اندازی سرویس MasterDnsVPN کافیست تا Encryption Key را از log های کانتینر یا از فایل encrypt_key.txt که در volume ذخیره شده است را به دست بیاورید. اکنون این Encryption Key و زیردامنه ای (در این مثال v.example.com) که به برنامه معرفی کردید را در کلاینت MasterDnsVPN یا WhiteDNS وارد کنید تا به سرویس MasterDnsVPN متصل شوید.
برای اطلاعات بیشتر و همچنین دانلود کلاینت MasterDnsVPN یا WhiteDNS می توانید به پروژه آنها بر روی Github مراجعه کنید:
https://github.com/masterking32/MasterDnsVPN
https://github.com/iampedii/WhiteDNS

