19 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سمت کلاینت فقط رابط وب روی دستگاه خودتان را محافظت میکند.
دانلود
حمایت مالی
برای حمایت از من میتونید مبلغ دلخواهتون رو به صورت USDT یا USDC روی شبکههای زیر ارسال کنید:
- Polygon
- BNB Chain
آدرس ولت من:
0xe73f022f668c57cce79feccd875ac7332311013a
ممنون از حمایتتون ❤️
⚡ نصب سریع سرور
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