رفتن به محتوا

فرمت اشتراک

Xray Checker از پنج فرمت مختلف برای پیکربندی پروکسی پشتیبانی می‌کند. از متغیر محیطی SUBSCRIPTION_URL برای تنظیم روش بررسی استفاده کنید.

برای اطلاعات درباره نحوه تأیید پروکسی‌ها، روش‌های بررسی را ببینید.

۱. آدرس اشتراک (پیش‌فرض)

آدرس اشتراک استاندارد که لیست کدگذاری شده Base64 از لینک‌های پروکسی را برمی‌گرداند.

مثال:

Terminal window
SUBSCRIPTION_URL=https://example.com/subscription

الزامات:

  • آدرس HTTPS
  • محتوای کدگذاری شده Base64 برگرداند
  • محتوا آدرس‌های پروکسی با خط جدید (کاراکتر newline) از همدیگر جدا شده باشند
  • از هدرهای استاندارد User-Agent پشتیبانی کند

هدرهای ارسالی:

Accept: */*
User-Agent: Xray-Checker

۲. رشته Base64

رشته مستقیم کدگذاری شده Base64 حاوی لینک‌های پیکربندی پروکسی.

مثال:

Terminal window
SUBSCRIPTION_URL=dmxlc3M6Ly91dWlkQGV4YW1wbGUuY29tOjQ0MyVlbmNyeXB0aW9uPW5vbmUmc2VjdXJpdHk9dGxzI3Byb3h5MQ==

فرمت محتوا (قبل از کدگذاری):

vless://[email protected]:443?encryption=none&security=tls#proxy1
trojan://[email protected]:443?security=tls#proxy2
vmess://base64encodedconfig
ss://base64encodedconfig
hysteria2://[email protected]:443?sni=example.com#proxy5

۳. فایل JSON V2Ray

فایل پیکربندی JSON تکی در فرمت V2Ray/Xray.

مثال:

Terminal window
SUBSCRIPTION_URL=file:///path/to/config.json

فرمت فایل:

{
"outbounds": [
{
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "example.com",
"port": 443,
"users": [
{
"id": "uuid",
"encryption": "none"
}
]
}
]
},
"streamSettings": {
"network": "tcp",
"security": "tls"
}
}
]
}

۴. آرایه JSON Xray (چند پیکربندی)

آرایه JSON حاوی چندین پیکربندی Xray با remarks. این فرمت برای صادر کردن پیکربندی‌ها از کلاینت‌های GUI یا مدیریت چندین پیکربندی نام‌گذاری شده در یک فایل مفید است.

مثال:

Terminal window
SUBSCRIPTION_URL=file:///path/to/configs.json

فرمت فایل:

[
{
"remarks": "US Server 1",
"outbounds": [
{
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "us1.example.com",
"port": 443,
"users": [{ "id": "uuid-1", "encryption": "none" }]
}
]
},
"streamSettings": { "network": "tcp", "security": "tls" }
}
]
},
{
"remarks": "EU Server 1",
"outbounds": [
{
"protocol": "trojan",
"settings": {
"servers": [
{
"address": "eu1.example.com",
"port": 443,
"password": "password123"
}
]
},
"streamSettings": { "network": "tcp", "security": "tls" }
}
]
}
]

فیلد remarks از هر پیکربندی به عنوان نام پروکسی در داشبورد استفاده خواهد شد.

۵. پوشه پیکربندی

دایرکتوری حاوی چندین فایل پیکربندی JSON V2Ray/Xray.

مثال:

Terminal window
SUBSCRIPTION_URL=folder:///path/to/configs

الزامات:

  • دایرکتوری باید حاوی فایل‌های .json باشد
  • هر فایل از فرمت JSON V2Ray پیروی می‌کند
  • فایل‌ها به ترتیب الفبایی پردازش می‌شوند
  • فایل‌های نامعتبر با هشدار نادیده گرفته می‌شوند

۶. اشتراک JSON (متعادل‌کننده‌ها)

بعضی پنل‌ها (مثلاً Remnawave) به‌جای لیست لینک Base64، یک پیکربندی کامل JSON مربوط به Xray ارائه می‌دهند و چند سرور را زیر یک متعادل‌کننده (balancer / leastPing) گروه‌بندی می‌کنند. با فرمت پیش‌فرض Base64 چنین گروهی در یک ورودی واحد جمع می‌شود، بنابراین نمی‌توان تشخیص داد کدام نود از کار افتاده است.

برای درخواست فرمت JSON و بسط دادن هر outbound داخل یک متعادل‌کننده به یک پروکسی که جداگانه بررسی می‌شود، گزینه SUBSCRIPTION_JSON_FORMAT را فعال کنید:

Terminal window
SUBSCRIPTION_URL=https://panel.example.com/sub
SUBSCRIPTION_JSON_FORMAT=true

نودهای داخل یک گروه با الگوی <group> | <node> نام‌گذاری می‌شوند و یک group_name مشترک دارند (که توسط داشبورد گروه‌بندی‌شده و برچسب متریک group_name استفاده می‌شود). وقتی فرمت JSON فعال باشد، درخواست با یک User-Agent شبیه به اپلیکیشن ارسال می‌شود؛ اگر پنل شما کلاینت خاصی انتظار دارد، آن را با SUBSCRIPTION_USER_AGENT بازنویسی کنید.

۷. پروکسی‌های SOCKS، HTTP و HTTPS

علاوه بر پروتکل‌های Xray، پروکسی‌های فورواردِ ساده نیز می‌توانند از نظر سلامت بررسی شوند. آن‌ها را به‌عنوان خطوط اشتراک اضافه کنید (از هر منبعی — URL، base64://، file:// یا به‌صورت درون‌خطی):

socks://base64(user:pass)@host:port#name
socks5://user:pass@host:port#name
http://user:pass@host:port#name
https://user:pass@host:port#name
  • socks://، socks5:// و socks5h:// به یک outbound از نوع SOCKS نگاشت می‌شوند. اعتبارنامه‌ها می‌توانند به‌صورت ساده user:pass باشند یا برای socks://، توکن استاندارد user:pass که با Base64 کدگذاری شده است.
  • http:// یک پروکسی ساده HTTP CONNECT است.
  • https:// یک پروکسی HTTP است که از طریق TLS در دسترس قرار می‌گیرد.
  • فرگمنت #name نام نمایشی را تعیین می‌کند (به‌صورت پیش‌فرض host:port).

برای یک پروکسی https:// با گواهی خودامضا (self-signed) یا خصوصی، به‌جای غیرفعال کردن تأیید، آن را pin کنید (xray-core دیگر از allowInsecure پشتیبانی نمی‌کند):

https://user:pass@host:port?pinnedPeerCertSha256=<sha256-hex>#name
https://user:pass@host:port?sni=real.example.com&verifyPeerCertByName=real.example.com#name
پارامتر کوئرینام مستعارتوضیحات
pinnedPeerCertSha256pcsپذیرش گواهی همتا که SHA-256 آن (هگزادسیمال، با امکان استفاده از دونقطه) مطابقت داشته باشد — برای گواهی‌های خودامضا/داخلی
verifyPeerCertByNamevcnتأیید گواهی در برابر این نام به‌جای هاست
sniنام سرور TLS (به‌صورت پیش‌فرض هاست)

۸. WireGuard

سرورهای WireGuard نیز می‌توانند از نظر سلامت بررسی شوند. آن‌ها را به‌عنوان خطوط اشتراک اضافه کنید (از هر منبعی — URL، base64://، file:// یا به‌صورت درون‌خطی) با استفاده از اسکیم wg://، که در آن payload برابر با Base64 یک فایل استاندارد WireGuard .conf است:

wg://<base64 of the .conf>#name

فایل .conf رمزگشایی‌شده همان پیکربندی معمول WireGuard است که از ارائه‌دهنده خود دریافت می‌کنید:

[Interface]
PrivateKey = <client private key>
Address = 10.9.0.2/32
DNS = 1.1.1.1 # optional, ignored by the checker
MTU = 1420 # optional (default 1420)
[Peer]
PublicKey = <server public key>
PresharedKey = <psk> # optional
Endpoint = wg.example.com:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25 # optional
  • مقدار Endpoint همتا (host:port) همان چیزی است که بررسی می‌شود. اولین [Peer] استفاده می‌شود.
  • فرگمنت #name نام نمایشی را تعیین می‌کند (به‌صورت پیش‌فرض wireguard-<host>).
  • فقط WireGuard استاندارد و بدون مبهم‌سازی (unobfuscated). (AmneziaWG / awg:// پشتیبانی نمی‌شود.)

WireGuard در داخل اشتراک JSON نیز کار می‌کند — یک outbound از نوع wireguard در پیکربندی JSON مربوط به Xray به‌صورت خودکار تجزیه می‌شود:

{
"protocol": "wireguard",
"settings": {
"secretKey": "<client private key>",
"address": ["10.9.0.2/32"],
"mtu": 1420,
"peers": [
{
"publicKey": "<server public key>",
"endpoint": "wg.example.com:51820",
"allowedIPs": ["0.0.0.0/0", "::/0"],
"keepAlive": 25
}
]
}
}

۹. لیبل‌های سفارشی متریک

هر outbound در یک اشتراک JSON (بخش‌های ۳، ۴ و ۶) می‌تواند یک شیء metricsLabels با لیبل‌های ثابتِ تعیین‌شده توسط اپراتور داشته باشد. هر مدخل به یک لیبل اضافی روی متریک‌های xray_proxy_status و xray_proxy_latency_ms آن پروکسی تبدیل می‌شود و در API در فیلد metricsLabels بازگردانده می‌شود. این کار امکان فیلتر و تجمیع بر اساس ویژگی‌هایی مانند موقعیت یا میزبان را مستقیماً در PromQL و Grafana فراهم می‌کند.

{
"protocol": "trojan",
"tag": "proxy",
"settings": { "servers": [{ "address": "1.1.1.1", "port": 443, "password": "..." }] },
"metricsLabels": {
"location": "Netherlands, Amsterdam",
"hoster": "FreeVDS"
}
}

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

xray_proxy_status{protocol="trojan",address="1.1.1.1:443",name="proxy",...,location="Netherlands, Amsterdam",hoster="FreeVDS"} 1

نکات:

  • کلیدها به نام‌های معتبر لیبل Prometheus تبدیل می‌شوند (مثلاً data centerdata_center)؛ کلیدهایی که با لیبل‌های داخلی (protocol، address، name، sub_name، stable_id، group_name، instance) تداخل دارند نادیده گرفته می‌شوند.
  • این لیبل‌ها فقط ویژگیِ اشتراک JSON هستند — لینک‌های اشتراک (vless:// و …) جایی برای حمل آن‌ها ندارند.
  • تغییر یک لیبل و به‌روزرسانی اشتراک در به‌روزرسانی بعدی اعمال می‌شود بدون بازنشانی سری‌های سایر پروکسی‌ها به ۰. به metricsLabels روی متریک‌ها مراجعه کنید.

هدرهای درخواست سفارشی

پنل‌هایی که اشتراک را پشت یک توکن یا کلاینت خاص قرار می‌دهند، می‌توانند با یک User-Agent سفارشی و هدرهای دلخواه برآورده شوند:

Terminal window
SUBSCRIPTION_USER_AGENT="Happ/1.0"
SUBSCRIPTION_HEADERS="X-Token: abc, X-Region: eu"

SUBSCRIPTION_USER_AGENT و SUBSCRIPTION_HEADERS را ببینید.