Skip to content

Latest commit

 

History

40 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🇬🇧 English | 🇮🇷 فارسی

بک‌هاول حرفه‌ای

یک سیستم تونل معکوس با کارایی بالا برای عبور از NAT و فایروال، با پشتیبانی از TCP/WS/WSS و حالت‌های مولتی‌پلکس، به‌همراه وب‌پنل نظارتی، Sniffer اختیاری و تیونینگ خودکار پارامترها.

  • نسخه برنامه: v1.0.0
  • زبان: Go 1.23+
  • مخزن گیت‌هاب: Backhaul-Pro
  • لایسنس: AGPL-3.0

فهرست مطالب

  • معرفی و معماری
  • قابلیت‌ها و مزایا
  • ترنسپورت‌ها و سناریوهای استفاده
  • امنیت و احراز هویت
  • وب‌پنل و API‌های نظارتی
  • تیونینگ خودکار (Auto-Tune)
  • Hot Reload پیکربندی
  • Client Whitelist (محدودیت دسترسی کلاینت)
  • نصب و به‌روزرسانی (با استفاده از installer.sh)
  • نصب دستی از سورس
  • اجرای سرویس (systemd) و مدیریت سرویس‌ها
  • نمونه پیکربندی سرور و کلاینت با تیونینگ فعال
  • نکات عملیاتی و عیب‌یابی
  • ساختار کد و فایل‌های مهم
  • لایسنس و حمایت

معرفی و معماری

Backhaul برای عبور امن و مقیاس‌پذیر ترافیک از پشت NAT/فایروال طراحی شده است. این سیستم از یک باینری واحد تشکیل شده که بسته به محتوای config.toml در نقش سرور یا کلاینت اجرا می‌شود.

  • فرایند اصلی (main.go):

    • پردازش فلگ‌ها (-c, -v, --no-auto-tune, --tune-interval)
    • اعمال تیونینگ موقت TCP سیستم‌عامل (startup)
    • راه‌اندازی عملیات اصلی از طریق cmd.Run
    • راه‌اندازی تیونر پویا (در صورت فعال بودن)
    • Hot Reload: مانیتور خودکار فایل کانفیگ؛ تغییرات فوری و امن بدون توقف سرویس
    • مدیریت خاموشی امن و Force Shutdown
  • ماژول فرمان (cmd/):

    • بارگذاری TOML، اعمال پیش‌فرض‌ها (cmd/defaults.go)
    • انتخاب نقش: سرور (internal/server) یا کلاینت (internal/client)
  • پشته انتقال‌ها (Transport):

    • TCP, TCPMUX, WS/WSS, WSMUX/WSSMUX, UDP
    • مولتی‌پلکسینگ با SMUX (کانفیگ پارامترهای mux_*)
  • وب‌پنل و Sniffer (internal/web/):

    • داشبورد HTML داخلی (Tailwind)
    • Endpointهای /, /stats, /data, /config, /api/health-score
    • ذخیره و ارائه گزارش‌های مصرف پورت‌ها در JSON
    • HTTPS خودکار (با یا بدون گواهی)

قابلیت‌ها و مزایا

  • کارایی بالا: پیاده‌سازی بهینه برای تعداد زیاد اتصال همزمان.
  • ترنسپورت‌های متنوع: tcp, tcpmux, ws, wss, wsmux, wssmux, udp.
  • مولتی‌پلکس (SMUX): تجمیع چند اتصال در یک تونل با کنترل جریان.
  • وب‌پنل مانیتورینگ: آمار لحظه‌ای سیستم و تونل + مشاهده کانفیگ جاری.
  • Health Score API: نمرات سلامت سیستم Hybrid (میانگین سرور + کلاینت) برای نظارت بر عملکرد.
  • Sniffer اختیاری: ثبت مصرف پورت‌ها در فایل JSON با تبدیل خوانا.
  • تیونینگ خودکار: تنظیم پویای keepalive, mux_*, channel_size, connection_pool, heartbeat, mux_con.
  • Hot Reload: تغییرات کانفیگ به‌صورت امن اعمال می‌شوند.
  • HTTPS: API و Sniffer با HTTPS و گواهی خودامضاء (یا معتبر) ایمن‌سازی می‌شوند.
  • PPROF: پروفایلینگ اختیاری روی پورت‌های 6060/6061 (Server/Client).

توجه: در این پروژه، پشتیبانی از QUIC حذف شده است. تمرکز روی TCP/WS/WSS (+MUX) و UDP است.


ترنسپورت‌ها و سناریوهای استفاده

  • TCP: ساده و سریع؛ مناسب شبکه‌های پایدار.
  • TCPMUX: کاهش تعداد کانکشن‌های فیزیکی با چندجریانی در یک اتصال.
  • WS/WSS: عبور از پروکسی/فایروال‌های لایه HTTP؛ در WSS با TLS امن می‌شود.
  • WSMUX/WSSMUX: ترکیب مزایای WS/WSS با مولتی‌پلکس.
  • UDP: تونل‌کردن UDP (و یا عبور UDP روی TCP سمت سرور با accept_udp).

سناریوها:

  • بای‌پس محدودیت‌ها با wss روی پورت‌های عمومی 443/8443.
  • تراکم اتصال بالا با tcpmux یا wsmux/wssmux و تنظیم mux_*.
  • محیط‌های محدود TCP با ws/wss و گزینه‌ی edge_ip (CDN-Friendly).

امنیت و احراز هویت

  • توکن: تمامی درخواست‌های تونل با token احراز می‌شوند. مقدار قوی و تصادفی تعریف کنید.
  • TLS (فقط WSS/WSSMUX): از گواهی معتبر استفاده کنید. نمونه ساخت گواهی خودامضاء در انتهای فایل آمده است.
  • Client Whitelist: محدودیت دسترسی تونل به IP‌های یا دامنه‌های مشخصی با کنترل دقیق، از جمله پشتیبانی از رنج‌های CIDR و آدرس‌های IPv6.
  • وب‌پنل: دسترسی را محدود کنید (IP Whitelist/Firewall/Reverse Proxy) یا روی اینترفیس لوکال ارائه دهید.

وب‌پنل و API‌های نظارتی

با مقداردهی web_port > 0 فعال می‌شود. تمامی اتصالات با HTTPS محفوظ می‌شوند (درصورت وجود گواهی، با HTTP fallback).

  • / داشبورد HTML برای مشاهده کانفیگ، وضعیت تونل، و آمار سیستم
  • /stats خروجی JSON: CPU/RAM/Disk/Swap/Traffic/BackhaulTraffic/Connections/Status
  • /data خروجی JSON از مصرف پورت‌ها (فقط وقتی sniffer=true)
  • /config کانفیگ جاری بدون فیلدهای حساس؛ ?type=client برای دریافت کانفیگ کلاینت
  • /api/health-score خروجی JSON از امتیازات سلامت سیستم Hybrid (میانگین سرور + کلاینت)

نمونه پاسخ /api/health-score:

{
  "resource_score": 75,
  "network_score": 82,
  "timestamp": 1731850000
}

توضیح نمرات Hybrid:

  • ResourceScore: میانگین مصرف منابع سرور و کلاینت (CPU، RAM) - بیشتر=بهتر
  • NetworkScore: میانگین کیفیت شبکه سرور و کلاینت (Latency، PacketLoss، Throughput) - بیشتر=بهتر
  • اگر کلاینت متصل نباشد، فقط نمرات سرور استفاده می‌شود

روش محاسبه:

  • سرور معیارهای خود را محاسبه می‌کند (CPU، RAM، Latency، etc)
  • سرور معیارهای کلاینت را از طریق /api/health-score کلاینت دریافت می‌کند (توسط Tuner)
  • نمره نهایی = میانگین نمرات سرور و کلاینت

همگام‌سازی پویا (سمت کلاینت):

  • کلاینت به‌صورت دوره‌ای برخی پارامترها (مانند keepalive_period و mux_*) را با /config سرور همگام می‌کند.

تیونینگ خودکار (Auto-Tune)

به‌صورت پیش‌فرض فعال است و می‌توان با --no-auto-tune غیرفعال کرد. بازه اجرای تیونینگ با --tune-interval (پیش‌فرض 10m) قابل تنظیم است.

  • ورودی‌های تصمیم: CPU، RAM، Latency (TCP Dial)، Packet Loss، Throughput
  • خروجی‌های تنظیم:
    • سمت کلاینت: connection_pool
    • سمت سرور: channel_size, mux_* (framesize/receivebuffer/streambuffer), heartbeat, mux_con
    • هر دو: keepalive_period و همگام‌سازی آن‌ها
  • تنظیم پویا و تغییر بازه تیونینگ بر اساس پایداری شبکه (Variance/Avg)

Hot Reload پیکربندی

فایل مشخص‌شده با -c پایش می‌شود؛ با تغییر زمان ویرایش:

  • توقف امن instance قبلی (cancel context) و ایجاد instance جدید
  • توقف/راه‌اندازی مجدد Tuner در صورت فعال بودن

پشتیبانی از خطا و بازگشت خودکار:

  • اگر تغییری از طریق API یا مستقیم در فایل انجام شود و باعث خطا در برنامه گردد، سیستم خودکار کانفیگ را به آخرین نسخه‌ی موفق بازمی‌گرداند
  • این ویژگی از قطع‌شدگی ناخواسته سرویس جلوگیری می‌کند

Client Whitelist (محدودیت دسترسی کلاینت)

فیلد allowed_clients در کانفیگ سرور، تونل را تنها برای کلاینت‌های خاص باز می‌کند.

ویژگی‌ها:

  • IP Filtering: محدودیت دسترسی به IP‌های خاص و رنج‌های CIDR
  • IPv4 و IPv6: پشتیبانی کامل از هر دو نسخه پروتکل
  • CIDR Ranges: تعریف رنج‌های شبکه (مثلاً 192.168.0.0/24)
  • تمام ترنسپورت‌ها: TCP, TCPMUX, WS/WSS, WSMUX/WSSMUX, UDP, QUIC

مثال کانفیگ:

[server]
bind_addr = "0.0.0.0:8080"
transport = "tcp"
token = "your_secure_token"

# فقط این IP‌ها می‌توانند تونل را استفاده کنند
allowed_clients = [
    "192.168.1.100",           # IP خاص
    "192.168.1.0/24",          # رنج CIDR
    "10.0.0.0/8"               # رنج دسته A
]

رفتار:

  • اگر لیست خالی باشد (یا موجود نباشد)، تمام کلاینت‌ها قبول می‌شوند
  • اگر IP/دامنه کلاینت در لیست نباشد، اتصال فوری بسته می‌شود
  • رد شدن‌های اتصال در log ثبت می‌شوند

برای جزئیات کامل، فایل CLIENT_WHITELIST.md را ببینید.


نصب و به‌روزرسانی (با استفاده از installer.sh)

اسکریپت نصب تعاملی، نصب آنلاین/آفلاین، ایجاد سرویس systemd، ساخت یا ویرایش فایل کانفیگ و مدیریت متمرکز را خودکار می‌کند.

  • دانلود/اجرای اسکریپت (روی Debian/Ubuntu با sudo):
curl -LO https://raw.githubusercontent.com/ArashAfkandeh/Backhaul-Pro/main/installer.sh
sudo bash installer.sh
  • اجرای مستقیم بدون ذخیره فایل:
bash <(curl -fsSL https://raw.githubusercontent.com/ArashAfkandeh/Backhaul-Pro/main/installer.sh)
  • اجرای مستقیم با آرگومان‌ها (بدون ذخیره فایل):

Uninstall all or selected services via interactive menu

bash <(curl -fsSL https://raw.githubusercontent.com/ArashAfkandeh/Backhaul-Pro/main/installer.sh) uninstall

Open central management menu (status/logs/restart/edit/uninstall)

bash <(curl -fsSL https://raw.githubusercontent.com/ArashAfkandeh/Backhaul-Pro/main/installer.sh) manage
  • حالت نصب:

    • Online: نصب وابستگی‌ها با apt، دانلود بسته باینری و استخراج به /root/backhaul_pro
    • Offline: نصب از آرشیو محلی /root/backhaul_pro.tar.gz و مخزن آفلاین بسته‌ها
  • مراحل کلیدی:

    1. آماده‌سازی سیستم و وابستگی‌ها (wget, curl, openssl, tar, net-tools)
    2. ایجاد پوشه /root/backhaul_pro
    3. استخراج بسته و کپی باینری backhaul_pro
    4. انتخاب نقش (Server/Client)، پورت تونل، پروتکل (udp/tcp/tcpmux/ws/wss/wsmux/wssmux)، تولید/ورود Token، تعیین web_port
    5. (برای سرور) تعریف ports با اعتبارسنجی و چک اشغال‌بودن پورت‌های محلی
    6. تولید فایل config.toml مناسب نقش انتخابی
    7. ایجاد سرویس systemd مانند backhaul_pro.service (یا شماره‌دار)
    8. فعال‌سازی و راه‌اندازی سرویس، نمایش وضعیت
    9. نصب ابزار مدیریت مرکزی bh-p در /usr/local/bin
  • مدیریت سرویس‌ها با bh-p:

    • لیست سرویس‌ها، وضعیت/لاگ زنده، ری‌استارت، ویرایش کانفیگ، نمایش اطلاعات اتصال (Server)، حذف سرویس
  • حذف سرویس‌ها:

sudo bash installer.sh uninstall
# یا ابزار مدیریت مرکزی
sudo bh-p   # گزینه‌های Uninstall در منو

یادداشت: اگر config.toml موجود باشد، اسکریپت امکان جایگزینی/ایجاد فایل شماره‌دار جدید و مدیریت سرویس متناظر را می‌دهد.


نصب دستی از سورس

git clone https://github.com/ArashAfkandeh/Backhaul-Pro.git
cd Backhaul-Pro
go build -o backhaul_pro
./backhaul_pro -c /path/to/config.toml
  • نمایش نسخه: ./backhaul_pro -v
  • غیرفعال‌سازی تیونینگ خودکار: --no-auto-tune
  • تغییر بازه تیونینگ: --tune-interval 15m

نمونه پیکربندی سرور و کلاینت با تیونینگ فعال

تیونینگ خودکار به‌صورت پیش‌فرض فعال و بر روی مقدار 10 دقیقه است؛ کافیست بدون --no-auto-tune اجرا کنید. در مثال‌ها وب‌پنل برای مانیتورینگ روشن است.

  • سرور (مثال WSSMUX روی 443 با مولتی‌پلکس و Sniffer فعال):
[server]
bind_addr = "0.0.0.0:443"
transport = "wssmux"
token = "YOUR_TOKEN"
web_port = 2060
# نگاشت پورت‌ها
# تک پورت، بازه، یا نگاشت به سرویس داخلی
# همچنین می‌توانید پورت تکراری را برای چند مقصد مشخص کنید تا
# یک الگوریتم بارگذاری ترکیبی فعال شود: اتصال اول هر منبع به مقصد با بار
# کمتر هدایت می‌شود و سپس همان منبع به‌صورت ثابت به آن مقصد متصل می‌ماند.
#
# به خاطر سپردن آدرس‌های مبدا و مقصد می‌تواند در طول زمان منجر به جمع شدن
# داده‌های قدیمی در حافظه شود. برنامه یک API ساده در `internal/utils`
# دارد:
#
#   ResetState(dst)
#   ResetAllStates()
#
# این پاک‌سازی اکنون به طور خودکار هنگام راه‌اندازی برنامه فعال می‌شود
# با بازه‌های پیش‌فرض (۶۰ دقیقه بررسی، ۲۴ ساعت عمر مجاز). همچنین می‌توانید
# با صدا زدن مستقیم `StartAutoCleanup`/`StopAutoCleanup` رفتار را سفارشی کنید.
# تابع `StopAutoCleanup` برای متوقف کردن گوروتین مربوط به کاربر وجود دارد، ولی
# در حالت عادی نیاز نیست آن‌را فراخوانی کنید چون هنگام قطع شدن کانتکست
# برنامه، گوروتین به طور خودکار متوقف می‌شود (ما `defer` را در `main` گذاشته‌ایم).
ports = [
  # نمونه‌های نگاشت پورت و مسیریابی مبتنی بر Host/SNI
  # 1) نگاشت ساده host:port -> backend (تطبیق دقیق، case-insensitive)
  "in1.example.com:6701=64.49.15.175:8080",
  "in2.example.com:6701=45.67.139.173:8080",
  "in3.example.com:6701=45.43.92.164:8080",

  # 2) Alias (نام مستعار): وقتی سرور SNI یا Host متفاوت می‌بیند می‌توانید
  #    همان مقصد را برای نام دیگر هم اضافه کنید (مثلاً CDN یا رک‌نماد)
  "de1.example.com:6701=45.67.139.173:8080",  # معادل in2.example.com

  # 3) Fallback / Load-balance: چند مقصد برای یک listener (انتخاب براساس
  #    ترکیب src/dst و حالت sticky load-balancer انجام می‌شود)
  ":16445=45.92.219.26:16445",
  ":16445=45.67.139.215:15346",
  ":16445=5.253.31.5:4973",
  ":16445=194.76.147.13:1373",
]

اجرای سرور با تیونینگ فعال (بازه 10 دقیقه):

./backhaul_pro -c /root/backhaul_pro/config.toml --tune-interval 10m
  • کلاینت (مثال WSSMUX با همگام‌سازی از وب‌پنل سرور):
[client]
remote_addr = "SERVER_IP:443"
transport = "wssmux"
token = "YOUR_TOKEN"
web_port = 2061
# اختیاری برای سناریوهای CDN در WS/WSS
edge_ip = ""

اجرای کلاینت با تیونینگ فعال:

./backhaul_pro -c /root/backhaul_pro/config.toml --tune-interval 10m
  • نکته: تیونینگ در هر دو سمت فعال است و Keepalive بین سرور/کلاینت همگام می‌شود. برای غیرفعال‌سازی: --no-auto-tune.

اجرای سرویس (systemd) و مدیریت سرویس‌ها

اسکریپت نصب فایل سرویس را ایجاد می‌کند. نمونه سرویس (اگر نیاز به ساخت دستی داشتید):

[Unit]
Description=Backhaul Pro Reverse Tunnel Service
After=network.target

[Service]
Type=simple
ExecStart=/root/backhaul_pro/backhaul_pro -c /root/backhaul_pro/config.toml
Restart=always
RestartSec=3
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

دستورات رایج:

sudo systemctl daemon-reload
sudo systemctl enable backhaul_pro.service
sudo systemctl start backhaul_pro.service
sudo systemctl status backhaul_pro.service
sudo journalctl -u backhaul_pro.service -f

نکات عملیاتی و عیب‌یابی

  • Token قوی تعریف و به‌صورت امن توزیع کنید.
  • دسترسی به وب‌پنل را محدود کنید یا فقط روی لوکال ارائه دهید.
  • روی پورت‌های عمومی (443) از WSS/WSSMUX با گواهی معتبر استفاده کنید.
  • اگر کانفیگ تغییر نکرد اجرا نمی‌شود: مسیر -c را بررسی کنید. لاگ‌ها را ببینید.
  • برای تاخیر بالا/نوسان شبکه، از MUX و تنظیم mux_* استفاده و به تیونینگ فرصت تطبیق بدهید.
  • اگر پورت اشغال است، در اسکریپت نصب پیام خطا دریافت می‌کنید؛ پورت دیگری را انتخاب کنید.

ساخت گواهی خودامضاء (فقط برای تست WSS/WSSMUX)

openssl genpkey -algorithm RSA -out server.key -pkeyopt rsa_keygen_bits:2048
openssl req -new -key server.key -out server.csr
openssl x509 -req -in server.csr -signkey server.key -out server.crt -days 365

ساختار کد و فایل‌های مهم

  • main.go: اجرای برنامه، سیگنال‌ها، Hot Reload، تیونر
  • cmd/: بارگذاری/اعتبارسنجی کانفیگ، اعمال پیش‌فرض‌ها، انتخاب نقش اجرا
  • internal/config/: انواع و ساختار کانفیگ‌ها
  • internal/server, internal/client: راه‌اندازی ترنسپورت‌ها بر اساس نوع انتخابی
  • internal/*/transport: پیاده‌سازی‌های tcp, tcpmux, ws/wss, wsmux/wssmux, udp
  • internal/web/: داشبورد و API‌ها (/, /stats, /data, /config)
  • internal/tuning/: منطق تیونینگ پویا و همگام‌سازی پارامترها
  • internal/utils/logger.go: Logger سفارشی رنگی

لایسنس و حمایت

این پروژه تحت مجوز AGPL-3.0 منتشر شده است. به فایل LICENSE مراجعه کنید.

از همراهی شما سپاسگزاریم.


ابهام‌سازی ترافیک (Obfuscation)

برای عبور از DPI و فیلترینگ، در حالت‌های مبتنی بر وب‌سوکت (WS/WSS/W(S)MUX) لایه‌های ابهام‌سازی در سطح HTTP/TLS/مسیر اعمال می‌شود تا ترافیک تا حد ممکن شبیه ترافیک واقعی مرورگر باشد:

  • هدرهای HTTP واقع‌نما (Accept, Accept-Language, Accept-Encoding, DNT, Connection و…)
  • چرخش User-Agent بین مقادیر رایج (Chrome/Firefox/Safari/Edge روی پلتفرم‌های مختلف)
  • مسیرهای وب‌سوکت شبه‌واقعی و پویا مانند /api/v1/stream, /cdn/assets, /ws/chat, …
  • تنظیمات TLS شبیه مرورگرهای مدرن (TLS 1.2/1.3، منحنی‌های X25519 و P-256)
  • امکان افزودن هدرهای سفارشی برای ابهام‌سازی بیشتر (در پیاده‌سازی وب‌سوکت)

مزایا:

  • شباهت به ترافیک HTTPS/WS معمول و کاهش ریسک تشخیص توسط DPI
  • انعطاف‌پذیری و قابلیت گسترش الگوها
  • سازگاری عقب‌رو با کلاینت‌های بدون ابهام‌سازی

محدودیت‌ها:

  • هیچ روش ابهام‌سازی‌ای کامل نیست؛ DPIهای پیشرفته ممکن است همچنان توانایی تشخیص داشته باشند
  • سربار اندک پردازشی و نیاز به به‌روزرسانی دوره‌ای مجموعه User-Agent ها

برای درک عمیق‌تر، سند OBFUSCATION.md را ببینید.


تولید خودکار گواهی خودامضاء (Self-signed TLS)

برای سناریوهای تست یا محیط‌هایی که گواهی معتبر در دسترس نیست، می‌توانید به‌سادگی یک گواهی خودامضاء بسازید. نمونه دستورات در همین فایل آمده است. همچنین در صورت خالی‌بودن مسیرهای TLS در سرور، مقادیر پیش‌فرض به صورت خودکار روی مسیرهای زیر تنظیم می‌شوند:

  • پوشه کاری/ssl/server.crt
  • پوشه کاری/ssl/server.key

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


PPROF (پروفایلینگ)

برای عیب‌یابی و پروفایلینگ، PPROF را می‌توانید در سرور و کلاینت فعال کنید:

  • سرور: وقتی PPROF = true باشد، سرویس روی 0.0.0.0:6060 بالا می‌آید
  • کلاینت: وقتی PPROF = true باشد، سرویس روی 0.0.0.0:6061 بالا می‌آید با ابزارهای استاندارد Go/pprof یا مرورگر می‌توانید به این آدرس‌ها وصل شوید. فعال‌سازی را فقط در محیط امن انجام دهید.

API‌های نظارتی وب‌پنل

وقتی web_port > 0 باشد:

  • / صفحه داشبورد HTML
  • /stats خروجی JSON از آمار سیستم و وضعیت تونل (CPU/RAM/Disk/Swap/Traffic/Connections/Status)
  • /data خروجی JSON مصرف پورت‌ها (اگر sniffer=true)
  • /config کانفیگ جاری بدون فیلدهای حساس (پارامتر ?type=client برای دریافت کانفیگ کلاینت)

نمونه مصرف /stats:

curl http://127.0.0.1:2060/stats | jq .

جزئیات تیونینگ خودکار (گسترده)

منطق تیونینگ در internal/tuning/tuner.go اجرا می‌شود و به‌صورت دوره‌ای (قابل تغییر با --tune-interval) شاخص‌های زیر را می‌سنجد:

  • بار CPU، مصرف RAM
  • تاخیر شبکه (TCP Dial) و تاریخچه آن (میانگین/واریانس)
  • Packet Loss و Throughput تقریبی

پارامترهای تنظیم‌شونده:

  • کلاینت: connection_pool
  • سرور: channel_size, mux_framesize, mux_recievebuffer, mux_streambuffer, heartbeat, mux_con
  • هر دو: keepalive_period (همگام‌سازی سمت کلاینت با وب‌پنل سرور نیز انجام می‌شود)

تنظیم پویا بازه تیونینگ:

  • در نوسان بالای تاخیر، بازه کوتاه‌تر می‌شود (تیونینگ سریع‌تر)
  • در پایداری بالا، بازه بلندتر می‌شود (سربار کمتر)

Hot Reload (بارگذاری مجدد امن کانفیگ)

پرونده‌ی کانفیگ مشخص‌شده با -c مانیتور می‌شود. به محض تغییر زمان ویرایش:

  1. اگر تیونینگ فعال است، Tuner فعلی متوقف می‌شود
  2. کانتکست اجرای قبلی لغو و instance جدید با کانتکست تازه راه‌اندازی می‌شود
  3. تیونینگ (در صورت فعال بودن) با مقادیر جدید مجدداً شروع می‌شود

خطا‌شناسی و بازگشت خودکار:

  • اگر تغییری از طریق API (مثلاً POST /api/config) در کانفیگ ایجاد شود و باعث خطا در برنامه گردد، سیستم خودکار و بدون مداخله کاربر کانفیگ را به آخرین نسخه‌ی موفق بازمی‌گرداند
  • اگر تغییری مستقیم در فایل config.toml انجام شود و باعث خطا شود، نسخه‌ی قبلی بارگذاری می‌شود
  • این حفاظت از سرویس جلوگیری می‌کند تا در صورت اشتباه تنظیمات قطع نشود

API‌های نظارتی وب‌پنل (جزئیات)

وقتی web_port > 0 باشد، تمامی API‌ها از طریق HTTPS در دسترس هستند (اگر گواهی موجود باشد؛ در غیر اینصورت HTTP).

اندپوینت‌های اصلی:

  • GET / صفحه داشبورد HTML
  • GET /stats آمار سیستم و تونل (JSON)
  • GET /data مصرف پورت‌ها (JSON، اگر sniffer=true)
  • GET /config کانفیگ جاری (JSON)
  • GET /api/health-score امتیازات سلامت سیستم (JSON)

نمونه استفاده:

# دریافت amتیازات سلامت
curl --insecure https://127.0.0.1:2060/api/health-score | jq .

# دریافت آمار
curl --insecure https://127.0.0.1:2060/stats | jq .

# دریافت کانفیگ
curl --insecure https://127.0.0.1:2060/config | jq .

HTTPS و گواهی‌های TLS

  • تولید خودکار: برنامه به‌صورت خودکار گواهی‌های SSL خودامضاء مورد نیاز را تولید می‌کند. اگر فایل‌های fullchain.crt و privkey.key در پوشه certs/ کنار executable موجود نباشند، سیستم آن‌ها را خودکار ایجاد می‌کند.
  • دستی: اگر می‌خواهید گواهی سفارشی استفاده کنید، فایل‌های fullchain.crt و privkey.key را در پوشه certs/ قرار دهید:
openssl genpkey -algorithm RSA -out privkey.key -pkeyopt rsa_keygen_bits:2048
openssl req -new -x509 -days 365 -key privkey.key -out fullchain.crt

سپس برنامه این گواهی‌ها را برای HTTPS استفاده می‌کند.

  • تولید اول اجرا: عند اولین اجرا، اگر گواهی موجود نباشد، برنامه خودکار آن را می‌سازد و در certs/ ذخیره می‌کند.

اگر طی 5 ثانیه خاموشی امن کامل نشود، خاموشی اجباری اعمال می‌شود.


اسکریپت نصب خودکار (installer.sh) – کامل

قابلیت‌ها:

  • نصب Online/Offline وابستگی‌ها (apt) و مدیریت آرشیو آفلاین
  • دانلود/استخراج بسته باینری و ایجاد ساختار /root/backhaul_pro
  • ایجاد/ویرایش config.toml (Server/Client) با اعتبارسنجی IP/Port و بررسی اشغال‌بودن پورت‌ها
  • انتخاب پروتکل: udp, tcp, tcpmux, ws, wss, wsmux, wssmux
  • تولید توکن تصادفی یا دریافت توکن سفارشی
  • تنظیم web_port و تعریف ports برای سرور (با الگوهای 443-600, 443-600:5201, 127.0.0.2:443=1.1.1.1:5201, ...)
  • ساخت سرویس systemd (شماره‌دار در صورت چند کانفیگ)
  • راه‌اندازی و فعال‌سازی سرویس + نمایش وضعیت
  • نصب ابزار مدیریت مرکزی bh-p

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

sudo bh-p

امکانات منو:

  • نمایش وضعیت سرویس، لاگ زنده، ری‌استارت
  • ویرایش تعاملی کانفیگ و اعمال خودکار
  • نمایش اطلاعات اتصال سمت سرور (Server Connection Info)
  • حذف سرویس انتخابی (Uninstall) با پاک‌سازی هوشمند فایل‌ها و سرویس

حذف کامل سرویس‌ها (Batch):

sudo bash installer.sh uninstall

اسکریپت سرویس‌هایی با الگوهای backhaul_pro*.service و utunnel*.service را تشخیص و مدیریت می‌کند. در صورت نبود فایل‌ها/باینری باقی‌مانده، پوشه کاری نیز قابل حذف است. اگر هیچ سرویس مرتبط باقی نماند، دستور bh-p نیز حذف می‌شود.


ریزقابلیت‌ها و تنظیمات کمتر مشهود

  • accept_udp (سرور TCP): عبور UDP روی تونل TCP
  • channel_size (سرور): ظرفیت صف پیام‌ها؛ از افت بسته جلوگیری/یا کنترل ازدحام
  • connection_pool (کلاینت): پیش‌اتصال‌ها برای کاهش تاخیر اولیه؛ در حالت aggressive مدیریت تهاجمی‌تر است
  • nodelay: فعال‌سازی TCP_NODELAY برای بهبود تاخیر (ممکن است پهنای باند مؤثر را کمی کاهش دهد)
  • mux_session, mux_version: پارامترهای SMUX (با پیش‌فرض‌های امن و کارای تعریف‌شده)
  • Sniffer: ذخیره JSON مرتب‌شده از مصرف پورت‌ها و تبدیل خودکار به مقادیر خوانا (KB/MB/GB)
  • Logger رنگی: سطح‌بندی قابل تنظیم با log_level

About

No description, website, or topics provided.

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages