راه حل یکپارچه برای مدیریت پروتکل های مختلف. قدرت گرفته از Xray
English / فارسی / 简体中文 / Русский
- بررسی اجمالی
- راهنمای نصب
- تنظیمات
- استفاده از API
- پشتیبان گیری از مرزبان
- ربات تلگرام
- رابط خط فرمان (CLI) مرزبان
- ارسال اعلانها به آدرس وبهوک
- کمک مالی
- لایسنس
- مشارکت در توسعه
مرزبان یک نرم افزار (وب اپلیکیشن) مدیریت پروکسی است که امکان مدیریت چند صد حساب پروکسی را با قدرت و دسترسی بالا فراهم میکند. مرزبان از 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 REST ارائه می دهد. برای مشاهده اسناد API در قالب Swagger UI یا ReDoc، متغیر DOCS=True
را در تنظیمات خود ست کنید و در مرورگر به مسیر /docs
و /redoc
بروید.
بهتر است همیشه از فایل های مرزبان خود نسخه پشتیبان تهیه کنید تا در صورت خرابی سیستم یا حذف تصادفی اطلاعات از دست نروند. مراحل تهیه نسخه پشتیبان از مرزبان به شرح زیر است:
- به طور پیش فرض، تمام فایل های مهم مرزبان در
/var/lib/marzban
ذخیره می شوند (در نسخه داکر). کل پوشه/var/lib/marzban
را در یک مکان پشتیبان مورد نظر خود، مانند هارد دیسک خارجی یا فضای ذخیره سازی ابری کپی کنید. - علاوه بر این، مطمئن شوید که از فایل env خود که حاوی متغیرهای تنظیمات شما است و همچنین فایل پیکربندی Xray خود نسخه پشتیبان تهیه کنید.
با انجام این مراحل، می توانید اطمینان حاصل کنید که از تمام فایل ها و داده های مرزبان خود یک نسخه پشتیبان تهیه کرده اید. به خاطر داشته باشید که نسخه های پشتیبان خود را به طور مرتب به روز کنید تا آنها را به روز نگه دارید.
مرزبان دارای یک ربات تلگرام داخلی است که می تواند مدیریت سرور، ایجاد و حذف کاربر و ارسال نوتیفیکیشن را انجام دهد. این ربات را می توان با انجام چند مرحله ساده به راحتی فعال کرد
برای فعال کردن ربات تلگرام:
- در تنظیمات، متغیر
TELEGRAM_API_TOKEN
را به API TOKEN ربات تلگرام خود تنظیم کنید. - همینطور، متغیر
TELEGRAM_ADMIN_ID
را به شناسه عددی حساب تلگرام خود تنظیم کنید. شما میتوانید شناسه خود را از @userinfobot دریافت کنید.
مرزبان دارای یک رابط خط فرمان (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