Files
thefeed/README-FA.md
T

17 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 سمت کلاینت فقط رابط وب روی دستگاه خودتان را محافظت می‌کند.

نصب سریع سرور

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

🐳 نصب با 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

توجه: سرور باید روی پورت ۵۳ پاسخ بدهد. بهتر است روی پورت غیرمحدود (: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

🛠️ ساخت از سورس

# پیش‌نیازها: 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


برای ایران آزاد 🇮🇷

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