Skip to content

Latest commit

 

History

History
executable file
·
376 lines (288 loc) · 26.4 KB

README-fa.md

File metadata and controls

executable file
·
376 lines (288 loc) · 26.4 KB

مرزبان

راه حل یکپارچه برای مدیریت پروتکل های مختلف. قدرت گرفته از Xray


English / فارسی / 简体中文 / Русский

Elk screenshots

فهرست مطالب

بررسی اجمالی

مرزبان یک نرم افزار (وب اپلیکیشن) مدیریت پروکسی است که امکان مدیریت چند صد حساب پروکسی را با قدرت و دسترسی بالا فراهم میکند. مرزبان از Xray-core قدرت گرفته و با Python و React پیاده سازی شده است.

چرا مرزبان؟

مرزبان دارای یک رابط کاربری ساده است که قابلیت های زیادی دارد. مرزبان امکان ایجاد چند نوع پروکسی برای کاربر ها را فراهم میکند بدون اینکه به تنظیمات پیچیده ای نیاز داشته باشید. به کمک رابط کاربری تحت وب مرزبان، شما میتوانید کاربران را مانیتور، ویرایش و در صورت نیاز، محدود کنید.

امکانات

  • رابط کاربری تحت وب آماده
  • به صورت REST API پیاده سازی شده
  • پشتیبانی از پروتکل های Vmess, VLESS, Trojan و Shadowsocks
  • امکان فعالسازی چندین پروتکل برای هر یوزر
  • امکان ساخت چندین کاربر بر روی یک inbound
  • پشتیبانی از چندین inbound بر روی یک port (به کمک fallbacks)
  • محدودیت بر اساس مصرف ترافیک و تاریخ انقضا
  • محدودیت ترافیک دوره ای (به عنوان مثال روزانه، هفتگی و غیره)
  • پشتیبانی از Subscription link سازگار با V2ray (مثل نرم افزار های V2RayNG, OneClick, Nekoray و...) و Clash
  • ساخت لینک اشتراک گذاری و QRcode به صورت خودکار
  • مانیتورینگ منابع سرور و مصرف ترافیک
  • پشتیبانی از تنظیمات xray
  • پشتیبانی از TLS
  • ربات تلگرام
  • رابط خط فرمان (CLI) داخلی
  • قابلیت ایجاد چندین مدیر (تکمیل نشده است)

راهنمای نصب

برای نصب کافیه دستور زیر رو اجرا کنید

sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install

وقتی نصب تمام شد:

  • شما لاگ های مرزبان رو مشاهده میکنید که می‌توانید با بستن ترمینال یا فشار دادن Ctrl+C از آن خارج شوید
  • فایل های مرزبان در پوشه /opt/marzban قرار می‌گیرند
  • فایل تنظیمات در مسیر /opt/marzban/.env قرار می‌گیرد (تنظیمات را مشاهده کنید)
  • فایل های مهم (اطلاعات) مرزبان در مسیر /usr/lib/marzban قرار می‌گیرند
  • شما از طریق آدرس http://YOUR_SERVER_IP:8000/dashboard/ می‌توانید وارد داشبورد مرزبان شوید (YOUR_SERVER_IP را با آیپی سرور خود عوض کنید)

در مرحله بعد, باید یک ادمین سودو بسازید

marzban cli admin create --sudo

تمام! حالا با این اطلاعات می‌توانید وارد مرزبان شوید

برای مشاهده راهنمای اسکریپت مرزبان دستور زیر را اجرا کنید

marzban --help

اگر مشتاق هستید که مرزبان رو با پایتون و به صورت دستی اجرا کنید، مراحل زیر را مشاهده کنید

نصب به صورت دستی (پیچیده)

لطفا xray را نصب کنید. شما میتواند به کمک Xray-install این کار را انجام دهید.

bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install

پروژه را clone کنید و dependency ها را نصب کنید. دقت کنید که نسخه پایتون شما Python>=3.8 باشد.

git clone https://github.com/Gozargah/Marzban.git
cd Marzban
wget -qO- https://bootstrap.pypa.io/get-pip.py | python3 -
python3 -m pip install -r requirements.txt

همچنین میتواند از , Python Virtualenv هم استفاده کنید.

سپس کامند زیر را اجرا کنید تا دیتابیس تنظیم شود.

alembic upgrade head

اگر می خواهید از marzban-cli استفاده کنید، باید آن را به یک فایل در $PATH خود لینک و قابل اجرا (executable) کنید. سپس تکمیل خودکار (auto-completion) آن را نصب کنید:

sudo ln -s $(pwd)/marzban-cli.py /usr/bin/marzban-cli
sudo chmod +x /usr/bin/marzban-cli
marzban-cli completion install

حالا یک کپی از .env.example با نام .env بسازید و با یک ادیتور آن را باز کنید و تنظیمات دلخواه خود را انجام دهید. یه عنوان مثال نام کاربری و رمز عبور را می توانید در این فایل تغییر دهید.

cp .env.example .env
nano .env

برای اطلاعات بیشتر بخش تنظیمات را مطالعه کنید.

در انتها, مرزبان را به کمک دستور زیر اجرا کنید.

python3 main.py

اجرا با استفاده از systemctl در لینوکس

systemctl enable /var/lib/marzban/marzban.service
systemctl start marzban

اجرا با nginx

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name  example.com;

    ssl_certificate      /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/example.com/privkey.pem;

    location ~* /(dashboard|api|docs|redoc|openapi.json) {
        proxy_pass http://0.0.0.0:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

or

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name  marzban.example.com;

    ssl_certificate      /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/example.com/privkey.pem;

    location / {
        proxy_pass http://0.0.0.0:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

به صورت پیشفرض مرزبان در آدرس http://localhost:8000/dashboard اجرا میشود. شما میتوانید با تغییر UVICORN_HOST و UVICORN_PORT، هاست و پورت را تغییر دهید.

تنظیمات

متغیر های زیر در فایل ‍env یا .env استفاده میشوند. شما می توانید با تعریف و تغییر آن ها، تنظیمات مرزبان را تغییر دهید.

توضیحات متغیر
نام کاربری مدیر کل SUDO_USERNAME
رمز عبور مدیر کل SUDO_PASSWORD
آدرس دیتابیس (بر اساس مستندات SQLAlchemy) SQLALCHEMY_DATABASE_URL
آدرس هاستی که مرزبان روی آن اجرا میشود (پیشفرض: 0.0.0.0) UVICORN_HOST
پورتی که مرزبان روی آن اجرا میشود (پیشفرض: 8000) UVICORN_PORT
اجرای مرزبان بر روی یک Unix domain socket UVICORN_UDS
آدرس گواهی SSL به جهت ایمن کردن پنل مرزبان UVICORN_SSL_CERTFILE
آدرس کلید گواهی SSL UVICORN_SSL_KEYFILE
مسیر فایل json تنظیمات xray (پیشفرض: xray_config.json) XRAY_JSON
مسیر باینری xray (پیشفرض: /usr/local/bin/xray) XRAY_EXECUTABLE_PATH
مسیر asset های xray (پیشفرض: /usr/local/share/xray) XRAY_ASSETS_PATH
پیشوند (یا هاست) آدرس های اشتراکی (زمانی کاربرد دارد که نیاز دارید دامنه subscription link ها با دامنه پنل متفاوت باشد) XRAY_SUBSCRIPTION_URL_PREFIX
تگ inboundای که به عنوان fallback استفاده میشود. XRAY_FALLBACKS_INBOUND_TAG
تگ های inbound ای که لازم نیست در کانفیگ های ساخته شده وجود داشته باشند. XRAY_EXCLUDE_INBOUND_TAGS
آدرس محل template های شخصی سازی شده کاربر CUSTOM_TEMPLATES_DIRECTORY
تمپلیت مورد استفاده برای تولید کانفیگ های Clash (پیشفرض: clash/default.yml) CLASH_SUBSCRIPTION_TEMPLATE
تمپلیت صفحه اطلاعات اشتراک کاربر (پیشفرض subscription/index.html) SUBSCRIPTION_PAGE_TEMPLATE
تمپلیت صفحه اول (پیشفرض: home/index.html) HOME_PAGE_TEMPLATE
توکن ربات تلگرام (دریافت از @botfather) TELEGRAM_API_TOKEN
آیدی عددی ادمین در تلگرام (دریافت از @userinfobot) TELEGRAM_ADMIN_ID
اجرای ربات از طریق پروکسی TELEGRAM_PROXY_URL
مدت زمان انقضا توکن دسترسی به پنل مرزبان, 0 به معنای بدون تاریخ انقضا است (پیشفرض: 1440) JWT_ACCESS_TOKEN_EXPIRE_MINUTES
فعال سازی داکیومنتیشن به آدرس /docs و /redoc(پیشفرض: False) DOCS
فعالسازی حالت توسعه (development) (پیشفرض: False) DEBUG
آدرس webhook که تغییرات حالت یک کاربر به آن ارسال می‌شوند. اگر این متغیر مقدار داشته باشد، ارسال پیام‌ها انجام می‌شوند. WEBHOOK_ADDRESS
متغیری که به عنوان x-webhook-secret در header ارسال می‌شود. (پیشفرض: None) WEBHOOK_SECRET
تعداد دفعاتی که برای ارسال یک پیام، در صورت تشخیص خطا در ارسال تلاش دوباره شود (پیشفرض 3) NUMBER_OF_RECURRENT_NOTIFICATIONS
مدت زمان بین هر ارسال دوباره پیام در صورت تشخیص خطا در ارسال به ثانیه (پیشفرض: 180) RECURRENT_NOTIFICATIONS_TIMEOUT
هنگام رسیدن مصرف کاربر به چه درصدی پیام اخطار به آدرس وبهوک ارسال شود (پیشفرض: 80) NOTIFY_REACHED_USAGE_PERCENT
چند روز مانده به انتهای سرویس پیام اخطار به آدرس وبهوک ارسال شود (پیشفرض: 3) NOTIFY_DAYS_LEFT
حذف خودکار کاربران منقضی شده (و بطور اختیاری محدود شده) پس از گذشت این تعداد روز (مقادیر منفی این قابلیت را به طور پیشفرض غیرفعال می کنند. پیشفرض: -1) USERS_AUTODELETE_DAYS
تعیین اینکه کاربران محدودشده شامل حذف خودکار بشوند یا نه USER_AUTODELETE_INCLUDE_LIMITED_ACCOUNTS
فعال کردن کانفیگ سفارشی JSON برای همه برنامه‌هایی که از آن پشتیبانی می‌کنند (پیش‌فرض: False) USE_CUSTOM_JSON_DEFAULT
فعال کردن کانفیگ سفارشی JSON فقط برای برنامه‌ی V2rayNG (پیش‌فرض: False) USE_CUSTOM_JSON_FOR_V2RAYNG
فعال کردن کانفیگ سفارشی JSON فقط برای برنامه‌ی Streisand (پیش‌فرض: False) USE_CUSTOM_JSON_FOR_STREISAND
فعال کردن کانفیگ سفارشی JSON فقط برای برنامه‌ی V2rayN (پیش‌فرض: False) USE_CUSTOM_JSON_FOR_V2RAYN

استفاده از API

مرزبان به توسعه دهندگانAPI REST ارائه می دهد. برای مشاهده اسناد API در قالب Swagger UI یا ReDoc، متغیر DOCS=True را در تنظیمات خود ست کنید و در مرورگر به مسیر /docs و /redoc بروید.

پشتیبان گیری از مرزبان

بهتر است همیشه از فایل های مرزبان خود نسخه پشتیبان تهیه کنید تا در صورت خرابی سیستم یا حذف تصادفی اطلاعات از دست نروند. مراحل تهیه نسخه پشتیبان از مرزبان به شرح زیر است:

  1. به طور پیش فرض، تمام فایل های مهم مرزبان در /var/lib/marzban ذخیره می شوند (در نسخه داکر). کل پوشه /var/lib/marzban را در یک مکان پشتیبان مورد نظر خود، مانند هارد دیسک خارجی یا فضای ذخیره سازی ابری کپی کنید.
  2. علاوه بر این، مطمئن شوید که از فایل env خود که حاوی متغیرهای تنظیمات شما است و همچنین فایل پیکربندی Xray خود نسخه پشتیبان تهیه کنید.

با انجام این مراحل، می توانید اطمینان حاصل کنید که از تمام فایل ها و داده های مرزبان خود یک نسخه پشتیبان تهیه کرده اید. به خاطر داشته باشید که نسخه های پشتیبان خود را به طور مرتب به روز کنید تا آنها را به روز نگه دارید.

ربات تلگرام

مرزبان دارای یک ربات تلگرام داخلی است که می تواند مدیریت سرور، ایجاد و حذف کاربر و ارسال نوتیفیکیشن را انجام دهد. این ربات را می توان با انجام چند مرحله ساده به راحتی فعال کرد

برای فعال کردن ربات تلگرام:

  1. در تنظیمات، متغیرTELEGRAM_API_TOKEN را به API TOKEN ربات تلگرام خود تنظیم کنید.
  2. همینطور، متغیرTELEGRAM_ADMIN_ID را به شناسه عددی حساب تلگرام خود تنظیم کنید. شما می‌توانید شناسه خود را از @userinfobot دریافت کنید.

رابط خط فرمان (CLI) مرزبان

مرزبان دارای یک رابط خط فرمان (Command Line Interface / CLI) داخلی است که به مدیران اجازه می دهد با مرزبان ارتباط مستقیم داشته باشند.

اگر از Docker برای مرزبان استفاده می کنید، بهتر است از دستور های docker exec یا docker-compose exec استفاده کنید تا به پوسته (shell) تعاملی کانتینر مرزبان دسترسی پیدا کنید.

برای مثال، به پوشه ی docker-compose.yml مرزبان بروید و دستور زیر را اجرا کنید:

$ sudo docker-compose exec -it marzban bash

رابط خط فرمان (CLI) مرزبان از طریق دستور marzban-cli هرکجا در دسترس خواهد بود!

برای کسب اطلاعات بیشتر می توانید مستندات CLI مرزبان را مطالعه کنید.

ارسال اعلان‌ها به آدرس وبهوک

شما می‌توانید آدرسی را برای مرزبان فراهم کنید تا تغییرات کاربران را به صورت اعلان برای شما ارسال کند.

اعلان‌ها به صورت یک درخواست POST به آدرسی که در WEBHOOK_ADDRESS فراهم شده به همراه مقدار تعیین شده در WEBHOOK_SECRET به عنوان x-webhook-secret در header درخواست ارسال می‌شوند.

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

Headers:
Host: 0.0.0.0:9000
User-Agent: python-requests/2.28.1
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
x-webhook-secret: something-very-very-secret
Content-Length: 107
Content-Type: application/json



Body:
{"username": "marzban_test_user", "action": "user_updated", "enqueued_at": 1680506457.636369, "tries": 0}

انواع مختلف actionهایی که مرزبان ارسال می‌کند: user_created, user_updated, user_deleted, user_limited, user_expired, user_disabled, user_enabled

کمک مالی

اگر مرزبان را برای شما مفید بوده و می‌خواهید از توسعه آن حمایت کنید، می‌توانید در یکی از طریق یکی از شبکه های کریپتو زیر کمک مالی کنید:

  • شبکه TRON (TRX): TX8kJoDcowQPBFTYHAJR36GyoUKP1Xwzkb
  • شبکه ETH، BNB، MATIC: 0xFdc9ad32454FA4fc4733270FCc12ddBFb68b83F7
  • شبکه بیت کوین: bc1qpys2nefgsjjgae3g3gqy9crsv3h3rm96tlkz0v
  • شبکه Dogecoin: DJAocBAu8y6LwhDKUktLAyzV8xyoFeHH6R
  • شبکه TON: EQAVf-7hAXHlF-jmrKE44oBwN7HGQFVBLAtrOsev5K4qR4P8

از حمایت شما متشکرم!

لایسنس

توسعه یافته شده در [ناشناس!] و منتشر شده تحت لایسنس AGPL-3.0.

مشارکت در توسعه

این ❤️‍🔥 تقدیم به همه‌ی کسایی که در توسعه مرزبان مشارکت می‌کنند! اگر می‌خواهید مشارکت داشته باشید، لطفاً دستورالعمل‌های مشارکت ما را بررسی کنید و در صورت تمایل Pull Request ارسال کنید یا یک Issue باز کنید. همچنین از شما برای پیوستن به گروه تلگرام ما برای حمایت یا کمک به راهنمایی استقبال می کنیم.

لطفا اگر امکانش رو دارید، با بررسی لیست کار ها به ما در بهبود مرزبان کمک کنید. کمک های شما با آغوش باز پذیرفته میشه.

با تشکر از همه همکارانی که به بهبود مرزبان کمک کردند:

ساخته شده با contrib.rocks