# 🌍 thefeed **خواندن کانال‌های تلگرام از طریق DNS — برای اینترنت سانسورشده** [English](README.md) | فارسی --- ## thefeed چیست؟ thefeed یک سیستم تونل DNS است که به شما اجازه می‌دهد پیام‌های کانال‌های تلگرام را حتی وقتی تلگرام و اینترنت فیلتر شده، بخوانید. تنها چیزی که نیاز دارید **DNS** است — که تقریباً هیچ‌وقت مسدود نمی‌شود. ``` کلاینت درخواست DNS TXT سرور MTProto تلگرام (رابط وب) ─────────────────────▸ (DNS) ──────────────────────▸ API ◂───────────────────── ◂────────────────────── پاسخ رمزنگاری‌شده ``` ## ✨ ویژگی‌ها ### سمت سرور (خارج از ایران) - اتصال به تلگرام و خواندن پیام‌ کانال‌ها - سرو داده‌ها به صورت پاسخ DNS TXT رمزنگاری‌شده - padding تصادفی برای جلوگیری از شناسایی DPI - ذخیره‌سازی session — یک‌بار لاگین، همیشه اجرا - پشتیبانی از حالت بدون تلگرام (`--no-telegram`) — خواندن کانال‌های عمومی بدون نیاز به ورود به تلگرام ### سمت کلاینت (داخل ایران) - رابط کاربری وب با پشتیبانی RTL/فارسی (فونت وزیرمتن) - تنظیمات از طریق مرورگر — بدون نیاز به خط فرمان - ارسال پیام به کانال‌ها و چت‌های خصوصی (نیاز به `--allow-manage` سمت سرور) - مدیریت کانال‌ها از راه دور (افزودن/حذف کانال‌ها) - فشرده‌سازی پیام‌ها (deflate) - محافظت رابط وب با رمز عبور (`--password` سمت کلاینت) - لاگ زنده درخواست‌های DNS در مرورگر - کش آفلاین — داده‌ها بعد از قطع اتصال نگه داشته می‌شوند ### ضد DPI - **اندازه متغیر پاسخ**: Padding تصادفی (۰-۳۲ بایت) - **کوئری تک‌برچسب**: رمزنگاری Base32 در یک برچسب DNS - **شافل Resolver**: توزیع تصادفی کوئری‌ها بین resolverها - **محدودیت نرخ**: قابل تنظیم برای ترکیب با ترافیک عادی DNS - **Padding تصادفی کوئری**: ۴ بایت تصادفی در هر درخواست - **اندازه بلاک متغیر**: بلاک‌های ۴۰۰-۷۰۰ بایت ## 🔐 رمزنگاری و احراز هویت ### مدل دو بخشی **بخش ۱ — رمز عبور رمزنگاری (`--key`):** روی سرور و کلاینت هر دو لازم است. هر کسی با این رمز می‌تواند همه پیام‌ها (از جمله کانال‌های خصوصی) را بخواند. می‌توانید آن را با دوستان مورد اعتماد به اشتراک بگذارید. **بخش ۲ — مدیریت از راه دور (`--allow-manage` سمت سرور):** وقتی فعال باشد، هر کسی با کلید رمزنگاری می‌تواند پیام ارسال کند و کانال‌ها را مدیریت کند. به صورت پیش‌فرض غیرفعال است. **رمز عبور وب کلاینت (`--password`):** تمام صفحات رابط وب را با HTTP Basic Auth محافظت می‌کند. این فقط محافظت محلی است. ### ویژگی‌های امنیتی - **AES-256-GCM** برای تمام پاسخ‌ها و پیام‌های ارسالی - کلیدهای مجزا از طریق HKDF برای کوئری و پاسخ - Padding تصادفی در هر دو جهت - بدون state — هر درخواست مستقل است - بررسی رمز عبور ادمین سمت سرور با مقایسه زمان‌ثابت - فایل session با مجوز ۰۶۰۰ > ⚠️ هرگز رمز عبور رمزنگاری (passphrase) خود را عمومی به اشتراک نگذارید — هر کسی با آن می‌تواند کلاینت خودش را اجرا و تمام پیام‌های شما را بخواند. `--password` سمت کلاینت فقط رابط وب روی دستگاه خودتان را محافظت می‌کند. ## ⚡ نصب سریع سرور ```bash sudo bash -c "$(curl -Ls https://raw.githubusercontent.com/sartoopjj/thefeed/main/scripts/install.sh)" ``` اسکریپت: 1. آخرین باینری را از GitHub دانلود می‌کند 2. دامنه، رمز عبور، اطلاعات تلگرام و کانال‌ها را می‌پرسد 3. به تلگرام لاگین می‌کند (یک‌بار) 4. سرویس systemd را راه‌اندازی می‌کند ```bash # بروزرسانی sudo bash install.sh # لاگین مجدد تلگرام sudo bash install.sh --login # حذف sudo bash install.sh --uninstall ``` ## 🖥️ نصب کلاینت ### لینوکس / macOS / ویندوز از صفحه [Releases](https://github.com/sartoopjj/thefeed/releases) باینری مناسب سیستم خود را دانلود کنید. ```bash # اجرا (مرورگر خودکار باز می‌شود) ./thefeed-client # با پورت و دایرکتوری سفارشی ./thefeed-client --port 9090 --data-dir ./mydata # با رمز عبور ادمین ./thefeed-client --password "your-password" ``` ### اندروید (Termux) ```bash # نصب Termux از F-Droid pkg update && pkg install curl # دانلود باینری اندروید curl -Lo thefeed-client https://github.com/sartoopjj/thefeed/releases/latest/download/thefeed-client-android-arm64 chmod +x thefeed-client # اجرا ./thefeed-client # مرورگر را باز کنید: http://127.0.0.1:8080 ``` ## ⚙️ تنظیمات DNS شما به **دو رکورد DNS** نیاز دارید. فرض کنید IP سرور شما `203.0.113.10` است: | نوع | نام | مقدار | |-----|-----|-------| | A | `ns.example.com` | `203.0.113.10` | | NS | `t.example.com` | `ns.example.com` | > **توجه:** سرور باید روی پورت ۵۳ پاسخ بدهد. بهتر است روی پورت غیرمحدود (`:5300`) اجرا و با iptables فوروارد کنید: > > نام اینترفیس شبکه خود را با `ip a` پیدا کنید و `eth0` را جایگزین کنید: > ```bash > sudo iptables -I INPUT -p udp --dport 5300 -j ACCEPT > sudo iptables -t nat -I PREROUTING -i eth0 -p udp --dport 53 -j REDIRECT --to-ports 5300 > sudo ip6tables -I INPUT -p udp --dport 5300 -j ACCEPT > sudo ip6tables -t nat -I PREROUTING -i eth0 -p udp --dport 53 -j REDIRECT --to-ports 5300 > ``` > > برای ماندگار کردن این قوانین بعد از ریبوت: > ```bash > sudo apt install iptables-persistent # Debian/Ubuntu > sudo netfilter-persistent save > ``` ## 🛠️ ساخت از سورس ```bash # پیش‌نیازها: Go 1.26+ make build # ساخت سرور و کلاینت make build-all # کراس‌کامپایل تمام پلتفرم‌ها make test # اجرای تست‌ها make upx # فشرده‌سازی باینری‌ها با UPX ``` ## 📋 پرچم‌های سرور | پرچم | پیش‌فرض | توضیح | |-------|---------|-------| | `--data-dir` | `./data` | دایرکتوری داده‌ها | | `--domain` | | دامنه DNS (الزامی) | | `--key` | | رمز عبور رمزنگاری (الزامی) | | `--channels` | `{data-dir}/channels.txt` | فایل کانال‌ها | | `--api-id` | | شناسه API تلگرام | | `--api-hash` | | هش API تلگرام | | `--phone` | | شماره تلفن تلگرام | | `--listen` | `:53` | آدرس شنود DNS | | `--login-only` | `false` | فقط لاگین به تلگرام | | `--no-telegram` | `false` | اجرا بدون ورود به تلگرام (فقط کانال‌های عمومی) | | `--padding` | `32` | حداکثر padding تصادفی | | `--msg-limit` | `15` | حداکثر تعداد پیام‌ها برای هر کانال تلگرام | | `--allow-manage` | `false` | فعال‌سازی مدیریت از راه دور (ارسال پیام و مدیریت کانال‌ها) | ## 📋 پرچم‌های کلاینت | پرچم | پیش‌فرض | توضیح | |-------|---------|-------| | `--data-dir` | `./thefeeddata` | دایرکتوری داده‌ها | | `--port` | `8080` | پورت رابط وب | | `--password` | | رمز عبور ادمین (خالی = بدون احراز هویت) | ## 📂 فرمت channels.txt ``` # خطوط با # کامنت هستند @VahidOnline @SomeChannel ``` ## 🤝 مشارکت مشارکت شما خوش‌آمد است! Issue بزنید یا Pull Request بفرستید. ## 📄 لایسنس MIT ---
**برای ایران آزاد 🇮🇷** *هر ایرانی حق دسترسی آزاد به اطلاعات را دارد*