فرمت اشتراک
Xray Checker از پنج فرمت مختلف برای پیکربندی پروکسی پشتیبانی میکند. از متغیر محیطی SUBSCRIPTION_URL برای تنظیم روش بررسی استفاده کنید.
برای اطلاعات درباره نحوه تأیید پروکسیها، روشهای بررسی را ببینید.
۱. آدرس اشتراک (پیشفرض)
آدرس اشتراک استاندارد که لیست کدگذاری شده Base64 از لینکهای پروکسی را برمیگرداند.
مثال:
SUBSCRIPTION_URL=https://example.com/subscriptionالزامات:
- آدرس HTTPS
- محتوای کدگذاری شده Base64 برگرداند
- محتوا آدرسهای پروکسی با خط جدید (کاراکتر newline) از همدیگر جدا شده باشند
- از هدرهای استاندارد User-Agent پشتیبانی کند
هدرهای ارسالی:
Accept: */*User-Agent: Xray-Checker۲. رشته Base64
رشته مستقیم کدگذاری شده Base64 حاوی لینکهای پیکربندی پروکسی.
مثال:
SUBSCRIPTION_URL=dmxlc3M6Ly91dWlkQGV4YW1wbGUuY29tOjQ0MyVlbmNyeXB0aW9uPW5vbmUmc2VjdXJpdHk9dGxzI3Byb3h5MQ==فرمت محتوا (قبل از کدگذاری):
vless://[email protected]:443?encryption=none&security=tls#proxy1trojan://[email protected]:443?security=tls#proxy2vmess://base64encodedconfigss://base64encodedconfighysteria2://[email protected]:443?sni=example.com#proxy5۳. فایل JSON V2Ray
فایل پیکربندی JSON تکی در فرمت V2Ray/Xray.
مثال:
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 یا مدیریت چندین پیکربندی نامگذاری شده در یک فایل مفید است.
مثال:
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.
مثال:
SUBSCRIPTION_URL=folder:///path/to/configsالزامات:
- دایرکتوری باید حاوی فایلهای .json باشد
- هر فایل از فرمت JSON V2Ray پیروی میکند
- فایلها به ترتیب الفبایی پردازش میشوند
- فایلهای نامعتبر با هشدار نادیده گرفته میشوند
۶. اشتراک JSON (متعادلکنندهها)
بعضی پنلها (مثلاً Remnawave) بهجای لیست لینک Base64، یک پیکربندی کامل JSON مربوط به Xray ارائه میدهند و چند سرور را زیر یک متعادلکننده (balancer / leastPing) گروهبندی میکنند. با فرمت پیشفرض Base64 چنین گروهی در یک ورودی واحد جمع میشود، بنابراین نمیتوان تشخیص داد کدام نود از کار افتاده است.
برای درخواست فرمت JSON و بسط دادن هر outbound داخل یک متعادلکننده به یک پروکسی که جداگانه بررسی میشود، گزینه SUBSCRIPTION_JSON_FORMAT را فعال کنید:
SUBSCRIPTION_URL=https://panel.example.com/subSUBSCRIPTION_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#namesocks5://user:pass@host:port#namehttp://user:pass@host:port#namehttps://user:pass@host:port#namesocks://،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>#namehttps://user:pass@host:port?sni=real.example.com&verifyPeerCertByName=real.example.com#name| پارامتر کوئری | نام مستعار | توضیحات |
|---|---|---|
pinnedPeerCertSha256 | pcs | پذیرش گواهی همتا که SHA-256 آن (هگزادسیمال، با امکان استفاده از دونقطه) مطابقت داشته باشد — برای گواهیهای خودامضا/داخلی |
verifyPeerCertByName | vcn | تأیید گواهی در برابر این نام بهجای هاست |
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/32DNS = 1.1.1.1 # optional, ignored by the checkerMTU = 1420 # optional (default 1420)
[Peer]PublicKey = <server public key>PresharedKey = <psk> # optionalEndpoint = wg.example.com:51820AllowedIPs = 0.0.0.0/0, ::/0PersistentKeepalive = 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 center←data_center)؛ کلیدهایی که با لیبلهای داخلی (protocol،address،name،sub_name،stable_id،group_name،instance) تداخل دارند نادیده گرفته میشوند. - این لیبلها فقط ویژگیِ اشتراک JSON هستند — لینکهای اشتراک (
vless://و …) جایی برای حمل آنها ندارند. - تغییر یک لیبل و بهروزرسانی اشتراک در بهروزرسانی بعدی اعمال میشود بدون بازنشانی سریهای سایر پروکسیها به ۰. به
metricsLabelsروی متریکها مراجعه کنید.
هدرهای درخواست سفارشی
پنلهایی که اشتراک را پشت یک توکن یا کلاینت خاص قرار میدهند، میتوانند با یک User-Agent سفارشی و هدرهای دلخواه برآورده شوند:
SUBSCRIPTION_USER_AGENT="Happ/1.0"SUBSCRIPTION_HEADERS="X-Token: abc, X-Region: eu"SUBSCRIPTION_USER_AGENT و SUBSCRIPTION_HEADERS را ببینید.