پست

استفاده از FoxCloud روی Cloudflare Workers

استفاده از FoxCloud روی Cloudflare Workers

مقدمه

اگر دنبال یک راه‌حل بدون نیاز به سرور، بدون هزینه ماهانه و با سرعت بالا برای دسترسی آزاد به اینترنت هستی، FoxCloud دقیقاً همان چیزی‌ست که باید بشناسیش.

FoxCloud یک پروکسی‌سرور VLESS با کارایی بالاست که روی بستر Cloudflare Workers اجرا می‌شه و از زیرساخت Edge اون استفاده می‌کنه - یعنی کدت روی بیش از ۲۰۰ دیتاسنتر Cloudflare در سراسر دنیا اجرا می‌شه، نه روی یه سرور مرکزی.

FoxCloud چیست؟

FoxCloud یک پروکسی‌سرور VLESS مبتنی بر پروتکل WebSocket است که:

  • بدون هزینه روی پلن رایگان Cloudflare کار می‌کنه
  • از پروتکل VLESS با انتقال WebSocket پشتیبانی می‌کنه
  • با تمامی کلاینت‌های Xray سازگار است
  • امنیت TLS 1.3 را فراهم می‌کنه
  • سیستم Subscription (لینک اشتراک) برای مدیریت آسان کانفیگ‌ها دارد

⚠️ نکته مهم: FoxCloud از برخی سرویس‌ها مثل توییتر و ChatGPT پشتیبانی نمی‌کند. همچنین IP ثابت نیست و با هر اتصال ممکن است تغییر کند.

پیش‌نیازها

قبل از شروع نصب، به موارد زیر نیاز داری:

  • یک حساب کاربری Cloudflare (رایگان)
  • Node.js نسخه ۱۸ به بالا (برای روش Build از سورس)
  • آشنایی مختصر با خط فرمان

معماری پروژه

1
2
3
4
5
6
7
foxcloud/
├── src/               # سورس TypeScript
├── scripts/           # اسکریپت‌های کمکی (UUID generator و...)
├── docs/              # مستندات کامل
├── wrangler.toml      # تنظیمات Cloudflare Worker
├── rolldown.config.js # تنظیمات Build
└── package.json

متغیرهای محیطی (Environment Variables)

دو متغیر اصلی باید پیکربندی شوند:

متغیرتوضیحمثال
UUIDلیست UUID کاربران (با کاما جدا)08dad8a6-...,49d598ee-...
PROXY_IPلیست IP‌های پروکسی با پورت172.66.45.9:443,104.18.128.25:443

روش‌های نصب

✅ روش ۱: Deploy مستقیم (پیشنهادی)

سریع‌ترین روش برای راه‌اندازی:

مرحله اول - نصب Wrangler CLI:

1
2
npm install -g wrangler
wrangler login

مرحله دوم - دانلود فایل Build آماده:

از صفحه Releases پروژه آخرین فایل worker.js را دانلود کن.

مرحله سوم - Deploy:

1
wrangler deploy worker.js

🛠️ روش ۲: Build از سورس

برای کسانی که می‌خوان کنترل بیشتری روی کد داشته باشند:

1
2
3
4
5
6
7
8
9
# کلون کردن ریپازیتوری
git clone https://github.com/code3-dev/foxcloud.git
cd foxcloud

# نصب وابستگی‌ها
npm install

# کپی فایل تنظیمات
cp wrangler.example.toml wrangler.toml

حالا فایل wrangler.toml را باز کن و مقادیر زیر را ویرایش کن:

1
2
3
4
5
6
7
name = "foxcloud"
main = "dist/worker.js"
compatibility_date = "2024-01-01"

[vars]
UUID = "YOUR-UUID-HERE"
PROXY_IP = "172.66.45.9:443,104.18.128.25:443"

سپس Build و Deploy کن:

1
2
npm run build
npm run deploy

⚙️ روش ۳: GitHub Actions (CI/CD)

برای دیپلوی اتوماتیک از طریق Git:

  1. ریپو را Fork کن
  2. در تنظیمات ریپوی Fork شده، به بخش Settings > Secrets and variables > Actions برو
  3. دو Secret زیر را اضافه کن:
    • CLOUDFLARE_API_TOKEN (از داشبورد Cloudflare بگیر)
    • CLOUDFLARE_ACCOUNT_ID (از صفحه Overview حسابت)
  4. GitHub Actions را فعال کن
  5. هر push به branch master به صورت خودکار Deploy می‌شه

تولید UUID

برای هر کاربر باید یک UUID منحصربه‌فرد داشته باشی. روش‌های مختلف:

در ویندوز (PowerShell):

1
New-Guid

با Node.js:

1
node -e "console.log(require('crypto').randomUUID())"

با اسکریپت FoxCloud:

1
npm run generate-uuid

پیکربندی از طریق داشبورد Cloudflare (بدون CLI)

اگر ترجیح می‌دی از رابط گرافیکی Cloudflare استفاده کنی:

  1. وارد dash.cloudflare.com شو
  2. از منوی Compute & AI وارد Workers & Pages شو
  3. روی Create application کلیک کن، قالب Hello World را انتخاب کن
  4. فایل worker.js را در ادیتور پیست کن و Deploy کن
  5. در تب Settings > Variables and Secrets، متغیرهای UUID و PROXY_IP را اضافه کن

استفاده از کانفیگ در کلاینت

پس از Deploy، آدرس Worker شما چیزی شبیه به این خواهد بود:

1
https://your-worker-name.workers.dev

لینک Subscription برای ایمپورت به کلاینت‌ها:

1
https://your-worker-name.workers.dev/sub

این لینک را می‌تونی در کلاینت‌هایی مثل Hiddify، v2rayNG یا هر کلاینت سازگار با Xray ایمپورت کنی.

محیط توسعه و تست

1
2
3
4
5
# اجرای سرور توسعه (Local)
npm run dev

# اجرای تست‌ها
npm test

محدودیت‌های پلن رایگان Cloudflare

منبعمحدودیت رایگان
درخواست روزانه۱۰۰,۰۰۰
مدت اجرا در هر درخواست۱۰ میلی‌ثانیه CPU
حافظه۱۲۸ MB
Sub-requests۵۰ در هر درخواست

برای استفاده شخصی و ترافیک معمولی، پلن رایگان کاملاً کافیه.

📎 لینک مخزن: github.com/code3-dev/foxcloud
📎 لیست Proxy IP: github.com/code3-dev/code3-dev/blob/main/proxy_ip



CFnew v2.9.8 - راهنمای کامل

CFnew یک پروژه Worker-based proxy است که چند پروتکل (VLESS، Trojan، xhttp) را روی Cloudflare Workers/Pages/Snippets اجرا می‌کند و رابط گرافیکی مدیریت دارد.

⚠️ نکته حیاتی پیش از شروع

Compatibility Date حتماً باید روی 2026-01-20 باشد، وگرنه Worker کار نمی‌کند. این مورد را در مراحل زیر توضیح می‌دهم.

همچنین برای رابط گرافیکی (KV) به یک Custom Domain یا حداقل Worker subdomain نیاز دارید. Workers Free tier کافی است.

مرحله ۱ - تهیه UUID

1
2
3
# PowerShell (Windows 11)
[guid]::NewGuid().ToString()
# مثال خروجی: a1b2c3d4-e5f6-7890-abcd-ef1234567890

این UUID را جایی ذخیره کنید - هم کلید ورود به پنل مدیریت است، هم UUID پروتکل VLESS.

مرحله ۲ - روش‌های Deploy

سه روش وجود دارد. Workers را توصیه می‌کنم چون ساده‌ترین است.

روش A: Workers (توصیه‌شده)

1. دریافت فایل Worker:

1
2
# دانلود فایل script اصلی (نسخه明文/plaintext)
curl -L "https://github.com/byJoey/cfnew/raw/main/%E6%98%8E%E6%96%87%E6%BA%90%E5%90%97" -o worker.js

یا اگر می‌خواهید نسخه obfuscated (برای دور زدن تشخیص Cloudflare) را بگیرید:

1
2
# نسخه obfuscated - رفتار کاملاً یکسان، فقط کد مبهم‌شده
curl -L "https://github.com/byJoey/cfnew/raw/main/%E5%B0%91%E5%B9%B4%E4%BD%A0%E7%9B%B8%E4%BF%A1%E5%85%89%E5%90%97" -o worker.js

2. ایجاد Worker در Cloudflare Dashboard:

  • وارد dash.cloudflare.com شوید
  • از منوی چپ: Workers & Pages → Create → Create Worker
  • نامی بدهید (مثلاً cfnew-proxy) → Deploy
  • روی Edit Code کلیک کنید
  • محتوای worker.js را paste کنید → Deploy

3. تنظیم Compatibility Date (حیاتی):

  • روی Worker خود کلیک کنید → Settings → Runtime
  • Compatibility date را روی 2026-01-20 بگذارید → Save

روش B: Pages (برای دامنه اختصاصی‌تر)

1. در Cloudflare Dashboard:

  • Workers & Pages → Create → Pages → Upload assets
  • یک فولدر بسازید، worker.js را به عنوان _worker.js در آن بگذارید
  • فولدر را zip کنید و upload کنید → Deploy

2. Compatibility Date برای Pages:

  • Workers & Pages → پروژه Pages → Settings → Runtime → تاریخ را 2026-01-20 بگذارید → Save

روش C: Snippets (دائمی‌ترین روش)

برای این روش حتماً به یک دامنه ثبت‌شده در Cloudflare نیاز دارید.

  • Websites → دامنه خود → Snippets → Create Snippet
  • کد worker.js را paste کنید
  • Rule اضافه کنید: hostname: yourdomain.com/*

مرحله ۳ - تنظیم Environment Variables

بعد از deploy، متغیرهای زیر را اضافه کنید:

Workers & Pages → Worker → Settings → Variables and Secrets → Add

متغیرهای اجباری

متغیرمثالتوضیح
ua1b2c3d4-e5f6-7890-abcd-ef1234567890اجباری - UUID شما

متغیرهای اختیاری پرکاربرد

متغیرمقدارتوضیح
p172.66.45.9:443ProxyIP - آدرس relay
d/mysecretpathمسیر سفارشی به‌جای UUID
wkHK یا SG یا JPمنطقه Worker (با p نمی‌شود همزمان داشت)
evyesفعال‌سازی VLESS (پیش‌فرض: yes)
etyesفعال‌سازی Trojan (پیش‌فرض: no)
exyesفعال‌سازی xhttp (پیش‌فرض: no)
eginoاگر no باشد، IP‌های default GitHub خاموش می‌شوند

نکته معماری: متغیر p و wk با هم mutually exclusive هستند - اگر p تنظیم کنید، wk نادیده گرفته می‌شود.

مرحله ۴ - تنظیم KV (رابط گرافیکی)

KV فضای ذخیره‌سازی Key-Value در Cloudflare است. با آن می‌توانید بدون redeploy تنظیمات را تغییر دهید.

1. ایجاد KV Namespace:

  • Workers & Pages → KV → Create a Namespace
  • نام بگذارید (مثلاً cfnew-config) → Add

2. Bind به Worker:

  • Worker → Settings → Bindings → Add → KV Namespace
  • Variable name: C (حرف بزرگ C - دقیقاً همین)
  • KV Namespace: cfnew-config
  • Save، سپس Worker را دوباره deploy کنید

3. دسترسی به پنل:

مرورگر را باز کنید و بروید:

1
https://your-worker.workers.dev/{YOUR-UUID}

پنل گرافیکی مدیریت باز می‌شود. از اینجا می‌توانید:

  • ProxyIP سفارشی اضافه کنید
  • پروتکل‌ها را toggle کنید
  • آدرس‌های بهینه را تست کنید
  • ECH و ALPN را تنظیم کنید

بعد از تنظیم، به آدرس زیر بروید تا لینک اشتراک بگیرید:

1
https://your-worker.workers.dev/{YOUR-UUID}

صفحه پنل باز می‌شود. لینک‌های subscription برای کلاینت‌های مختلف به‌صورت خودکار بر اساس User-Agent برمی‌گردد.

یا مستقیم:

1
2
3
4
5
6
7
8
# V2Ray/Xray format
https://your-worker.workers.dev/{YOUR-UUID}?sub=v2ray

# Clash format
https://your-worker.workers.dev/{YOUR-UUID}?sub=clash

# Sing-box format
https://your-worker.workers.dev/{YOUR-UUID}?sub=singbox

در CFnew v2.9.8 دیگر به سرویس خارجی sub-converter نیاز نیست - تبدیل Clash/Sing-box/Surge/Loon/Quan X داخلی است.

مرحله ۶ - تنظیم کلاینت (Manual)

اگر بخواهید بدون subscription link، دستی اضافه کنید:

فیلدمقدار
ProtocolVLESS
Addressyour-worker.workers.dev
Port443
UUIDUUID شما
Encryptionnone
Transportws
Path/{YOUR-UUID} یا مسیر سفارشی
TLStls
SNIyour-worker.workers.dev

مرحله ۷ - تست تاخیر و یافتن بهترین IP

CFnew یک ابزار تست تاخیر داخلی دارد:

  1. به پنل بروید: https://your-worker.workers.dev/{YOUR-UUID}
  2. بخش تست تاخیر را باز کنید
  3. می‌توانید IP‌های Cloudflare را به‌صورت Random تولید کنید یا از URL خارجی import کنید
  4. Thread count را بین ۵ تا ۲۰ تنظیم کنید
  5. Start Test - نتایج بر اساس تاخیر مرتب می‌شوند
  6. IP‌های بهتر را به لیست ProxyIP اضافه کنید

ابزار desktop برای یافتن IP بهتر:

1
https://github.com/byJoey/yx-tools/releases

مرحله ۸ - مدیریت از طریق API (اختیاری)

اول API را در پنل فعال کنید (متغیر ae = yes)، سپس:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# افزودن ProxyIP جدید
curl -X POST "https://your-worker.workers.dev/{UUID}/api/preferred-ips" \
  -H "Content-Type: application/json" \
  -d '{"ip": "172.66.45.9", "port": 443, "name": "HK Node"}'

# افزودن چند IP به‌صورت batch
curl -X POST "https://your-worker.workers.dev/{UUID}/api/preferred-ips" \
  -H "Content-Type: application/json" \
  -d '[
    {"ip": "172.66.45.9", "port": 443, "name": "Node 1"},
    {"ip": "104.18.128.25", "port": 443, "name": "Node 2"}
  ]'

# پاک کردن همه IP‌ها
curl -X DELETE "https://your-worker.workers.dev/{UUID}/api/preferred-ips" \
  -H "Content-Type: application/json" \
  -d '{"all": true}'

تفاوت Workers vs Pages vs Snippets

 WorkersPagesSnippets
سختی راه‌اندازیآسانمتوسطنیاز به دامنه
آدرس*.workers.dev*.pages.devدامنه خودت
ماندگاریوابسته به پلنخوبدائمی‌ترین
Free tier100K req/day100K req/dayمحدود
توصیهشروع و تستاستفاده روزمرهدائمی

نکات Security

  • UUID را در هیچ جای عمومی (GitHub، Telegram) به‌اشتراک نگذارید - دسترسی به پنل مدیریت از طریق همان UUID است
  • از متغیر d برای تنظیم یک مسیر سفارشی تصادفی استفاده کنید تا URL پنل قابل حدس زدن نباشد
  • اگر Worker شما عمومی است، ae = yes (API) را فعال نکنید مگر اینکه ضروری باشد
  • نسخه obfuscated را برای دور زدن تشخیص Cloudflare استفاده کنید