21 KiB
🌍 thefeed
خواندن کانالهای تلگرام و حسابهای عمومی X از طریق DNS — برای اینترنت سانسورشده
English | فارسی
thefeed چیست؟
thefeed یک سیستم تونل DNS است که به شما اجازه میدهد پیامهای کانالهای تلگرام را حتی وقتی تلگرام و اینترنت فیلتر شده، بخوانید. تنها چیزی که نیاز دارید DNS است — که تقریباً هیچوقت مسدود نمیشود.
کلاینت درخواست DNS TXT سرور MTProto تلگرام
(رابط وب) ─────────────────────▸ (DNS) ──────────────────────▸ API
◂───────────────────── ◂──────────────────────
پاسخ رمزنگاریشده
✨ ویژگیها
سمت سرور (خارج از ایران)
- اتصال به تلگرام و خواندن پیام کانالها
- دریافت پستهای عمومی X از حسابهای تنظیمشده (بدون لاگین)
- سرو دادهها به صورت پاسخ DNS TXT رمزنگاریشده
- padding تصادفی برای جلوگیری از شناسایی DPI
- ذخیرهسازی session — یکبار لاگین، همیشه اجرا
- پشتیبانی از حالت بدون تلگرام (
--no-telegram) — خواندن کانالهای عمومی بدون نیاز به ورود به تلگرام
سمت کلاینت (داخل ایران)
- رابط کاربری وب با پشتیبانی RTL/فارسی (فونت وزیرمتن)
- ارسال پیام به کانالها و چتهای خصوصی (نیاز به
--allow-manageسمت سرور و ورود به تلگرام) - مدیریت کانالها از راه دور ( افزودن/حذف کانالها از طریق دستورات ادمین وقتی
--allow-manageفعال است) - فشردهسازی پیامها (deflate)
- محافظت رابط وب با رمز عبور (
--passwordسمت کلاینت) - لاگ زنده درخواستهای DNS در مرورگر
- جستجوی پیامها: جستجو در پیامهای کانال فعلی با هایلایت نتایج و ناوبری قبلی/بعدی
- خروجی پیامها: کپی N پیام آخر یک کانال به کلیپبورد
- بانک ریزالور: مدیریت مشترک ریزالورها برای تمام پروفایلها — بدون نیاز به تنظیم ریزالور جداگانه برای هر پروفایل. ریزالورها از طریق اسکنر، ایمپورت، یا ورود دستی اضافه میشوند و به صورت خودکار امتیازدهی میشوند
- پاکسازی ریزالور: حذف ریزالورهای ضعیف از بانک بر اساس حداقل امتیاز دلخواه
- نمایش ریزالورهای فعال: مشاهده لیست ریزالورهای سالم و فعال از تنظیمات
- تصویر پسزمینه: تنظیم URL تصویر پسزمینه برای پنل پیامها (ذخیره محلی)
- تایماوت DNS: تنظیم تایماوت کوئری DNS برای هر پروفایل (پیشفرض ۱۵ ثانیه)
- اسکنر ریزالور: اسکن بازههای IP و CIDR برای پیدا کردن سرورهای DNS کارآمد
اسکنر ریزالور
رابط وب شامل یک اسکنر ریزالور داخلی است (آیکون 🔍 در نوار کناری) که بازههای IP را بررسی میکند تا سرورهای DNS قابل دسترسی به سرور thefeed شما را پیدا کند:
- اهداف متنوع: آیپیهای تکی، CIDR (مثل
5.1.0.0/16)، یا نام دامنه — هر خط یکی - بارگذاری CIDR ایران: دکمه یککلیکی برای بارگذاری لیست بازههای ISP ایران
- پاک کردن اهداف: دکمه برای پاک کردن سریع لیست CIDR/IP اسکنر
- انتخاب پروفایل: انتخاب کنید کدام پروفایل برای تست استفاده شود
- قابل تنظیم: همزمانی (پیشفرض ۵۰)، تایماوت (پیشفرض ۱۵ ثانیه)، حداکثر آیپی
- گسترش /24: وقتی ریزالور کارآمد پیدا شد، آیپیهای نزدیک در همان /24 هم بررسی میشوند
- مکث / ادامه / توقف: کنترل کامل روی اسکنهای طولانی (مکث واقعاً ارسال درخواستهای جدید را متوقف میکند)
- زمان پاسخ: نتایج بر اساس تأخیر مرتب شدهاند تا سریعترینها اول نمایش داده شوند
- انتخاب نتایج: چکباکس برای انتخاب ریزالورهای مورد نظر
- اعمال نتایج: افزودن یا جایگزینی بانک ریزالور مستقیم از اسکنر
- کپی: دکمه کپی برای هر آیپی، کپی انتخابشدهها، یا کپی همه
- اسکن جدید: بازنشانی رابط کاربری برای شروع اسکن جدید پس از اتمام
- لاگ دیباگ: در حالت دیباگ، کوئریها و پاسخهای هر probe ثبت میشوند
ضد DPI
- اندازه متغیر پاسخ: Padding تصادفی (۰-۳۲ بایت)
- کوئری تکبرچسب: رمزنگاری Base32 در یک برچسب DNS
- شافل Resolver: توزیع تصادفی کوئریها بین resolverها
- بانک ریزالور: مخزن مشترک ریزالورها با امتیازدهی دائمی و ابزار پاکسازی
- محدودیت نرخ: قابل تنظیم برای ترکیب با ترافیک عادی DNS
- Padding تصادفی کوئری: ۴ بایت تصادفی در هر درخواست
- اندازه بلاک متغیر: بلاکهای ۴۰۰-۷۰۰ بایت
🔐 رمزنگاری و احراز هویت
مدل دو بخشی
بخش ۱ — رمز عبور رمزنگاری (--key): روی سرور و کلاینت هر دو لازم است. هر کسی با این رمز میتواند همه پیامها (از جمله کانالهای خصوصی) را بخواند. میتوانید آن را با دوستان مورد اعتماد به اشتراک بگذارید.
بخش ۲ — مدیریت از راه دور (--allow-manage سمت سرور): وقتی فعال باشد، هر کسی با کلید رمزنگاری میتواند پیام ارسال کند و کانالها را مدیریت کند. به صورت پیشفرض غیرفعال است.
رمز عبور وب کلاینت (--password): تمام صفحات رابط وب را با HTTP Basic Auth محافظت میکند. این فقط محافظت محلی است.
ویژگیهای امنیتی
- AES-256-GCM برای تمام پاسخها و پیامهای ارسالی
- کلیدهای مجزا از طریق HKDF برای کوئری و پاسخ
- Padding تصادفی در هر دو جهت
- بدون state — هر درخواست مستقل است
- بررسی رمز عبور ادمین سمت سرور با مقایسه زمانثابت
- فایل session با مجوز ۰۶۰۰
⚠️ هرگز رمز عبور رمزنگاری (passphrase) خود را عمومی به اشتراک نگذارید — هر کسی با آن میتواند کلاینت خودش را اجرا و تمام پیامهای شما را بخواند.
--passwordسمت کلاینت فقط رابط وب روی دستگاه خودتان را محافظت میکند.
دانلود
| پلتفرم | معماری | سرور | کلاینت |
|---|---|---|---|
| لینوکس | amd64 | دانلود | دانلود |
| لینوکس | arm64 | دانلود | دانلود |
| مک | amd64 (Intel) | دانلود | دانلود |
| مک | arm64 (Apple Silicon) | دانلود | دانلود |
| FreeBSD | amd64 | دانلود | دانلود |
| FreeBSD | arm64 | دانلود | دانلود |
| ویندوز | amd64 | دانلود | دانلود |
| اندروید APK | معماری | دانلود |
|---|---|---|
| arm64 (v8a) | ۶۴ بیت | دانلود |
| arm (v7a) | ۳۲ بیت | دانلود |
| Universal | همه | دانلود |
⚡ نصب سریع سرور
sudo bash -c "$(curl -Ls https://raw.githubusercontent.com/sartoopjj/thefeed/main/scripts/install.sh)"
اسکریپت:
- آخرین باینری را از GitHub دانلود میکند
- دامنه، رمز عبور، کانالهای تلگرام و حسابهای X را میپرسد
- به تلگرام لاگین میکند (یکبار)
- سرویس systemd را راهاندازی میکند
# بروزرسانی
sudo bash install.sh
# لاگین مجدد تلگرام
sudo bash install.sh --login
# حذف
sudo bash install.sh --uninstall
توجه: سرور باید روی پورت ۵۳ پاسخ بدهد. بهتر است روی پورت غیرمحدود (
:5300) اجرا و با iptables فوروارد کنید:نام اینترفیس شبکه خود را با
ip aپیدا کنید وeth0را جایگزین کنید: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برای ماندگار کردن این قوانین بعد از ریبوت:
sudo apt install iptables-persistent # Debian/Ubuntu sudo netfilter-persistent save
اگر مشکلی پیش آمد — حذف فوری redirect:
# حذف قانون iptables (بازگشت به حالت اولیه)
sudo iptables -t nat -D PREROUTING -i eth0 -p udp --dport 53 -j REDIRECT --to-ports 5300
sudo iptables -D INPUT -p udp --dport 5300 -j ACCEPT
sudo netfilter-persistent save
🐳 نصب با Docker (سرور)
اجرای سرور با Docker — بدون نیاز به نصب Go.
شروع سریع (کانالهای عمومی، بدون لاگین تلگرام)
# ۱. تنظیم محیط
cp .env.example .env
nano .env # مقادیر THEFEED_DOMAIN و THEFEED_KEY را وارد کنید
# ۲. آمادهسازی دایرکتوری داده
mkdir -p data
cp configs/channels.txt data/
cp configs/x_accounts.txt data/ # اختیاری
# ۳. ساخت و اجرا
docker compose up -d
# ۴. هدایت ترافیک DNS خارجی به کانتینر
# نام اینترفیس شبکه خود را با ip a پیدا کنید و eth0 را جایگزین کنید
sudo iptables -t nat -I PREROUTING -i eth0 -p udp --dport 53 -j REDIRECT --to-ports 5300
sudo iptables -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
sudo ip6tables -I INPUT -p udp --dport 5300 -j ACCEPT
# ماندگار کردن قوانین iptables بعد از ریبوت
sudo apt install -y iptables-persistent
sudo netfilter-persistent save
# ۵. مشاهده لاگها
docker compose logs -f
توجه: کانتینر روی پورت 5300 listen میکند (نه 53) تا با
systemd-resolvedتداخل نداشته باشد. قانونiptables PREROUTINGفقط ترافیک DNS خارجی (پورت 53) را به کانتینر هدایت میکند و DNS محلی سرور بدون مشکل کار میکند.
با تلگرام (لاگین یکباره)
# ۱. تنظیم محیط (متغیرهای تلگرام را در .env از حالت کامنت خارج کنید)
cp .env.example .env
nano .env
# ۲. لاگین یکباره (تعاملی — کد تأیید را وارد کنید)
docker compose run -it --rm server \
--login-only --data-dir /data \
--domain YOUR_DOMAIN --key YOUR_KEY \
--api-id YOUR_API_ID --api-hash YOUR_HASH \
--phone YOUR_PHONE
# ۳. در docker-compose.yml فلگ --no-telegram را حذف و فلگهای تلگرام را اضافه کنید
# ۴. اجرای سرور
docker compose up -d
# ۵. تنظیم iptables redirect (مشابه قدم ۴ در شروع سریع)
جزئیات Docker
| مورد | مقدار |
|---|---|
| ایمیج پایه | alpine:3.21 (حدود ۲۳ مگابایت) |
| ساخت | دو مرحلهای (golang:1.26-alpine → alpine) |
| کاربر | thefeed (UID 1000، غیر root) |
| پورت کانتینر | :5300/udp (هاست :5300/udp + iptables redirect از :53) |
| داده | ولوم ./data (کانالها، session، کش) |
| تنظیمات | فایل .env (در git ذخیره نمیشود) |
# ساخت مجدد بعد از تغییرات کد
docker compose build
# توقف
docker compose down
ایمنی پورت ۵۳ و سرویسها
کانتینر روی پورت 5300 (نه 53) listen میکند تا با systemd-resolved یا سرویسهای DNS دیگر سرور تداخل نداشته باشد. ترافیک DNS خارجی توسط iptables PREROUTING هدایت میشود که فقط بستههای ورودی از اینترفیس شبکه خارجی را تحت تأثیر قرار میدهد — DNS محلی سرور دستنخورده باقی میماند.
قبل از راهاندازی — بررسی پورت ۵۳:
# چه سرویسی از پورت 53 استفاده میکند؟
ss -ulnp | grep ':53 '
# نتیجه مورد انتظار: فقط systemd-resolved روی 127.0.0.53 (بیخطر)
# UNCONN 127.0.0.53%lo:53 users:(("systemd-resolve",...))
بعد از راهاندازی — بررسی سلامت سرویسها:
# ۱. DNS محلی سرور هنوز کار میکند
dig +short google.com @127.0.0.53
# ۲. کانتینر thefeed در حال اجراست
docker ps --filter name=thefeed
# ۳. کانالها در حال دریافت هستند
docker logs thefeed-server --tail 5
# ۴. قانون iptables فعال است
iptables -t nat -L PREROUTING -n | grep 5300
# ۵. بقیه کانتینرها سالم هستند
docker ps --format 'table {{.Names}}\t{{.Status}}' | head -10
اگر مشکلی پیش آمد — حذف فوری redirect:
# حذف قانون iptables (بازگشت به حالت اولیه)
sudo iptables -t nat -D PREROUTING -i eth0 -p udp --dport 53 -j REDIRECT --to-ports 5300
sudo iptables -D INPUT -p udp --dport 5300 -j ACCEPT
sudo netfilter-persistent save
🖥️ نصب کلاینت
لینوکس / macOS / ویندوز
از صفحه Releases باینری مناسب سیستم خود را دانلود کنید.
# اجرا (مرورگر خودکار باز میشود)
./thefeed-client
# با پورت و دایرکتوری سفارشی
./thefeed-client --port 9090 --data-dir ./mydata
# با رمز عبور ادمین
./thefeed-client --password "your-password"
اندروید (Termux)
# نصب 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 |
🛠️ ساخت از سورس
# پیشنیازها: Go 1.26+
make build # ساخت سرور و کلاینت
make build-all # کراسکامپایل تمام پلتفرمها
make test # اجرای تستها
make upx # فشردهسازی باینریها با UPX
📋 پرچمهای سرور
| پرچم | پیشفرض | توضیح |
|---|---|---|
--data-dir |
./data |
دایرکتوری دادهها |
--domain |
دامنه DNS (الزامی) | |
--key |
رمز عبور رمزنگاری (الزامی) | |
--channels |
{data-dir}/channels.txt |
فایل کانالها |
--x-accounts |
{data-dir}/x_accounts.txt |
فایل حسابهای X |
--x-rss-instances |
http://nitter.net,https://nitter.net |
لیست URL پایه برای RSS حسابهای X |
--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
📂 فرمت x_accounts.txt
# خطوط با # کامنت هستند
Vahid
🔒 نکات امنیتی دریافت X
- دریافت پستهای X فقط از RSS/XML انجام میشود.
- آدرس instanceها اعتبارسنجی میشوند (
http/https، فقط host، بدون path/query/fragment). - اندازه پاسخ محدود است و timeout اعمال میشود.
- اگر یک mirror خطای
403بدهد یا در دسترس نباشد، سرور خودکار instance بعدی را امتحان میکند. - پیشنهاد: لیست mirrorهای قابل اعتماد خودتان را با
--x-rss-instances(یاTHEFEED_X_RSS_INSTANCES) تنظیم کنید.
🤝 مشارکت
مشارکت شما خوشآمد است! Issue بزنید یا Pull Request بفرستید.
📄 لایسنس
MIT