Files
thefeed/README-FA.md
T
2026-04-26 18:07:30 +03:30

19 KiB
Raw Blame History

🌍 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)"

اسکریپت:

  1. آخرین باینری را از GitHub دانلود می‌کند
  2. دامنه، رمز عبور، کانال‌های تلگرام و حساب‌های X را می‌پرسد
  3. به تلگرام لاگین می‌کند (یک‌بار)
  4. سرویس 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-alpinealpine)
کاربر 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


برای ایران آزاد شیر و خورشید

هر ایرانی حق دسترسی آزاد به اطلاعات را دارد