# مدیریت کلاینت

> افزودن کاربران، اشتراک جزئیات اتصال و مدیریت کلیدهای دسترسی.

## افزودن کلاینت

```
meridian client add alice
```

این به "alice" کلید خود و دو چیز را برای اشتراک می‌دهد:

- **لینک صفحه اتصال** با کد QR — ساده‌ترین راه برای ارسال
- **URL اشتراک** برای درج مستقیم در برنامه Xray/V2Ray

چندین نفر را یک‌زمان اضافه کنید:

```
meridian client add alice bob charlie
```

کلاینت‌ها به کل فلیت شما تعلق دارند، نه یک سرور. هر exit و relay شما در اشتراک آن‌ها نمایش داده می‌شود.

### آنچه گیرنده می‌بیند

صفحه اتصال از اشتراک واقعی فرد ساخته می‌شود، بنابراین دقیقاً همان چیزی را نشان می‌دهد که برنامه‌های او دریافت می‌کنند: exit‌های مستقیم، relay‌ها و هر روش فعال. شامل:

- دو مرحله: نصب برنامه‌ای که برای پلتفرم او پیشنهاد شده (اول Happ، بعد FlClashX و Clash Mi، و روی دسکتاپ Throne) و سپس اضافه کردن اتصال با یک ضربه
- کد QR برای اشتراک؛ روی کامپیوتر کنار مرحله‌ها نشان داده می‌شود تا بتوان گوشی را تنظیم کرد
- هر اتصال جداگانه با دکمه‌های «باز کردن»، «کپی» و QR، که تا وقتی لازم نشود جمع شده است
- بخش «متصل نمی‌شوید؟» با چند توصیه و آزمایش «بررسی اتصال من» که گزارشی بدون لینک کپی می‌کند تا برای شما بفرستد

در برنامه، ورودی‌ها بر اساس کشور exit و روش نام‌گذاری می‌شوند: «🇩🇪 DE · Reality · Chrome»، «🇩🇪 DE · XHTTP · Chrome»، «🇩🇪 DE · WebSocket · CDN»، «🇩🇪 DE · Hysteria2 · UDP»؛ برای ورودی‌های relay عبارت «via relay» هم اضافه می‌شود. اگر دو exit در یک کشور باشند، نام آن‌ها بعد از پرچم نمایش داده می‌شود («🇩🇪 main»)؛ exit بدون کشور مشخص، وقتی چند exit دارید با نام خودش نشان داده می‌شود. Reality و XHTTP نسخه‌های «· Firefox» هم دارند با اثر انگشت TLS دیگر، برای وقتی که یک اثر انگشت مسدود شود. برنامه‌هایی که خودکار تعویض می‌کنند (برنامه‌های Xray JSON مثل Happ، و Mihomo و sing-box) خودشان یک ورودی کارآمد انتخاب می‌کنند اما هرگز بین اثر انگشت‌ها جابه‌جا نمی‌شوند؛ Happ برای این کار یک ورودی جدا به نام «Automatic · Firefox» نشان می‌دهد.

لینک را از طریق هر پیام‌رسانی ارسال کنید. گیرنده آن را باز می‌کند، برنامه را نصب می‌کند، «افزودن به …» را می‌زند (یا کد QR را با دستگاه دیگری اسکن می‌کند) و متصل می‌شود. [اتصال](/fa/connecting.md) او را قدم‌به‌قدم همراهی می‌کند و می‌گوید وقتی کار نمی‌کند چه کند؛ آن صفحه را هم برایش بفرستید.

## نمایش جزئیات اتصال

برای اشتراک دوباره لینک‌های کلاینت:

```
meridian client show alice
```

این صفحه اتصال و URL اشتراک را چاپ می‌کند، به‌علاوه وضعیت، ترافیک و زمان آخرین اتصال. اگر صفحه گم باشد (مثلاً بارگذاری ناموفق بود)، آن را دوباره منتشر کنید:

```
meridian client show alice --repair-page
```

## فهرست کلاینت‌ها

```
meridian client list
```

هر کلاینت را با وضعیت، ترافیق، زمان ایجاد و آخرین اتصال نمایش می‌دهد.

## معلق کردن و از سرکشی درآوردن کلاینت

```
meridian client disable alice
meridian client enable alice
```

`disable` کلاینت را فوراً قطع می‌کند؛ `enable` آن‌ها را با همان لینک‌ها دوباره فعال می‌کند.

معلق کردن تا زمان `client enable` پابرجاست: apply، بازاستقرار و تغییرات fleet به آن دست نمی‌زنند.

## جایگزینی لینک لورفته

اگر لینک یا صفحه اتصال یک کلاینت به دست کسی رسیده که نباید، آن را جایگزین کنید:

```
meridian client reissue alice
```

Remnawave یک شناسه اشتراک جدید و کلیدهای جدید به کلاینت می‌دهد. نشانی اشتراک و صفحه اتصال قبلی پاسخ 404 می‌دهند و سرورها کلیدهای قبلی را رد می‌کنند. Meridian صفحه قبلی را حذف می‌کند، صفحه تازه‌ای منتشر می‌کند و صفحه و نشانی اشتراک جدید را برای فرستادن به کلاینت چاپ می‌کند. کلاینت لینک جدید را یک بار وارد می‌کند، چون برنامه‌ها نمی‌توانند اشتراکی را به‌روز کنند که نشانی‌اش دیگر وجود ندارد. بقیه چیزهایی که پنل برای کلاینت نگه می‌دارد سر جایش می‌ماند: وضعیت، سقف و مصرف ترافیک، تاریخ انقضا، توضیحات و محدودیت دستگاه HWID.

محدودیت دستگاه HWID در پنل نگه داشته می‌شود، نه در لینک. دستگاه‌هایی که از قبل ثبت شده‌اند پس از صدور دوباره در فهرست HWID کلاینت می‌مانند و همچنان جا می‌گیرند، هرچند لینک قبلی‌شان دیگر وصل نمی‌شود. کلاینت را در پنل باز کنید و دستگاه‌های ناآشنا را حذف کنید تا محدودیت فقط دستگاه‌های خود کلاینت را بشمارد. Meridian هیچ بلیت ادعا یا اتصال به دستگاهی از خودش اضافه نمی‌کند.

با `--json`، `--yes` را هم بدهید. لینک‌های جدید فقط در خروجی همین دستور نمایش داده می‌شوند.

## حذف کلاینت

`meridian client remove NAME` کلاینت را برای‌ابد حذف می‌کند: پیوندهای آن‌ها کار نمی‌کنند و صفحه اتصال آن‌ها حذف می‌شود. فلیت حداقل یک کلاینت نگه می‌دارد. کاربران را در پنل Remnawave مستقیماً حذف نکنید — Meridian هر کلاینتی را که در topology باقی است در بعدی اعمال دوباره ایجاد می‌کند.

## لینک‌های اشتراک

URL‌های اشتراک مثل `https://198.51.100.10/<page-path>/sub/<id>` هستند. آن‌ها زیر مسیر صفحه اتصال زندگی می‌کنند؛ پنل مدیریت Remnawave روی مسیر مخفی جداگانه است که لینک‌های اشتراکی هرگز آن را فاش نمی‌کنند.

هر اشتراک از برنامه‌ها می‌خواهد آن را هر ۶ ساعت تازه کنند (هدر `profile-update-interval` که برنامه‌هایی مثل Happ و Clash Verge از آن پیروی می‌کنند)، بنابراین هنگام افزودن exit یا relay، کلاینت‌ها ظرف چند ساعت و بدون لینک جدید آن را به‌دست می‌آورند. برنامه‌هایی که این هدر را نادیده می‌گیرند طبق برنامهٔ خودشان تازه می‌کنند؛ تازه‌سازی دستی در برنامه تغییرات را فوراً می‌گیرد.

دکمهٔ پشتیبانی در برنامه، صفحهٔ اتصال همان شخص را با راهنمای «متصل نمی‌شوید؟» باز می‌کند. برای فرستادن افراد به جای دیگر، هدر `support-url` خودتان را در تنظیمات اشتراک پنل بگذارید؛ Meridian آن را نگه می‌دارد.

### برنامه‌ها و engineهای آزمایش‌شده

یک URL اشتراک به هر برنامه همان قالبی را می‌دهد که آن برنامه می‌خواند. با هر تغییر در Meridian یک آزمایشگاه چندنودی اجرا می‌شود که هر قالب را از یک پنل واقعی Remnawave می‌گیرد و با engineی که این برنامه‌ها بر پایهٔ آن ساخته شده‌اند بررسی می‌کند:

| قالب | برنامه‌ها | engine آزمایش‌شده | آزمایشگاه چه چیزی را بررسی می‌کند |
|--------|------|---------------|---------------------|
| Xray JSON | Happ، v2rayNG، v2rayN، Streisand، V2Box | Xray 26.7.28 | ترافیک از هر نقطهٔ ورود و از failover خودکار عبور می‌کند؛ کلید اشتباه رد می‌شود |
| Mihomo | FlClashX, Clash Mi | Mihomo 1.19.32 | `mihomo -t` پروفایل، قوانین آن و گروه fallback آن را بارگذاری می‌کند |
| sing-box | sing-box (SFA, SFI), Karing | sing-box 1.14.3 | `sing-box check` پروفایل را بارگذاری می‌کند و گروه خودکار آن مسیر پیش‌فرض است |
| لینک‌های Base64 | دیگر برنامه‌های Xray/V2Ray (v2RayTun، Shadowrocket) | — | هر لینک تجزیه می‌شود و همان سرورها و کلیدی را نام می‌برد که قالب‌های دیگر نام می‌برند |

برنامه‌ها به‌روزرسانی engine خودشان را عرضه می‌کنند، بنابراین ممکن است یک برنامه engineی کمی قدیمی‌تر یا جدیدتر از engine آزمایش‌شده اجرا کند.

## محل زندگی اطلاعات کلاینت

حساب‌های کلاینت (کلیدها، وضعیت، ترافیق) در پایگاه داده پنل Remnawave روی سرور control-plane زندگی می‌کنند. فهرست کلاینت‌های که Meridian مدیریت می‌کند بخش توپولوژی شما در `~/.config/meridian/cluster.yml` است. فرمان‌های کلاینت از API پنل استفاده می‌کنند و SSH نیاز نیست؛ منتشر کردن صفحه اتصال از SSH به سرور control-plane استفاده می‌کند.

## پنل وب

پنل مدیریت [Remnawave](https://remna.st/) ترافیق، کاربران و نودها را در مرورگر نشان می‌دهد، و می‌توانید از آن استفاده کنید. `meridian panel` URL و نام کاربری مدیریت را چاپ می‌کند؛ `meridian panel --show-password` همچنین رمز عبور را چاپ می‌کند.

Meridian و پنل کار را split می‌کنند تا ویرایش‌های شما بیشتر نشود:

| Meridian مدیریت می‌کند (بعدی اعمال نسخه آن را بازگردانده) | مال شما برای تغییر (اعمال هرگز به آن‌ها نمی‌رسد) |
|---|---|
| Nodes، پروفایل‌های config، inbounds، منتشر شدهٔ Hosts، squads | وضعیت هر کلاینت: فعال/غیرفعال، محدودیت‌های ترافیک، انقضا، محدودیت‌های HWID، توضیح |
| Subscription templates و تنظیمات که Meridian تنظیم می‌کند (عنوان، بازهٔ تازه‌سازی، Xray JSON برای برنامه‌هایی که آن را می‌خوانند، لینک پشتیبانی مگر اینکه لینک خودتان را گذاشته باشید) | کاربرانی که خود در پنل ایجاد می‌کنید |
| کدام کلاینت‌ها وجود دارند، نام‌های آن‌ها و squads آن‌ها | اطلاعات، plugins، کنترل IP و سایر تنظیمات پنل |

`meridian plan` هر تفاوت در آنچه Meridian مدیریت می‌کند را پیش از هر تغییر نشان می‌دهد. کاربرانی که در پنل اضافه می‌کنید هرگز توسط Meridian فهرست نمی‌شوند، تغییر نمی‌خورند یا حذف نمی‌شوند؛ برای اعطای کسی لینک مریدیان‌مدیریت‌شده و صفحهٔ اتصال، `meridian client add` را بجای استفاده کنید.

### Node pluginها

Node pluginهای Remnawave (‏Ingress Filter، Egress Filter، Torrent Blocker، Connection Drop) اختیاری‌اند و در پنل قرار دارند. برای استفاده از آن‌ها، **Node Plugins** را در UI مدیریت باز کنید، یک پیکربندی plugin بسازید، pluginهای دلخواه را فعال کنید و آن را به nodeهای خود متصل کنید. Meridian از قبل هر node را با capability ‏`NET_ADMIN` که pluginها لازم دارند اجرا می‌کند و پیکربندی‌های plugin شما را هرگز تغییر نمی‌دهد و حذف نمی‌کند.

pluginها قوانین nftables را روی host می‌نویسند، بنابراین upstream به کرنل Linux نسخهٔ 5.7 یا جدیدتر هم نیاز دارد؛ روی کرنل قدیمی‌تر بی‌صدا هیچ کاری نمی‌کنند. `meridian check` این را روی هر exit و gateway با عنوان **Node plugin readiness** گزارش می‌کند و دربارهٔ کرنل قدیمی هشدار می‌دهد (به Ubuntu 22.04+ یا Debian 11+ بروید). اگر از pluginها استفاده نمی‌کنید، می‌توانید آن هشدار را نادیده بگیرید.

Torrent Blocker از طریق sniffing ترافیک، BitTorrent را تشخیص می‌دهد و Meridian آن را (به‌صورت route-only، بنابراین مقصدها هرگز بازنویسی نمی‌شوند) روی هر inboundی که تولید می‌کند روشن می‌کند. plugin را در پنل فعال کنید تا روی هر exit کار کند.

### اتصال یک ربات به پنل

ربات‌های جامعه، مثل ربات تلگرامی که می‌گوید چقدر ترافیک باقی مانده، مستقیم با API ‏Remnawave صحبت می‌کنند. به هر ربات توکن جداگانه‌ای بدهید که فقط دسترسی لازم را داشته باشد:

1. پنل را باز کنید (`meridian panel` نشانی را چاپ می‌کند)، به **Remnawave Settings → API tokens** (تنظیمات Remnawave، توکن‌های API) بروید و **Create API token** را بزنید.
2. توکن را به نام ربات نام‌گذاری کنید و **Expires in (days)** را روی مدتی بگذارید که واقعاً آن را می‌چرخانید، مثلاً ۳۰ یا ۹۰ روز.
3. از پیش‌تنظیم **Read only** شروع کنید، یا endpointهای مشخصی را انتخاب کنید و فقط آنچه ربات استفاده می‌کند بدهید. پنل توکن را فقط یک بار نشان می‌دهد؛ آن را کنار secretهای ربات نگه دارید.
4. ربات را به URL پنل از `meridian panel` راهنمایی کنید و توکن را به‌صورت `Authorization: Bearer <token>` بفرستید. مسیرهای API زیر آن URL قرار می‌گیرند، مثلاً `https://198.51.100.10/<secret-path>/api/users/by-username/alice`. این URL شامل مسیر مخفی پنل است، پس آن را مثل توکن محرمانه نگه دارید.

scopeها به شکل `resource:endpoint` نام‌گذاری می‌شوند؛ `resource:read` همهٔ endpointهای خواندن یک resource را می‌دهد و `resource:write` همهٔ endpointهای نوشتن را. یک ربات فقط‌خواندنی معمولاً به این‌ها نیاز دارد:

| Scope | Endpoint | برمی‌گرداند |
|---|---|---|
| `users:by-username` | `GET /api/users/by-username/{username}` | وضعیت، ترافیک مصرف‌شده و محدودیت، و انقضای یک کاربر |
| `users:by-short-uuid` | `GET /api/users/by-short-uuid/{shortUuid}` | همان‌ها، با یافتن کاربر از شناسهٔ موجود در لینک اشتراکش |
| `users:list` | `GET /api/users` | همهٔ کاربران، صفحه‌بندی‌شده |
| `system:stats` | `GET /api/system/stats` | مجموع کاربران و ترافیک کل پنل |
| `nodes:list` | `GET /api/nodes` | وضعیت و ترافیک هر node |

scope نوشتن را فقط وقتی اضافه کنید که ربات حساب‌ها را تغییر می‌دهد، مثلاً `users:extend` (‏`POST /api/users/{id}/actions/extend`) برای ربات پرداخت که انقضا را تمدید می‌کند. وضعیت، محدودیت‌ها و انقضا مال شما برای تغییر است (جدول بالا را ببینید)، پس apply بعدی ویرایش‌های ربات را نگه می‌دارد. ربات نباید کلاینت‌های Meridian را تغییر نام دهد یا حذف کند: apply بعدی آن‌ها را دوباره می‌سازد.

توکن خود Meridian را (`meridian-provisioner` در فهرست توکن‌ها) به ربات ندهید. دسترسی کامل به پنل دارد و عملاً هرگز منقضی نمی‌شود، پس نشت از میزبان ربات همهٔ nodeها، کلیدها و کاربران را فاش می‌کند. توکن جداگانه آسیب را به کارهایی که ربات می‌تواند انجام دهد محدود می‌کند، خودش منقضی می‌شود و بدون تأثیر بر Meridian قابل حذف است. به `meridian-provisioner` دست نزنید؛ همهٔ دستورهای کلاینت و apply از آن استفاده می‌کنند.
