mirror of
https://github.com/sartoopjj/thefeed.git
synced 2026-05-19 11:44:35 +03:00
212 lines
9.1 KiB
Markdown
212 lines
9.1 KiB
Markdown
<div dir="rtl" align="right">
|
||
|
||
# 🌍 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
|
||
|
||
---
|
||
|
||
<div align="center">
|
||
|
||
**برای ایران آزاد 🇮🇷**
|
||
|
||
*هر ایرانی حق دسترسی آزاد به اطلاعات را دارد*
|
||
|
||
</div>
|
||
|
||
</div>
|