.\" Text automatically generated by txt2man .TH TURN 1 "17 May 2026" "" "" .SH "اطلاعات عمومی (GENERAL INFORMATION)" پروژه سرور TURN حاوی کد منبع یک سرور TURN و کتابخانه پیام‌رسانی کلاینت TURN است. همچنین، چند برنامه اضافی برای مقاصد آزمایش ارائه شده است. .PP برای دستورالعمل‌های ساخت به فایل docs/Build.md مراجعه کنید. .PP پس از ساخت، ایمیج‌های باینری زیر را خواهید داشت: .TP .B 1. turnserver: رله سرور TURN. ایمیج باینری کامپایل‌شده برنامه TURN Server در زیرشاخه bin/ قرار دارد. .TP .B 2. turnadmin: ابزار مدیریت TURN. به README.turnadmin و صفحه راهنمای turnadmin مراجعه کنید. .TP .B 3. turnutils_uclient. به README.turnutils و صفحه راهنمای turnutils مراجعه کنید. .TP .B 4. turnutils_peer. به README.turnutils و صفحه راهنمای turnutils مراجعه کنید. .TP .B 5. turnutils_stunclient. به README.turnutils و صفحه راهنمای turnutils مراجعه کنید. .TP .B 6. turnutils_rfc5769check. به README.turnutils و صفحه راهنمای turnutils مراجعه کنید. .PP در زیرشاخه "examples/scripts"، نمونه‌هایی از خطوط فرمان را برای اجرای برنامه‌ها خواهید یافت. این اسکریپت‌ها برای اجرا از زیرشاخه examples/ در نظر گرفته شده‌اند، به عنوان مثال: .PP $ cd examples $ ./scripts/secure_relay.sh .SH "سامانه SYSTEMD (SYSTEMD)" اگر کتابخانه توسعه systemd در دسترس باشد، وضعیت سرور را به systemd اطلاع می‌دهد. .SH "اجرای سرور TURN (RUNNING THE TURN SERVER)" برای اجرای سرور coturn به عنوان یک دیمون (سرویس پس‌زمینه) از دستور زیر استفاده کنید: .RE .PP $ turnserver \-o .RS توجه داشته باشید که اگر تغییری در فایل پیکربندی ایجاد کنید، سرور باید مجدداً راه‌اندازی شود. .PP یادداشت گزینه‌ها: turnserver برای اکثر گزینه‌ها نام‌های کوتاه و طولانی دارد. برخی گزینه‌ها فقط شکل طولانی و برخی فقط شکل کوتاه دارند. در صورت نیاز به آرگومان، نحو آن‌ها کمی متفاوت است: .PP شکل کوتاه باید به این صورت استفاده شود (برای مثال): .RE .PP $ turnserver \-L 12.34.56.78 .RS معادل شکل طولانی باید از نویسه "=" استفاده کند: .RE .PP $ turnserver \-\-listening\-ip=12.34.56.78 .RS اگر گزینه یک فلگ باشد (نیاز به آرگومان ندارد)، نحوه استفاده از آن‌ها یکسان است؛ برای مثال: .RE .PP $ turnserver \-a .RS معادل است با: .RE .PP $ turnserver \-\-lt\-cred\-mech .SH "نام (NAME)" turnserver \- پیاده‌سازی سرور رله TURN و STUN .SH "خلاصه دستور (SYNOPSIS)" .nf .fam C $ turnserver [\-n | \-c ] [flags] [ \-\-userdb= | \-\-psql\-userdb= | \-\-mysql\-userdb= | \-\-mongo\-userdb= | \-\-redis\-userdb= ] [\-z | \-\-no\-auth | \-a | \-\-lt\-cred\-mech ] [options] $ turnserver \-h .fam T .fi .fam T .fi .SH "توضیحات (DESCRIPTION)" Config file settings: .TP .B \fB\-n\fP عدم استفاده از فایل پیکربندی و استفاده انحصاری از پارامترهای خط فرمان. .TP .B \fB\-c\fP نام فایل پیکربندی (پیش‌فرض: turnserver.conf). قالب فایل پیکربندی را می‌توان در .RE فایل نمونه ارائه شده examples/etc/turnserver.conf مشاهده کرد. نام‌های طولانی گزینه‌ها به عنوان نام آیتم‌های پیکربندی در فایل استفاده می‌شوند. اگر مسیر مطلقی ارائه نشود، فایل در پوشه‌های زیر جستجو می‌شود: .IP \(bu 3 پوشه جاری .IP \(bu 3 زیرپوشه etc/ در پوشه جاری .IP \(bu 3 پوشه etc/ در سطح بالاتر .IP \(bu 3 /etc/ .IP \(bu 3 /usr/local/etc/ .IP \(bu 3 پوشه نصب /etc .RS تنظیمات پایگاه‌داده کاربران: .TP .B \fB\-b\fP, \-\-db, \-\-userdb نام فایل پایگاه‌داده کاربران SQLite (پیش‌فرض: /var/db/turndb یا /usr/local/var/db/turndb یا /var/lib/turn/turndb). .RE .RS \fB\-e\fP, \-\-psql\-userdb, \-\-sql\-userdb رشته اتصال به پایگاه‌داده کاربران برای PostgreSQL. این پایگاه‌داده می‌تواند برای مکانیزم اعتبارنامه‌های بلندمدت استفاده شود .RE و می‌تواند مقدار مخفی (secret) را برای احراز هویت زمان‌دار مبتنی بر رمز در TURN REST API ذخیره کند. قالب رشته اتصال به این صورت است: "host= dbname= user= password= connect_timeout=" (برای نسخه‌های 8.x یا جدیدتر Postgres). یا: "postgresql://username:password@hostname:port/databasename" (برای نسخه‌های 9.x یا جدیدتر Postgres). برای توضیحات و مثال‌های بیشتر به فایل docs/PostgreSQL.md مراجعه کنید. همچنین، برای مستندات کامل PostgreSQL به http://www.PostgreSQL.org مراجعه کنید. .RS .TP .B \fB\-M\fP, \-\-mysql\-userdb رشته اتصال به پایگاه‌داده کاربران برای MySQL یا MariaDB. این پایگاه‌داده می‌تواند برای مکانیزم اعتبارنامه‌های بلندمدت استفاده شود .RE و می‌تواند مقدار مخفی را برای احراز هویت زمان‌دار مبتنی بر رمز در TURN REST API ذخیره کند. قالب رشته اتصال به این صورت است: "host= dbname= user= password= connect_timeout= read_timeout=" برای توضیحات و مثال‌های بیشتر به فایل docs/MySQL.md مراجعه کنید. همچنین برای مستندات کامل MySQL به http://www.mysql.org یا http://mariadb.org مراجعه کنید. پارامترهای اختیاری رشته اتصال برای ارتباطات امن (SSL): ca, capath, cert, key, cipher (برای توضیحات گزینه‌های دستور به http://dev.mysql.com/doc/refman/5.1/en/ssl\-options.html مراجعه کنید). .RS .TP .B \fB\-\-secret\-key\-file\fP این مسیر فایلی است که حاوی کلید مخفی رمزنگاری AES هنگام استفاده از رمزنگاری گذرواژه MySQL است. اگر می‌خواهید در رشته اتصال MySQL از گذرواژه به صورت رمزنگاری‌شده استفاده کنید، .RE آنگاه در این گزینه مسیر فایل کلید مخفی را تنظیم کنید؛ کلیدی که برای رمزنگاری گذرواژه MySQL استفاده می‌شود. هشدار: اگر این گزینه تنظیم شود، گذرواژه MySQL در گزینه "mysql\-userdb" حتماً باید در قالب رمزنگاری‌شده وارد شود! اگر می‌خواهید از گذرواژه متنی آشکار استفاده کنید، این گزینه را تنظیم نکنید! .RS .TP .B \fB\-J\fP, \-\-mongo\-userdb رشته اتصال به پایگاه‌داده کاربران برای MongoDB. این پایگاه‌داده می‌تواند برای مکانیزم اعتبارنامه‌های بلندمدت استفاده شود .RE و می‌تواند مقدار مخفی را برای احراز هویت زمان‌دار مبتنی بر رمز در TURN REST API ذخیره کند. قالب رشته اتصال به این صورت است: "mongodb://username:password@host:port/database?options" برای توضیحات و مثال‌های بیشتر به فایل docs/Mongo.md مراجعه کنید. همچنین برای مستندات کامل MongoDB به http://docs.mongodb.org/manual مراجعه کنید. .RS .TP .B \fB\-N\fP, \-\-redis\-userdb رشته اتصال به پایگاه‌داده کاربران برای Redis. این پایگاه‌داده می‌تواند برای مکانیزم اعتبارنامه‌های بلندمدت استفاده شود .RE و می‌تواند مقدار مخفی را برای احراز هویت زمان‌دار مبتنی بر رمز در TURN REST API ذخیره کند. قالب رشته اتصال به این صورت است: "ip= dbname= password= connect_timeout=" اگر سرور TURN با پشتیبانی hiredis_ssl ساخته شده باشد، می‌توان یک انتقال TLS را با افزودن "tls=true" به همراه یک فایل CA درخواست کرد: "... tls=true ca=". اعتبارسنجی گواهی سرور به طور پیش‌فرض فعال است؛ برای فهرست کامل کلیدهای TLS (شامل ca, capath, cert, clientkey, sni, verify) و مثال‌ها به فایل docs/Redis.md مراجعه کنید. برای توضیحات و مثال‌های بیشتر به فایل docs/Redis.md مراجعه کنید. همچنین برای مستندات کامل Redis به http://redis.io مراجعه کنید. .RS فلگ‌ها: .TP .B \fB\-v\fP, \-\-verbose حالت پرگویی متوسط. .TP .B \fB\-V\fP, \-\-Verbose حالت پرگویی بسیار بالا، بسیار آزاردهنده و توصیه نمی‌شود. .TP .B \fB\-o\fP, \-\-daemon اجرای سرور در قالب دیمون (سرویس پس‌زمینه). .PP \fB\-\-no\-software\-attribute\fP منسوخ شده است. به "\-\-software\-attribute" مراجعه کنید. .TP .B \fB\-\-software\-attribute\fP ارسال SOFTWARE_ATTRIBUTE روی پیام‌هایی که امکان داشتن آن را دارند. به طور پیش‌فرض غیرفعال است. معادل گزینه منسوخ‌شده "\-\-no\-software\-attribute false". .RE .RS .TP .B \fB\-f\fP, \-\-fingerprint استفاده از اثرانگشت (fingerprint) در پیام‌های TURN. اگر یک درخواست ورودی حاوی اثرانگشت باشد، سرور TURN همیشه اثرانگشت‌ها را به پیام‌های این نشست .RE اضافه خواهد کرد، بدون توجه به تنظیمات اختصاصی سرور. .RS \fB\-\-include\-reason\-string\fP درج رشته‌های دلیل توصیفی در پاسخ‌های خطای STUN/TURN. به طور پیش‌فرض، فقط عبارت دلیل استاندارد برای کد خطا .RE ارسال می‌شود. فعال کردن این گزینه توضیحات خطای مفصلی اضافه می‌کند که ممکن است در اشکال‌زدایی کمک کند، اما همچنین می‌تواند اطلاعات داخلی سرور را فاش سازد. .RS .TP .B \fB\-a\fP, \-\-lt\-cred\-mech استفاده از مکانیزم اعتبارنامه‌های بلندمدت (این گزینه برای استفاده در WebRTC مورد نیاز است). .TP .B \fB\-z\fP, \-\-no\-auth عدم استفاده از هرگونه مکانیزم اعتبارنامه و مجاز شمردن دسترسی ناشناس. نقطه مقابل گزینه‌های \-a و \-A. این حالت پیش‌فرض در زمانی است که هیچ .RE گزینه مرتبط با احراز هویت تنظیم نشده باشد. به طور پیش‌فرض، هیچ مکانیزم اعتبارنامه‌ای استفاده نمی‌شود \- ورود هر کاربری مجاز است. .RS .TP .B \fB\-\-use\-auth\-secret\fP فلگ TURN REST API. فلگی که گزینه ویژه‌ای برای احراز هویت WebRTC مبتنی بر رمز .RE مخفی احراز هویت تنظیم می‌کند. هدف این قابلیت، پشتیبانی از "TURN Server REST API" به شرح بخش TURN REST API در ادامه است. این گزینه از برچسب زمان به عنوان بخشی از نام کاربری ترکیبی استفاده می‌کند: usercombo \-> "timestamp:username"، turn user \-> usercombo، turn password \-> base64(hmac(input_buffer = usercombo, key = shared\-secret)). این به اعتبارنامه‌های TURN امکان می‌دهد که برای یک شناسه کاربری خاص منظور شوند. اگر شناسه مناسبی ندارید، می‌توان فقط از برچسب زمان استفاده کرد. این گزینه صرفاً احراز هویت مبتنی بر رمز مخفی را فعال می‌کند. مقدار واقعی رمز مخفی یا توسط گزینه static\-auth\-secret تعریف می‌شود، یا در جدول turn_secret در پایگاه‌داده یافت می‌شود. .RS .TP .B \fB\-\-oauth\fP پشتیبانی از احراز هویت oAuth، طبق استاندارد شخص ثالث STUN/TURN در RFC 7635. .TP .B \fB\-\-dh566\fP استفاده از کلید پیش‌تعریف‌شده 566 بیتی DH TLS. اندازه پیش‌فرض کلید 2066 است. .TP .B \fB\-\-dh1066\fP استفاده از کلید پیش‌تعریف‌شده 1066 بیتی DH TLS. اندازه پیش‌فرض کلید 2066 است. .TP .B \fB\-\-tlsv1\fP تنظیم TLSv1 به عنوان حداقل نسخه پروتکل پشتیبانی‌شده. .TP .B \fB\-\-tlsv1_1\fP تنظیم TLSv1.1 به عنوان حداقل نسخه پروتکل پشتیبانی‌شده. .TP .B \fB\-\-no\-tlsv1_2\fP تنظیم TLSv1.3/DTLSv1.2 به عنوان حداقل نسخه پروتکل پشتیبانی‌شده. .TP .B \fB\-\-no\-udp\fP عدم راه‌اندازی شنوندگان کلاینت UDP. .TP .B \fB\-\-no\-tcp\fP عدم راه‌اندازی شنوندگان کلاینت TCP. .TP .B \fB\-\-no\-tls\fP عدم راه‌اندازی شنوندگان کلاینت TLS. .TP .B \fB\-\-no\-dtls\fP عدم راه‌اندازی شنوندگان کلاینت DTLS. .TP .B \fB\-\-no\-udp\-relay\fP مجاز ندانستن نقاط پایانی رله UDP تعریف‌شده در RFC 5766، فقط استفاده از نقاط پایانی رله TCP تعریف‌شده در RFC 6062. .RE .RS .TP .B \fB\-\-no\-tcp\-relay\fP مجاز ندانستن نقاط پایانی رله TCP تعریف‌شده در RFC 6062، فقط استفاده از نقاط پایانی رله UDP تعریف‌شده در RFC 5766. .RE .RS .TP .B \fB\-\-no\-stdout\-log\fP فلگ جلوگیری از ارسال پیام‌های لاگ به stdout. به طور پیش‌فرض، تمام پیام‌های لاگ هم به stdout و هم به .RE فایل لاگ پیکربندی‌شده ارسال می‌شوند. با این گزینه همه‌چیز فقط به فایل لاگ ارسال خواهد شد (مگر اینکه خود فایل لاگ stdout باشد). .RS .TP .B \fB\-\-syslog\fP با این فلگ، تمام لاگ‌ها به لاگ سیستم (syslog) هدایت خواهند شد. .TP .B \fB\-\-syslog\-facility\fP تنظیم تسهیلات (facility) سامانه syslog برای پیام‌های syslog. پیش‌فرض '' است. .TP .B \fB\-\-simple\-log\fP این فلگ بدان معناست که هیچ چرخش لاگی انجام نخواهد شد و نام فایل لاگ همان‌طور که هست، بدون اضافه شدن PID و تاریخ ساخته می‌شود. .RE این گزینه می‌تواند برای مثال همراه با ابزار logrotate استفاده شود. .RS .TP .B \fB\-\-log\-min\-level\fP تنها ثبت پیام‌های لاگ در این سطح یا بالاتر. سطوح معتبر، از پرگویانه‌ترین به کم‌گویانه‌ترین: \fBdebug\fP (همه‌چیز؛ پیش‌فرض)، \fBinfo\fP، \fBwarning\fP، \fBerror\fP (فقط خطاها). سطح ناشناخته با نمایش یک هشدار نادیده گرفته می‌شود. .TP .B \fB\-\-new\-log\-timestamp\fP فعال‌سازی برچسب زمان کامل ISO\-8601 در تمامی لاگ‌ها. .TP .B \fB\-\-new\-log\-timestamp\-format\fP تنظیم قالب برچسب زمان (در قالب تابع strftime(1)) .TP .B \fB\-\-log\-binding\fP ثبت لاگ درخواست بایندینگ STUN. اکنون برای جلوگیری از حملات DoS به طور پیش‌فرض غیرفعال است. .TP .B \fB\-\-secure\-stun\fP الزام احراز هویت در درخواست‌های بایندینگ STUN. به طور پیش‌فرض، دسترسی ناشناس کلاینت‌ها به قابلیت بایندینگ STUN مجاز است. .RE .RS .TP .B \fB\-S\fP, \-\-stun\-only اجرا فقط به عنوان سرور STUN، تمام درخواست‌های TURN نادیده گرفته خواهند شد. گزینه‌ای برای غیرفعال کردن قابلیت‌های TURN، تنها درخواست‌های STUN پردازش می‌شوند. .RE .RS .TP .B \fB\-\-no\-stun\fP اجرا فقط به عنوان سرور TURN، تمام درخواست‌های STUN نادیده گرفته خواهند شد. گزینه‌ای برای غیرفعال کردن قابلیت‌های STUN، تنها درخواست‌های TURN پردازش می‌شوند. .RE .RS .TP .B \fB\-\-allow\-loopback\-peers\fP مجاز شمردن همتایان (peers) روی نشانی‌های لوپ‌بک (127.x.x.x و ::1). فقط برای آزمایش در محیط توسعه مجاز است! .RE در محیط عملیاتی یک آسیب‌پذیری امنیتی بالقوه ایجاد می‌کند، و به همین دلیل به دلایل امنیتی، استفاده از آن همراه با cli\-password خالی مجاز نیست. .RS .TP .B \fB\-\-no\-multicast\-peers\fP مسدود کردن همتایان روی نشانی‌های برودکست شناخته‌شده (224.0.0.0 و بالاتر، و *::FFXX). .RE .RS .TP .B \fB\-\-mobility\fP پشتیبانی از مشخصات تحرک‌پذیری با ICE (MICE). .TP .B \fB\-\-cli\fP فعال‌سازی پشتیبانی از واسط خط فرمان (CLI). به طور پیش‌فرض همیشه خاموش است. گزینه‌های \-\-cli\-ip و \-\-cli\-port را نیز مشاهده کنید. .RE .RS .TP .B \fB\-\-no\-cli\fP غیرفعال کردن پشتیبانی از CLI. از آنجا که CLI به طور پیش‌فرض خاموش است، این فلگ فقط برای باطل کردن تنظیم "cli" از .RE فایل پیکربندی کاربرد دارد. .RS .TP .B \fB\-\-server\-relay\fP رله سرور. گزینه غیر استاندارد و خطرناک. فقط برای آن دسته از برنامه‌هایی که می‌خواهیم .RE برنامه‌های کاربردی سرور را روی نقاط پایانی رله اجرا کنیم. این گزینه بررسی دسترسی‌های IP را روی بسته‌های ورودی به نقاط پایانی رله حذف می‌کند. به http://tools.ietf.org/search/rfc5766#section\-17.2.3 مراجعه کنید. .RS .TP .B \fB\-\-udp\-self\-balance\fP (فقط برای لینوکس‌های قدیمی‌تر توصیه می‌شود) توزیع بار خودکار ترافیک UDP روی سرورهای کمکی .RE (در صورت پیکربندی). توزیع بار از مکانیزم ALTERNATE\-SERVER استفاده می‌کند. کلاینت TURN برای این قابلیت باید از پاسخ 300 ALTERNATE\-SERVER پشتیبانی کند. .RS .TP .B \fB\-\-check\-origin\-consistency\fP فلگی که بررسی یکپارچگی مبدأ (origin) را تنظیم می‌کند: در طول یک نشست، تمام درخواست‌ها باید مقدار ویژگی .RE ORIGIN اصلی یکسانی داشته باشند (اگر ORIGIN در ابتدا توسط نشست استفاده شده باشد). .RS .TP .B \fB\-\-drop\-invalid\-packets\fP دور انداختن زودهنگام بسته‌های نامعتبر. به طور پیش‌فرض فعال است. .TP .B \fB\-\-drop\-invalid\-packets\-log\fP ثبت لاگ بسته‌های نامعتبر. رفتار پیش‌فرض ثبت نکردن لاگ بسته‌های نامعتبر است. .TP .B \fB\-\-udp\-recvmmsg\fP دریافت دسته‌ای UDP منحصراً در لینوکس از طریق ()recvmmsg روی سوکت‌های اشتراکی fan\-in (شنونده کلاینت و با \-\-multiplex\-peer، سوکت رله به ازای هر نخ). به طور پیش‌فرض در لینوکس فعال است؛ برای غیرفعال کردن، \-\-udp\-recvmmsg=false .RE (یا 0=) را ارسال کنید. .RS .TP .B \fB\-\-udp\-recvmmsg\-log\fP ثبت لاگ آمار اشغال دسته‌ای recvmmsg لینوکس هر ۱۰ ثانیه یک‌بار. .TP .B \fB\-\-udp\-gso\fP فعال‌سازی UDP\-GSO لینوکس (UDP_SEGMENT cmsg) در مسیر ارسال رله. هنگامی که یک دسته sendmmsg دارای مقصد و اندازه بخش مشترک باشد، یک .RE پیمایش پشته شبکه می‌تواند N دیتاگرام را حمل کند. نیازمند \-\-multiplex\-peer است (که دسته‌بندی sendmmsg را فعال می‌کند که GSO بر روی آن سوار می‌شود)؛ ارسال \-\-udp\-gso به تنهایی هیچ اثری ندارد. .RS .TP .B \fB\-\-multiplex\-peer\fP فقط لینوکس. فعال‌سازی حالت رله چندپخشی (تسهیم‌سازی) سمت همتا (غیر استاندارد، اختیاری). بایند کردن پورت رله به ازای هر تخصیص .RE را با یک جفت سوکت UDP اشتراکی به ازای هر نخ رله (یکی IPv4، یکی IPv6) که تمام نشست‌های TURN را در آن نخ پوشش می‌دهد، جایگزین می‌کند؛ نشست‌ها با جستجوی دقیق IP:port همتا تفکیک می‌شوند. محدودیت تخصیص حدود ۱۶ هزار پورت ناشی از محدوده پورت رله را برمی‌دارد و بسته‌های رهاشده rcvbuf UDP در سمت هسته را به شدت کاهش می‌دهد. این گزینه دسته‌بندی sendmmsg را به همراه دارد؛ \-\-udp\-recvmmsg (به طور پیش‌فرض روشن) پنجره recvmmsg را که دسته‌بندی روی آن سوار می‌شود فراهم می‌کند. نکته: درخواست‌های تخصیص EVEN\-PORT در این حالت با خطای 400 رد می‌شوند؛ کلاینت‌هایی که به EVEN\-PORT نیاز دارند باید از مسیر سنتی استفاده کنند. برای طراحی و مزایا و معایب به docs/multiplex\-peer.md مراجعه کنید. .RS .TP .B \fB\-\-multiplex\-peer\-port\fP فقط لینوکس. پورت پایه UDP برای سوکت‌های رله multiplex\-peer (پیش‌فرض: 3480، محدوده معتبر 1 تا 65000). نخ i به پورت‌های .RE +2i (برای IPv4) و +2i+1 (برای IPv6) متصل می‌شود؛ یک سرور با ۴ نخ پورت‌های ..+7 را مصرف می‌کند. مجموع پورت‌های مصرفی = relay_threads * 2. .RS .TP .B \fB\-\-respond\-http\-unsupported\fP بازگرداندن پاسخ HTTP با کد وضعیت 400 به اتصالات HTTP برقرار شده با پورت‌هایی که از HTTP پشتیبانی نمی‌کنند. رفتار .RE پیش‌فرض بستن فوری اتصال است. .RS .TP .B \fB\-\-prometheus\fP فعال‌سازی معیارهای پرومتئوس (Prometheus). به طور پیش‌فرض غیرفعال است. روی پورت 9641 و تحت مسیر /metrics شنود می‌کند؛ .RE همچنین مسیر / روی این پورت می‌تواند به عنوان بررسی سلامت (health check) استفاده شود. در نصب‌های apt در دسترس نیست. .RS .TP .B \fB\-\-prometheus\-username\-labels\fP فعال‌سازی برچسب‌گذاری معیارهای ترافیک پرومتئوس با نام‌های کاربری کلاینت‌ها. برچسب‌گذاری با نام‌های کاربری کلاینت به طور پیش‌فرض .RE غیرفعال است، زیرا این کار ممکن است هنگام استفاده از احراز هویت با نام‌های کاربری موقت (مانند TURN REST API) باعث نشت حافظه شود. .RS .TP .B \fB\-\-prometheus\-port\fP پورت شنونده پرومتئوس (پیش‌فرض: 9641). .TP .B \fB\-\-prometheus\-address\fP
نشانی شنود پرومتئوس (پیش‌فرض: any). .TP .B \fB\-\-prometheus\-path\fP مسیر ارائه پرومتئوس (پیش‌فرض: metrics/). .TP .B \fB\-\-version\fP چاپ نسخه و خروج. .TP .B \fB\-h\fP راهنما. .PP گزینه‌های دارای مقدار: .TP .B \fB\-\-stale\-nonce\fP[=] استفاده از امنیت مضاعف با مقدار نانس (nonce) دارای طول عمر محدود، به ثانیه (پیش‌فرض ۶۰۰ ثانیه). .RE برای طول عمر نامحدود نانس، آن را روی 0 تنظیم کنید. .RS .TP .B \fB\-\-max\-allocate\-lifetime\fP تنظیم حداکثر مقدار برای طول عمر تخصیص (allocation). پیش‌فرض ۳۶۰۰ ثانیه است. .RE .RS .TP .B \fB\-\-channel\-lifetime\fP تنظیم طول عمر بایندینگ کانال، پیش‌فرض ۶۰۰ ثانیه است. این مقدار برای اهداف عملیاتی نباید تغییر کند. .RE .RS .TP .B \fB\-\-permission\-lifetime\fP تنظیم مقدار برای طول عمر دسترسی (permission). پیش‌فرض ۳۰۰ ثانیه است. .RE این مقدار برای اهداف عملیاتی نباید تغییر کند. .RS .TP .B \fB\-d\fP, \-\-listening\-device دستگاه رابط شنونده. (توصیه نمی‌شود. قابلیت اختیاری، فقط در لینوکس). .RE فرآیند turnserver برای متصل کردن نقطه پایانی شنود به یک دستگاه رابط باید دسترسی ریشه (root) داشته باشد. اگر turnserver باید به عنوان یک فرآیند بدون مجوز ریشه اجرا شود، از این تنظیم استفاده نکنید. .RS .TP .B \fB\-L\fP, \-\-listening\-ip نشانی IP شنونده سرور رله. می‌توان چندین شنونده را مشخص کرد، برای مثال: .RE \-L ip1 \-L ip2 \-L ip3 اگر هیچ نشانی IP تعیین نشود، تمام نشانی‌های IPv4 و IPv6 سیستم برای شنود استفاده خواهند شد. همان نشانی‌های IP می‌توانند هم به عنوان IP شنود و هم IP رله استفاده شوند. .RS .TP .B \fB\-p\fP, \-\-listening\-port پورت شنونده TURN برای شنوندگان UDP و TCP (پیش‌فرض: 3478). نکته: در عمل، نشست‌های TLS و DTLS نیز می‌توانند به پورت‌های "ساده" TCP و UDP .RE متصل شوند \- در صورتی که توسط پیکربندی مجاز باشد. .RS .TP .B \fB\-\-tls\-listening\-port\fP پورت شنونده TURN برای شنوندگان TLS و DTLS (پیش‌فرض: 5349). نکته: در عمل، نشست‌های "ساده" TCP و UDP نیز می‌توانند به پورت‌های TLS و DTLS .RE متصل شوند \- در صورتی که توسط پیکربندی مجاز باشد. سرور TURN نوع ترافیک را به صورت "خودکار" تشخیص می‌دهد. در واقع، دو نقطه پایانی شنود (نقطه پایانی "ساده" و "tls") از نظر عملکرد معادل هستند؛ اما ما هر دو نقطه پایانی را برای برآورده کردن مشخصات RFC 5766 حفظ می‌کنیم. برای اتصالات امن TCP، در حال حاضر از SSL نسخه 3 و TLS نسخه‌های 1.0، 1.1، 1.2 پشتیبانی می‌کنیم. برای اتصالات امن UDP، از DTLS نسخه 1 پشتیبانی می‌کنیم. .RS .TP .B \fB\-\-alt\-listening\-port\fP پورت شنود جایگزین برای شنوندگان UDP و TCP؛ مقدار پیش‌فرض (یا صفر) به معنی "پورت شنود به علاوه یک" است. .RE این گزینه برای STUN CHANGE_REQUEST \- به مفهوم RFC 5780 یا به مفهوم RFC 3489 قدیمی \- برای کشف رفتار NAT مورد نیاز است. سرور TURN فقط در صورتی از CHANGE_REQUEST پشتیبانی می‌کند که با بیش از یک نشانی IP شنود از یک خانواده (IPv4 یا IPv6) راه‌اندازی شده باشد. CHANGE_REQUEST فقط توسط پروتکل UDP پشتیبانی می‌شود و سایر پروتکل‌ها صرفاً برای "تقارن" روی آن شنود می‌کنند. .RS .TP .B \fB\-\-alt\-tls\-listening\-port\fP پورت شنود جایگزین برای پروتکل‌های TLS و DTLS. مقدار پیش‌فرض (یا صفر) به معنی "پورت شنود TLS به علاوه یک" است. .RE .RS .TP .B \fB\-\-tcp\-proxy\-port\fP پشتیبانی از اتصالات متعادل‌کننده بار TCP روی این پورت. متعادل‌کننده بار باید از پروتکل پروکسی باینری استفاده کند. .RE (https://www.haproxy.org/download/1.8/doc/proxy\-protocol.txt) .RS .TP .B \fB\-\-aux\-server\fP نقطه پایانی شنود سرور کمکی STUN/TURN. سرورهای کمکی تقریباً تمام عملکردهای TURN و STUN را دارند. .RE محدودیت‌های (جزئی) عبارتند از: .IP 1) 4 سرورهای کمکی پورت‌های جایگزین ندارند و از عملکرد STUN RFC 5780 (درخواست تغییر / CHANGE REQUEST) پشتیبانی نمی‌کنند. .IP 2) 4 سرورهای کمکی همچنین هرگز پاسخ ALTERNATIVE\-SERVER را برنمی‌گردانند. قالب‌های معتبر عبارتند از 1.2.3.4:5555 برای IPv4 و [1:2::3:4]:5555 برای IPv6. می‌توان چندین گزینه aux\-server داشت که هرکدام برای شنود درخواست‌های کلاینت استفاده می‌شوند. .RS .TP .B \fB\-i\fP, \-\-relay\-device دستگاه رابط رله برای سوکت‌های رله (توصیه نمی‌شود. اختیاری، فقط در لینوکس). .RE .RS .TP .B \fB\-E\fP, \-\-relay\-ip نشانی رله (نشانی IP محلی که برای رله کردن بسته‌ها به همتا استفاده خواهد شد). .RE چندین نشانی رله ممکن است استفاده شود: \-E ip1 \-E ip2 \-E ip3 همان نشانی‌های IP می‌توانند هم به عنوان IP شنود و هم IP رله استفاده شوند. اگر هیچ نشانی رله‌ای تعیین نشود، turnserver سیاست پیش‌فرض را اعمال خواهد کرد: خود تصمیم می‌گیرد که کدام نشانی‌های رله استفاده شوند و همیشه از نشانی IP سوکت کلاینت به عنوان نشانی IP رله نشست TURN استفاده خواهد کرد (اگر خانواده نشانی رله درخواست‌شده با خانواده سوکت کلاینت یکی باشد). .RS .TP .B \fB\-X\fP, \-\-external\-ip نگاشت نشانی عمومی/خصوصی سرور TURN، در صورتی که سرور پشت NAT قرار دارد. در این وضعیت، اگر \-X به شکل "ip \-" استفاده شود، آنگاه آن IP به عنوان .RE IP رله تمام تخصیص‌ها گزارش خواهد شد. این سناریو فقط در حالت ساده‌ای کار می‌کند که یک نشانی رله منفرد استفاده شود و نیازی به عملکرد CHANGE_REQUEST نباشد. آن نشانی رله منفرد باید توسط NAT به IP 'خارجی' نگاشت شود. مقدار "external\-ip" در صورت خالی نبودن، در فیلد XOR\-RELAYED\-ADDRESS برگردانده می‌شود. برای آن IP 'خارجی'، NAT باید پورت‌ها را مستقیماً هدایت کند (پورت رله‌شده 12345 همیشه باید به همان پورت 'خارجی' 12345 نگاشت شود). در موارد پیچیده‌تر که بیش از یک نشانی IP درگیر است، این گزینه باید چندین بار استفاده شود و هر ورودی باید فرم "X \-" داشته باشد تا تمام نشانی‌های درگیر نگاشت شوند. عملکرد STUN کشف NAT از طریق CHANGE_REQUEST (RFC5780 یا RFC3489) در صورتی که نشانی‌ها به درستی نگاشت شده باشند، حتی زمانی که خود سرور TURN پشت NAT باشد، به درستی کار خواهد کرد. به طور پیش‌فرض، این مقدار خالی است و هیچ نگاشت نشانی استفاده نمی‌شود. .RS .TP .B \fB\-m\fP, \-\-relay\-threads تعداد نخ‌های رله برای مدیریت اتصالات برقرارشده (علاوه بر نخ احراز هویت و نخ شنونده). .RE اگر صریحاً روی 0 تنظیم شود، برنامه فرآیند رله را در یک نخ منفرد و در همان نخ فرآیند شنونده اجرا می‌کند (نخ احراز هویت همچنان یک نخ جداگانه خواهد بود). اگر تنظیم نشود، یک الگوریتم بهینه پیش‌فرض به کار گرفته می‌شود (وابسته به سیستم‌عامل). در سیستم‌های لینوکس قدیمی‌تر (پیش از هسته لینوکس 3.9)، تعداد نخ‌های UDP همیشه یک نخ به ازای هر نقطه پایانی شنود شبکه است \- مگر اینکه "m 0 \-" یا "m 1 \-" تنظیم شده باشد. .RS .TP .B \fB\-\-cpus\fP لغو تشخیص تعداد پردازنده‌های سیستم. استفاده از این عدد به جای تعداد CPU شناسایی‌شده خودکار. در محیط‌های مجازی‌سازی‌شده .RE یا کانتینری که تعداد CPU قابل مشاهده با آنچه cgroup واقعاً اجازه می‌دهد مطابقت ندارد، مفید است. .RS .TP .B \fB\-\-min\-port\fP حد پایین محدوده پورت UDP برای تخصیص نقاط پایانی رله. .RE مقدار پیش‌فرض 49152 است، طبق RFC 5766. .RS .TP .B \fB\-\-max\-port\fP حد بالای محدوده پورت UDP برای تخصیص نقاط پایانی رله. .RE مقدار پیش‌فرض 65535 است، طبق RFC 5766. .RS .TP .B \fB\-\-sock\-buf\-size\fP تنظیم اندازه بافر سوکت به مقدار جدید (به بایت). .TP .B \fB\-u\fP, \-\-user حساب کاربری اعتبارنامه‌های مکانیزم امنیتی بلندمدت، به قالب جداشده با دو‌نقطه username:key. .RE چندین حساب کاربری ممکن است در خط فرمان استفاده شود. کلید یا همان گذرواژه کاربر است، یا کلیدی است که توسط دستور turnadmin تولید شده است. در حالت دوم، کلید باید با نمادهای 0x آغاز شود. کلید بر اساس نام کاربری، قلمرو کاربر و گذرواژه کاربر محاسبه می‌شود. این تنظیم نباید همراه با TURN REST API استفاده شود. .RS .TP .B \fB\-r\fP, \-\-realm قلمرو (realm) پیش‌فرض مورد استفاده برای کاربران هنگامی که هیچ رابطه مبدأ/قلمرو صریحی در پایگاه‌داده یافت نشود، یا اگر سرور TURN .RE از هیچ پایگاه‌داده‌ای استفاده نکند (فقط تنظیمات خط فرمان و فایل userdb). باید با مکانیزم اعتبارنامه‌های بلندمدت یا با TURN REST API استفاده شود. .RS .TP .B \fB\-C\fP, \-\-rest\-api\-separator این نماد (کاراکتر) جداکننده برچسب‌زمان/نام‌کاربری در TURN REST API است. مقدار پیش‌فرض : است. .RE .RS .TP .B \fB\-q\fP, \-\-user\-quota سهمیه تخصیص به ازای هر کاربر: چند تخصیص همزمان یک کاربر می‌تواند ایجاد کند. این گزینه همچنین می‌تواند .RE از طریق پایگاه‌داده برای یک قلمرو خاص تنظیم شود. .RS .TP .B \fB\-Q\fP, \-\-total\-quota سهمیه کل تخصیص‌ها: محدودیت سراسری روی تخصیص‌های همزمان. این گزینه همچنین می‌تواند از طریق پایگاه‌داده برای یک قلمرو خاص تنظیم شود. .RE .RS .TP .B \fB\-s\fP, \-\-max\-bps حداکثر پهنای باند بر حسب بایت در ثانیه که یک نشست TURN مجاز به رسیدگی به آن است (جریان‌های شبکه ورودی و خروجی به طور جداگانه بررسی می‌شوند). هر مقداری بیش از .RE آن محدودیت دور ریخته خواهد شد یا موقتاً مسدود می‌شود (در محدوده بافرهای موجود). این گزینه همچنین می‌تواند از طریق پایگاه‌داده، برای یک قلمرو خاص تنظیم شود. .RS .TP .B \fB\-B\fP, \-\-bps\-capacity حداکثر ظرفیت سرور. کل پهنای باند بر حسب بایت در ثانیه که سرور TURN مجاز است .RE برای مجموع نشست‌ها تخصیص دهد (جریان‌های شبکه ورودی و خروجی به طور جداگانه بررسی می‌شوند). .RS .TP .B \fB\-\-static\-auth\-secret\fP مقدار رمز مخفی احراز هویت ایستا (یک رشته) فقط برای TURN REST API. اگر تنظیم نشود، سرور turn سعی می‌کند از مقدار پویا در جدول .RE turn_secret در پایگاه‌داده کاربران (در صورت وجود) استفاده کند. مقدار ذخیره‌شده در پایگاه‌داده می‌تواند توسط یک برنامه جداگانه به طور زنده تغییر کند، به همین دلیل است که آن حالت دیگر پویا است. چندین رمز مشترک می‌تواند استفاده شود (هم در پایگاه‌داده و هم به صورت "ایستا"). .RS .TP .B \fB\-\-no\-auth\-pings\fP غیرفعال کردن بررسی‌های دوره‌ای سلامت برای جداول رمز احراز هویت 'پویا'. .TP .B \fB\-\-no\-dynamic\-ip\-list\fP عدم استفاده از فهرست پویا نشانی‌های IP مجاز/ممنوع همتا. .TP .B \fB\-\-no\-dynamic\-realms\fP عدم استفاده از تخصیص و گزینه‌های پویای قلمروها. .TP .B \fB\-\-server\-name\fP نام سرور مورد استفاده برای مقاصد احراز هویت oAuth. .RE مقدار پیش‌فرض همان نام قلمرو است. .RS .TP .B \fB\-\-cert\fP فایل گواهی، در قالب PEM. همان قوانین جستجوی فایل که برای فایل پیکربندی بود .RE اعمال می‌شود. اگر هر دو گزینه \-\-no\-tls و \-\-no\-dtls تعیین شده باشند، این پارامتر مورد نیاز نیست. مقدار پیش‌فرض turn_server_cert.pem است. .RS .TP .B \fB\-\-pkey\fP فایل کلید خصوصی، در قالب PEM. همان قوانین جستجوی فایل که برای فایل پیکربندی بود .RE اعمال می‌شود. اگر هر دو گزینه \-\-no\-tls و \-\-no\-dtls تعیین شده باشند، این پارامتر مورد نیاز نیست. مقدار پیش‌فرض turn_server_pkey.pem است. .RS .TP .B \fB\-\-raw\-public\-keys\fP پشتیبانی از کلیدهای عمومی خام (Raw public keys). سوئیچ روشن/خاموش برای RFC\-7250 یا همان کلیدهای عمومی خام. .RE برنامه Coturn باید در برابر OpenSSL نسخه حداقل 3.2.1 ساخته شده باشد. .RS .TP .B \fB\-\-pkey\-pwd\fP اگر فایل کلید خصوصی رمزنگاری شده باشد، از این گذرواژه استفاده می‌شود. .TP .B \fB\-\-cipher\-list\fP فهرست رمزهای مجاز OpenSSL برای اتصالات TLS/DTLS. مقدار پیش‌فرض برای نسخه‌های TLS/DTLS تا TLSv1.2/DTLSv1.2 برابر "DEFAULT" است، .RE و برای TLSv1.3 مجموعه‌رمزهای پیش‌فرض کتابخانه استفاده می‌شود. .RS .TP .B \fB\-\-CA\-file\fP فایل CA در قالب OpenSSL. سرور TURN را ملزم به اعتبارسنجی گواهی‌های SSL کلاینت می‌کند. .RE به طور پیش‌فرض، هیچ CA تعیین نشده و هیچ بررسی گواهی کلاینتی انجام نمی‌شود. .RS .TP .B \fB\-\-ec\-curve\-name\fP نام منحنی برای رمزهای EC، در صورت پشتیبانی توسط کتابخانه OpenSSL (برای TLS و DTLS). مقدار پیش‌فرض prime256v1 است .RE اگر از نسخه قبل از OpenSSL 1.0.2 استفاده شود. با OpenSSL 1.0.2 و بالاتر، در صورتی که توسط این گزینه تعریف نشده باشد، یک منحنی بهینه به طور خودکار محاسبه خواهد شد. .RS .TP .B \fB\-\-dh\-file\fP استفاده از کلید سفارشی DH TLS، ذخیره‌شده در فایل در قالب PEM. فلگ‌های \-\-dh566 و \-\-dh1066 هنگام دریافت کلید DH از فایل نادیده گرفته می‌شوند. .RE .RS .TP .B \fB\-l\fP, \-\-log\-file گزینه‌ای برای تنظیم نام مسیر کامل فایل لاگ. به طور پیش‌فرض، turnserver تلاش می‌کند یک فایل لاگ در پوشه‌های .RE /var/log/turnserver، /var/log، /var/tmp، /tmp و . (جاری) باز کند (هر عملیات باز کردن فایلی که ابتدا موفق شود، همان فایل استفاده خواهد شد). با این گزینه می‌توانید نام قطعی فایل لاگ را تعیین کنید. نام‌های ویژه "stdout" و "\-" هستند \- که همه چیز را به خروجی استاندارد هدایت می‌کنند. همچنین، نام "syslog" همه چیز را به لاگ سیستم (syslog) هدایت می‌کند، همان‌طور که انگار گزینه "\-\-syslog" تنظیم شده باشد. در زمان اجرا، فایل لاگ را می‌توان با سیگنال SIGHUP به فرآیند turnserver بازنشانی کرد. .RS .TP .B \fB\-\-alternate\-server\fP گزینه‌ای برای تنظیم حالت "تغییر مسیر" (redirection). مقدار این گزینه نشانی سرور جایگزین برای سرویس‌های UDP و TCP به شکل .RE [:] خواهد بود. سرور این مقدار را در ویژگی ALTERNATE\-SERVER، با خطای 300، روی درخواست ALLOCATE، به کلاینت ارسال می‌کند. کلاینت فقط مقادیری با همان خانواده نشانی نقطه پایانی شبکه کلاینت دریافت خواهد کرد. برای توضیحات عملکرد ALTERNATE\-SERVER به RFC 5389 و RFC 5766 مراجعه کنید. کلاینت باید از مقدار به‌دست‌آمده برای ارتباطات بعدی TURN استفاده کند. اگر بیش از یک گزینه \-\-alternate\-server ارائه شود، این قابلیت را می‌توان به جای یک "تغییر مسیر" صرف، دقیق‌تر به عنوان "توزیع بار" توصیف کرد. اگر شماره پورت حذف شود، شماره پورت پیش‌فرض 3478 برای پروتکل‌های UDP/TCP استفاده خواهد شد. نویسه‌های دونقطه (:) در نشانی‌های IPv6 ممکن است با نحو این گزینه تداخل داشته باشند. برای کاهش این تداخل، نشانی‌های تحت‌اللفظی IPv6 در چنین شناسه‌های منبعی درون کروشه قرار می‌گیرند، برای مثال: [2001:db8:85a3:8d3:1319:8a2e:370:7348]:3478 . می‌توان چندین سرور جایگزین تنظیم کرد. آنها به صورت نوبتی (round\-robin) استفاده خواهند شد. تمام سرورها در استخر دارای وزن برابر در نظر گرفته می‌شوند و بار به طور مساوی توزیع خواهد شد. برای مثال، اگر 4 سرور جایگزین داشته باشیم، هر سرور 25٪ از درخواست‌های ALLOCATE را دریافت خواهد کرد. نشانی یک سرور TURN جایگزین می‌تواند بیش از یک بار با گزینه alternate\-server استفاده شود، بنابراین این کار می‌تواند "وزن‌دهی" سرورها را شبیه‌سازی کند. .RS .TP .B \fB\-\-tls\-alternate\-server\fP گزینه‌ای برای تعیین سرور جایگزین برای سرویس‌های TLS و DTLS به شکل :. اگر شماره پورت حذف شود، شماره پورت پیش‌فرض 5349 .RE برای پروتکل‌های TLS/DTLS استفاده خواهد شد. برای توضیحات عملکرد به گزینه قبلی مراجعه کنید. .RS .TP .B \fB\-O\fP, \-\-redis\-statsdb رشته اتصال به پایگاه‌داده وضعیت و آمار Redis، در صورت استفاده (پیش‌فرض: خالی، هیچ پایگاه‌داده آماری Redis استفاده نمی‌شود). این پایگاه‌داده اطلاعات وضعیت تخصیص‌ها را نگه می‌دارد، .RE و همچنین می‌تواند برای انتشار و تحویل اعلان‌های رویدادهای ترافیک و تخصیص استفاده شود. این گزینه پایگاه‌داده می‌تواند مستقل از گزینه \-\-redis\-userdb استفاده شود، و در واقع Redis می‌تواند برای وضعیت/آمار استفاده شود و SQLite یا MySQL یا MongoDB یا PostgreSQL برای پایگاه‌داده کاربران استفاده شود. رشته اتصال دارای همان پارامترهای رشته اتصال redis\-userdb است. .RS .TP .B \fB\-\-max\-allocate\-timeout\fP حداکثر زمان مجاز، به ثانیه، برای برقراری کامل تخصیص. پیش‌فرض 60 ثانیه است. .TP .B \fB\-\-drain\-min\-allocations\fP در حالت تخلیه (که با سیگنال SIGUSR1 وارد آن می‌شود)، به محض اینکه تعداد تخصیص‌های فعال به این مقدار یا کمتر کاهش یافت، فرآیند خاموش می‌شود. پیش‌فرض 0 است (صبر تا زمانی که تمام تخصیص‌ها تخلیه شوند). .RE .RS \fB\-\-denied\-peer\-ip\fP= .PP \fB\-\-allowed\-peer\-ip\fP= گزینه‌هایی برای مسدود کردن یا مجاز دانستن نشانی‌های IP یا محدوده‌های خاصی از نشانی‌های IP. اگر یک نشانی IP هم به عنوان مجاز و هم ممنوع تعیین شود، .RE آن نشانی مجاز در نظر گرفته می‌شود. این در حالتی کاربرد دارد که بخواهید یک محدوده از نشانی‌های IP را مسدود کنید، به جز چند IP مشخص در آن محدوده. این گزینه می‌تواند زمانی استفاده شود که نمی‌خواهید کاربران سرور TURN به ماشین‌های قابل دسترسی توسط سرور TURN دسترسی پیدا کنند که در غیر این صورت از اینترنت غیرقابل دسترس بودند (مثلاً وقتی سرور TURN پشت NAT قرار دارد). محدوده‌های IP همتای "سفید" و "سیاه" می‌توانند به صورت پویا در پایگاه‌داده نیز تغییر داده شوند. قوانین نشانی‌های مجاز/ممنوع (فهرست‌های سفید/سیاه) بسیار ساده هستند: .IP 1) 4 اگر هیچ قانونی برای یک نشانی وجود نداشته باشد، مجاز است؛ .IP 2) 4 اگر یک قانون "مجاز" وجود داشته باشد که با نشانی مطابقت دارد، مجاز است \- بدون توجه به هر چیز دیگر؛ .IP 3) 4 اگر هیچ قانون "مجازی" وجود نداشته باشد و یک قانون "ممنوع" وجود داشته باشد که با نشانی مطابقت دارد، آنگاه ممنوع است. .RS .TP .B \fB\-\-pidfile\fP نام فایل برای ذخیره شناسه فرآیند (PID). پیش‌فرض /var/run/turnserver.pid (در صورت استفاده از کاربر ارشد) یا .RE /var/tmp/turnserver.pid است. .RS .TP .B \fB\-\-acme\-redirect\fP هدایت درخواست‌های ACME/RFC8555 (مانند چالش Let's Encrypt)، یعنی درخواست‌های HTTP GET منطبق با '*(.)/acme\-challenge/well\-known./^' .RE به 1$ با (.*) == 1$. هیچ اعتبارسنجی روی انجام نخواهد شد، بنابراین مطمئن شوید که اسلش پایانی را فراموش نکنید. اگر یک رشته خالی باشد (مقدار پیش‌فرض)، هیچ رسیدگی ویژه‌ای به این درخواست‌ها انجام نمی‌شود. .RS .TP .B \fB\-\-proc\-user\fP نام کاربری برای اجرای فرآیند. پس از مقداردهی اولیه، فرآیند turnserver تلاش خواهد کرد شناسه کاربر جاری را به آن کاربر تغییر دهد. .RE .RS .TP .B \fB\-\-proc\-group\fP نام گروه برای اجرای فرآیند. پس از مقداردهی اولیه، فرآیند turnserver تلاش خواهد کرد شناسه گروه جاری را به آن گروه تغییر دهد. .RE .RS .TP .B \fB\-K\fP, \-\-keep\-address\-family منسوخ شده و به نفع \-\-allocation\-default\-address\-family حذف خواهد شد! سرور TURN خانواده نشانی را بر اساس خانواده نشانی ارتباط .RE کلاینت <=> سرور TURN تخصیص می‌دهد. !! این گزینه بخش 4.2 از RFC6156 را نقض می‌کند (پیش‌فرض IPv4 را نقض می‌کند) !! .RS .TP .B \fB\-A\fP \-\-allocation\-default\-address\-family= پیش‌فرض IPv4 است. سرور TURN خانواده نشانی را بر اساس خانواده نشانی درخواستی کلاینت TURN تخصیص می‌دهد. .RE اگر خانواده نشانی صریحاً توسط کلاینت درخواست نشود، به این مقدار پیش‌فرض بازمی‌گردد. استاندارد RFC صریحاً تعریف می‌کند که این پیش‌فرض باید IPv4 باشد، بنابراین از سایر مقادیر این گزینه با احتیاط استفاده کنید! .RS .TP .B \fB\-\-cli\-ip\fP نشانی IP سیستم محلی برای استفاده در واسط مدیریتی CLI. فرآیند turnserver را می‌توان برای مدیریت از طریق telnet، .RE در این نشانی IP و روی پورت CLI (پارامتر بعدی را ببینید) در دسترس قرار داد. مقدار پیش‌فرض 127.0.0.1 است. برای دسترسی به واسط مدیریتی CLI می‌توانید از telnet یا putty (در حالت telnet) استفاده کنید. .RS .TP .B \fB\-\-cli\-port\fP پورت شنود واسط مدیریتی CLI. پیش‌فرض 5766 است. .TP .B \fB\-\-cli\-password\fP گذرواژه دسترسی به CLI. پیش‌فرض خالی است (بدون گذرواژه). به دلایل امنیتی، توصیه می‌شود از فرم رمزنگاری‌شده .RE گذرواژه استفاده کنید (دستور \-P را در ابزار turnadmin ببینید). علامت‌های دلار در فرم رمزنگاری‌شده باید اسکیپ شوند. .RS .TP .B \fB\-\-cli\-max\-output\-sessions\fP حداکثر تعداد نشست‌های خروجی در دستور ps در CLI. این مقدار را می‌توان به صورت زنده در CLI تغییر داد. مقدار پیش‌فرض 256 است. .RE .RS .TP .B \fB\-\-web\-admin\fP فعال‌سازی پشتیبانی از وب‌ادمین Turn. به طور پیش‌فرض غیرفعال است. .TP .B \fB\-\-web\-admin\-ip\fP= نشانی IP سیستم محلی برای نقطه پایانی سرور Web\-admin. مقدار پیش‌فرض 127.0.0.1 است. .TP .B \fB\-\-web\-admin\-port\fP= پورت سرور Web\-admin. پیش‌فرض 8080 است. .TP .B \fB\-\-web\-admin\-listen\-on\-workers\fP فعال‌سازی شنود سرور web\-admin روی پورت‌های STUN/TURN ورکرها. به دلایل امنیتی به طور پیش‌فرض غیرفعال است! .RE (این رفتار قبلاً رفتار پیش‌فرض بود و به طور پیش‌فرض فعال بود). .RS .TP .B \fB\-\-rfc5780\fP فعال‌سازی RFC5780 (کشف رفتار NAT). در ابتدا، اگر بیش از یک نشانی شنونده از یک خانواده .RE نشانی وجود داشت، قابلیت کشف رفتار NAT به طور پیش‌فرض فعال می‌شد. این گزینه این رفتار اولیه را فعال می‌کند، زیرا کشف رفتار NAT ویژگی‌هایی به پاسخ اضافه می‌کند و این امر احتمال حمله تقویت‌شده را افزایش می‌دهد. اکیداً توصیه می‌شود از این گزینه برای کاهش ضریب تقویت در پاسخ‌های بایندینگ STUN استفاده شود. .RS .TP .B \fB\-\-no\-rfc5780\fP منسوخ شده و اکنون رفتار پیش‌فرض است. به \-\-rfc5780 مراجعه کنید. .RE .RS .TP .B \fB\-\-stun\-backward\-compatibility\fP افزودن ویژگی منسوخ‌شده MAPPED\-ADDRESS به پاسخ‌های بایندینگ STUN، علاوه بر ویژگی XOR\-MAPPED\-ADDRESS که همیشه ارسال می‌شود. فقط برای کلاینت‌هایی مورد نیاز است که نمی‌توانند XOR\-MAPPED\-ADDRESS را تجزیه کنند. اکیداً توصیه می‌شود این گزینه را خاموش نگه دارید تا ضریب تقویت در پاسخ‌های بایندینگ STUN کاهش یابد. .RE .RS .TP .B \fB\-\-rfc3489\-compatibility\fP منسوخ شده. فعال کردن رسیدگی به درخواست‌های بایندینگ منسوخ RFC 3489 ("STUN کلاسیک")، که حاوی کوکی جادویی نیستند. استاندارد RFC 5389 این مکانیزم‌ها را منسوخ اعلام کرد و RFC 8489 آن‌ها را کاملاً کنار گذاشت. این گزینه در انتشار اصلی بعدی بدون جایگزین حذف خواهد شد. .IP پیش از ایجاد این گزینه، مسیر درخواست‌های RFC 3489 توسط \fB\-\-stun\-backward\-compatibility\fP کنترل می‌شد. اپراتورهایی که آن گزینه را به منظور سرویس‌دهی به کلاینت‌های STUN کلاسیک تنظیم کرده بودند، اکنون باید \fB\-\-rfc3489\-compatibility\fP را تنظیم کنند، یا هر دو گزینه را برای حفظ دقیق رفتار قبلی فعال نمایند. .RE .RS .TP .B \fB\-\-unauthorized\-ratelimit\fP فعال‌سازی محدودیت نرخ پاسخ‌های UDP 401 Unauthorized به ازای هر منبع. این گزینه حملات بازتابی و تقویتی را مهار می‌کند که در آن‌ها نشانی منبع قربانی برای دریافت چالش‌های احراز هویت جعل می‌شود. به طور پیش‌فرض غیرفعال است. .TP .B \fB\-\-unauthorized\-ratelimit\-rps\fP= حداکثر تعداد پاسخ‌های UDP 401 Unauthorized ارسالی به ازای هر IP منبع در هر ثانیه. پیش‌فرض 10 است. .TP .B \fB\-\-stateless\-nonce\fP صدور نانس‌های چالش 401/438 به عنوان کوکی‌های برچسب‌زمان احراز هویت‌شده (زمان صدور به علاوه یک HMAC روی نشانی کلاینت، با کلیدی از یک رمز مخفی به ازای هر فرآیند) به جای ذخیره نانس تصادفی در وضعیت نشست کلاینت. در نتیجه، به درخواست‌های UDP احراز هویت‌نشده بدون تخصیص نشست پاسخ داده می‌شود و حافظه سرور در برابر سیل پیام‌های معتبر ساختاری STUN با نشانی منبع جعلی محدود می‌ماند. از نظر پروتکل با کلاینت‌های استاندارد TURN سازگار است. به طور پیش‌فرض فعال است؛ با \-\-stateless\-nonce=false غیرفعال می‌شود که نانس تصادفی ذخیره‌شده و چالش سنتی ۱۶ کاراکتری را به جای چالش ۲۴ کاراکتری بازمی‌گرداند. .TP .B \fB\-\-stateless\-nonce\-secret\fP= مشتق کردن کلید امضای نانس بدون وضعیت از این رمز به جای یک کلید تصادفی به ازای هر فرآیند (مستلزم \-\-stateless\-nonce). سرورهایی که این رمز را به اشتراک می‌گذارند نانس‌های یکدیگر را اعتبارسنجی می‌کنند، بنابراین چالش‌ها پس از راه‌اندازی مجدد باقی می‌مانند و در یک ناوگان متعادل‌شده از نظر بار کار می‌کنند. از یک رشته طولانی با آنتروپی بالا استفاده کنید و ساعت‌های ناوگان را از طریق NTP همگام نگه دارید. .RE .PP .SH ================================== .SH "توزیع بار و تنظیم عملکرد (LOAD BALANCE AND PERFORMANCE TUNING)" این مبحث در صفحه ویکی زیر پوشش داده شده است: .PP https://github.com/coturn/coturn/wiki/turn_performance_and_load_balance .SH =================================== .SH "استفاده در WEBRTC (WEBRTC USAGE)" این مجموعه‌ای از نکات برای کاربران WebRTC است: .IP 1) 4 فناوری WebRTC از مکانیزم احراز هویت بلندمدت استفاده می‌کند، بنابراین باید از گزینه \-a (یا \-\-lt\-cred\-mech) استفاده کنید. رله کردن WebRTC با دسترسی ناشناس کار نخواهد کرد. همراه با گزینه \-a، فراموش نکنید که قلمرو پیش‌فرض (گزینه \-r) را تنظیم کنید. همچنین باید حساب‌های کاربری را راه‌اندازی کنید که برای این منظور چندین گزینه دارید: .RE .PP الف) گزینه‌های خط فرمان (\-u). ب) یک جدول پایگاه‌داده (SQLite یا PostgreSQL یا MySQL یا MongoDB). باید کلیدها را با ابزار turnadmin تنظیم کنید (به مستندات و ویکی turnadmin مراجعه کنید). نمی‌توانید از گذرواژه‌های آشکار در پایگاه‌داده استفاده کنید. ج) جفت(های) کلید/مقدار در Redis، در صورت استفاده از ردیس. می‌توانید از کلیدها یا گذرواژه‌های آشکار در ردیس استفاده کنید؛ فایل turndb/testredisdbsetup.sh را ببینید. د) همچنین می‌توانید از TURN REST API استفاده کنید. به رمز(های) مشترک نیاز خواهید داشت که یا از طریق گزینه خط فرمان، یا فایل پیکربندی، یا جدول پایگاه‌داده یا جفت‌های کلید/مقدار ردیس تنظیم شده باشند. .RS .IP 2) 4 معمولاً WebRTC از اثرانگشت (fingerprinting با گزینه \-f) استفاده می‌کند. .IP 3) 4 گزینه \-v برای مشاهده کلاینت‌های متصل‌شده مناسب است. .IP 4) 4 اگر سرور TURN خود را پشت NAT اجرا می‌کنید، گزینه \-X مورد نیاز است. .IP 5) 4 اگر می‌خواهید محدوده تعداد پورت‌های نقاط پایانی رله را محدود کنید، ممکن است گزینه‌های \-\-min\-port و \-\-max\-port مورد نیاز باشند. .SH =================================== .SH "رابط کاربری TURN REST API (TURN REST API)" در WebRTC، مرورگر اطلاعات اتصال TURN را از وب‌سرور دریافت می‌کند. این اطلاعات یک داده امنیتی و محرمانه است \- زیرا شامل اعتبارنامه‌های لازم TURN می‌باشد. از آنجا که این اعتبارنامه‌ها از طریق شبکه‌های عمومی منتقل می‌شوند، با یک رخنه امنیتی بالقوه مواجه هستیم. .PP اگر مجبور باشیم اطلاعات ارزشمندی را روی شبکه عمومی منتقل کنیم، این اطلاعات باید طول عمر محدودی داشته باشد. بدین ترتیب فردی که این اطلاعات را بدون مجوز به دست می‌آورد، فقط می‌تواند خسارت محدودی وارد کند. .PP ایده TURN REST API \- یعنی اعتبارنامه‌های TURN با زمان محدود \- این‌گونه پدید آمد. این مکانیزم امنیتی بر پایه مکانیزم اعتبارنامه‌های بلندمدت استوار است. ایده اصلی REST API این است که وب‌سرور اعتبارنامه‌ها را به کلاینت ارائه می‌دهد، اما این اعتبارنامه‌ها توسط برنامه‌ای که باید اتصال به سرور TURN برقرار کند، فقط برای مدت محدودی قابل استفاده هستند. .PP مکانیزم سنتی اعتبارنامه‌های بلندمدت (LTCM) در اینجا شرح داده شده است: .PP http://tools.ietf.org/html/rfc5389#section\-10.2 .PP http://tools.ietf.org/html/rfc5389#section\-15.4 .PP برای احراز هویت، هر کاربر باید دو چیز را بداند: نام کاربری و گذرواژه. به صورت اختیاری، کاربر باید مقدار ORIGIN را ارائه دهد تا سرور بتواند قلمرو (realm) مورد استفاده برای کاربر را تعیین کند. مقادیر نانس (nonce) و قلمرو توسط سرور TURN ارائه می‌شوند. اما LTCM چیزی در مورد ماهیت و ماندگاری نام کاربری و گذرواژه نمی‌گوید؛ و این همان چیزی است که توسط REST API استفاده می‌شود. .PP در TURN REST API، گذرواژه دائمی برای کاربران وجود ندارد. کاربر فقط نام کاربری دارد. گذرواژه همیشه موقت است و در زمان درخواست، هنگامی که کاربر به صفحه WebRTC دسترسی پیدا می‌کند، توسط وب‌سرور تولید می‌شود. در واقع، یک نام کاربری موقت و یک‌بارمصرف برای همان نشست نیز به کاربر ارائه می‌شود. .PP کاربر موقت به این صورت تولید می‌شود: .PP temporary\-username="timestamp" + ":" + "username" .PP که در آن username نام کاربری دائمی است و قالب timestamp به صورت ثانیه‌های سپری‌شده از سال 1970 است \- همان مقداری که تابع (NULL)time بازمی‌گرداند. .PP گذرواژه موقت به عنوان تابع HMAC\-SHA1 روی نام کاربری موقت، با استفاده از رمز مشترک به عنوان کلید HMAC به دست می‌آید و سپس نتیجه کدگذاری می‌شود: .PP temporary\-password = base64_encode(hmac\-sha1(shared\-secret, temporary\-username)) .PP هم سرور TURN و هم وب‌سرور از رمز مشترک یکسانی آگاه هستند. چگونگی توزیع رمز مشترک بین موجودیت‌های درگیر، به جزئیات استقرار WebRTC واگذار شده است \- این فراتر از محدوده TURN REST API است. .PP بنابراین، از یک برچسب زمان برای محاسبه گذرواژه موقت استفاده می‌شود و این برچسب زمان را می‌توان از نام کاربری موقت استخراج کرد. این اطلاعات ارزشمند هستند، اما تنها موقتی می‌باشند تا زمانی که برچسب زمان منقضی نشده باشد. بدون دانستن رمز مشترک، گذرواژه موقت جدیدی نمی‌تواند تولید شود. .PP همه این‌ها رسماً در سند Justin's Uberti TURN REST API توصیف شده است که با دنبال کردن پیوند "TURN REST API" در صفحه پروژه TURN Server به نشانی https://github.com/coturn/coturn قابل دستیابی است. .PP پس از اینکه نام کاربری و گذرواژه موقت توسط برنامه کلاینت (مرورگر) به دست آمد، بقیه فرآیند همان مکانیزم کلاسیک اعتبارنامه‌های بلندمدت است. برای توسعه‌دهندگان، ما آن را گام به گام در زیر شرح می‌دهیم: .RE .IP \(bu 3 یک کلاینت جدید TURN یک دستور درخواست به سرور TURN ارسال می‌کند. به صورت اختیاری، فیلد ORIGIN را به آن اضافه می‌کند. .IP \(bu 3 سرور TURN متوجه می‌شود که این یک کلاینت جدید است و پیام احراز هویت نشده است. .IP \(bu 3 سرور TURN یک رشته نانس تصادفی تولید کرده و خطای 401 را همراه با نانس و قلمرو به کلاینت بازمی‌گرداند. اگر فیلد ORIGIN در درخواست کلاینت وجود داشت، ممکن است بر مقدار قلمرویی که سرور برای کلاینت انتخاب می‌کند تأثیر بگذارد. .IP \(bu 3 کلاینت خطای 401 را مشاهده کرده و دو مقدار را از پاسخ خطا استخراج می‌کند: نانس و قلمرو. .IP \(bu 3 کلاینت از نام کاربری، قلمرو و گذرواژه برای تولید یک کلید استفاده می‌کند: key = MD5(username ":" realm ":" SASLprep(password)) (توضیحات SASLprep در اینجا آمده است: http://tools.ietf.org/html/rfc4013) .IP \(bu 3 کلاینت درخواست جدیدی تشکیل می‌دهد و نام کاربری، قلمرو و نانس را به درخواست اضافه می‌کند. سپس کلاینت فیلد یکپارچگی (integrity) را محاسبه کرده و به درخواست اضافه می‌کند. این بخش پیچیده‌ترین قسمت فرآیند است و در انتهای بخش 15.4 شرح داده شده است: http://tools.ietf.org/html/rfc5389#section\-15.4 .IP \(bu 3 کلاینت به صورت اختیاری فیلد اثرانگشت (fingerprint) را اضافه می‌کند. این نیز می‌تواند یک فرآیند ظریف باشد که در بخش 15.5 همان سند توضیح داده شده است. معمولاً WebRTC از پیام‌های TURN دارای اثرانگشت استفاده می‌کند. .IP \(bu 3 سرور TURN درخواست را دریافت کرده و نام کاربری را می‌خواند. .IP \(bu 3 سپس سرور TURN بررسی می‌کند که نانس و قلمرو موجود در درخواست معتبر باشند. .IP \(bu 3 سپس سرور TURN کلید را محاسبه می‌کند. .IP \(bu 3 سپس سرور TURN فیلد یکپارچگی را محاسبه می‌کند. .IP \(bu 3 سپس سرور TURN فیلد یکپارچگی محاسبه‌شده را با فیلد دریافتی مقایسه می‌کند \- آنها باید یکسان باشند. اگر فیلدهای یکپارچگی متفاوت باشند، درخواست رد می‌شود. .RS در ارتباطات بعدی، کلاینت می‌تواند دقیقاً همین توالی را طی کند، اما برای بهینه‌سازی، معمولاً کلاینت با داشتن اطلاعات قلمرو و نانس، رشته یکپارچگی را برای هر درخواست از قبل محاسبه می‌کند، به طوری که پاسخ خطای 401 دیگر غیرضروری می‌شود. سرور TURN می‌تواند از گزینه "\-\-stale\-nonce" برای امنیت بیشتر استفاده کند: پس از مدتی، نانس منقضی می‌شود و کلاینت پاسخ خطای 438 همراه با نانس جدید دریافت خواهد کرد و باید شروع به استفاده از نانس جدید کند. .PP در ارتباطات بعدی، سرور و کلاینت همیشه همان گذرواژه را فرض خواهند کرد \- گذرواژه اصلی به یک پارامتر نشست تبدیل می‌شود و هرگز منقضی نمی‌شود. بنابراین تا زمانی که نشست معتبر و منقضی‌نشده باشد، گذرواژه تغییر نمی‌کند. از این رو اگر نشست به درستی حفظ شود، می‌تواند برای همیشه ادامه یابد، حتی اگر گذرواژه کاربر قبلاً (در پایگاه‌داده) تغییر کرده باشد. نشست صرفاً از گذرواژه قدیمی استفاده می‌کند. به محض اینکه ارتباط نشست قطع شد، کلاینت باید از گذرواژه جدید برای اتصال مجدد استفاده کند (اگر گذرواژه تغییر کرده باشد). .PP نمونه‌ای که در آن یک رمز مشترک جدید هر ساعت یک‌بار توسط ماشین سرور TURN تولید شده و سپس از راه دور به وب‌سرور ارائه می‌شود، در اسکریپت examples/scripts/restapi/shared_secret_maintainer.pl ارائه شده است. .PP یک نکته بسیار مهم این است که نانس باید کاملاً تصادفی باشد و برای کلاینت‌های مختلف و نشست‌های مختلف متفاوت باشد. .SH =================================== .SH "پایگاه‌های داده (DATABASES)" برای پایگاه‌داده کاربران، turnserver گزینه‌های زیر را دارد: .IP 1) 4 کاربران را می‌توان در خط فرمان، با چندین گزینه \-u یا \-\-user تنظیم کرد. بدیهی است که تنها تعداد کمی از کاربران را می‌توان به این روش تنظیم کرد و اعتبارنامه‌های آن‌ها برای طول عمر فرآیند turnserver ثابت است. .IP 2) 4 کاربران را می‌توان در پایگاه‌داده SQLite ذخیره کرد. فایل پیش‌فرض پایگاه‌داده SQLite برابر /var/db/turndb یا /usr/local/var/db/turndb یا /var/lib/turn/turndb است. .IP 3) 4 کاربران را می‌توان در پایگاه‌داده PostgreSQL ذخیره کرد، اگر turnserver با پشتیبانی PostgreSQL کامپایل شده باشد. هر بار که turnserver اعتبارنامه‌های کاربر را بررسی می‌کند، پایگاه‌داده را می‌خواند (البته به صورت ناهمگام، به طوری که جریان جاری بسته‌ها به هیچ وجه به تأخیر نیفتد)، بنابراین هر تغییری در محتوای پایگاه‌داده بلافاصله توسط turnserver قابل مشاهده است. اگر به بهترین مقیاس‌پذیری نیاز دارید، این روش مناسب است. طرحواره (schema) پایگاه‌داده را می‌توان در فایل schema.sql یافت. برای اعتبارنامه‌های بلندمدت، باید "کلیدها" را برای کاربران تنظیم کنید؛ "کلیدها" توسط ابزار turnadmin تولید می‌شوند. برای تولید کلید، به نام کاربری، گذرواژه و قلمرو نیاز دارید. همه کاربران در پایگاه‌داده باید از مقدار قلمرو یکسانی استفاده کنند؛ اگر در آینده تصمیم به تغییر نام قلمرو بگیرید، باید تمام کلیدهای کاربران را مجدداً تولید کنید (این کار را می‌توان در یک اسکریپت دسته‌ای انجام داد). فایل turndb/testsqldbsetup.sql را به عنوان نمونه ببینید. .IP 4) 4 همین امر برای پایگاه‌داده MySQL نیز صادق است. همان فایل طرحواره قابل استفاده است. همان ملاحظات نیز اعمال می‌شود. .IP 5) 4 همین امر برای پایگاه‌داده Redis نیز صادق است، اما پایگاه‌داده Redis طرحواره متفاوتی دارد \- می‌توان آن را (به صورت توضیحات) در schema.userdb.redis یافت. همچنین، در Redis می‌توانید هم "کلیدها" و هم گذرواژه‌های آشکار را (برای اعتبارنامه‌های بلندمدت) ذخیره کنید \- گزینه "گذرواژه آشکار" امنیت کمتری دارد اما برای محیط‌های با امنیت پایین راحت‌تر است. فایل turndb/testredisdbsetup.sh را به عنوان مثال ببینید. .IP 6) 4 اگر از پایگاه‌داده استفاده شود، کاربران را می‌توان به چندین قلمرو مستقل تقسیم کرد. هر قلمرو را می‌توان به طور جداگانه مدیریت کرد و هر قلمرو می‌تواند مجموعه کاربران و گزینه‌های عملکردی خود را داشته باشد (شامل max\-bps، user\-quota، total\-quota). .IP 7) 4 اگر از MongoDB استفاده کنید، پایگاه‌داده به طور خودکار برای شما راه‌اندازی می‌شود. .IP 8) 4 البته، turnserver را می‌توان در حالت غیرامن استفاده کرد، جایی که کاربران مجاز به برقراری نشست‌ها به صورت ناشناس هستند. اما در اکثر موارد (مانند WebRTC) این کار نخواهد کرد. .PP برای پایگاه‌داده وضعیت و آمار، دو انتخاب وجود دارد: .IP 1) 4 ساده‌ترین انتخاب این است که از آن استفاده نکنید. گزینه \-\-redis\-statsdb را تنظیم نکنید و این قابلیت به سادگی نادیده گرفته می‌شود. .IP 2) 4 اگر تصمیم به استفاده از آن دارید، گزینه \-\-redis\-statsdb را تنظیم کنید. این پایگاه‌داده می‌تواند همان پایگاه‌داده در گزینه \-\-redis\-userdb باشد، یا می‌تواند پایگاه‌داده متفاوتی باشد. ممکن است بخواهید به دلایل امنیتی یا راحتی از پایگاه‌داده متفاوتی استفاده کنید. همچنین، می‌توانید از سیستم‌های مدیریت پایگاه‌داده متفاوتی برای پایگاه‌داده کاربران و پایگاه‌داده وضعیت و آمار استفاده کنید. برای مثال، می‌توانید از MySQL به عنوان پایگاه‌داده کاربران و از Redis برای آمار استفاده کنید. یا می‌توانید از Redis برای هر دو استفاده کنید. .PP بنابراین، ما ۶ انتخاب برای مدیریت کاربران و ۲ انتخاب برای مدیریت آمار داریم. این دو کاملاً مستقل از هم هستند. بنابراین در مجموع ۶*۲=۱۲ راه برای مدیریت اطلاعات ماندگار دارید، هرکدام را که برایتان راحت‌تر است انتخاب کنید. .PP نیازی نیست اطلاعات پایگاه‌داده را به صورت "دستی" مدیریت کنید \- برنامه turnadmin می‌تواند همه کارها را برای شما انجام دهد. برای PostgreSQL و MySQL فقط باید یک پایگاه‌داده خالی با اسکریپت SQL به نام schema.sql ایجاد کنید. با Redis حتی نیازی به آن هم نیست \- فقط turnadmin را اجرا کنید تا کاربران را برای شما تنظیم کند (راهنماهای turnadmin را ببینید). اگر از SQLite استفاده می‌کنید، فرآیند \fIturnserver\fP یا turnadmin هنگام راه‌اندازی، پایگاه‌داده خالی را برای شما مقداردهی اولیه می‌کند. فرآیند نصب سرور TURN یک پایگاه‌داده خالی مقداردهی‌شده SQLite را در مکان پیش‌فرض ایجاد می‌کند (/var/db/turndb یا /usr/local/var/db/turndb یا /var/lib/turn/turndb بسته به سیستم). .SH ================================= .SH "مذاکره پروتکل در لایه کاربرد (ALPN)" سرور از ALPNهای "stun.turn" و "stun.nat\-discovery" پشتیبانی می‌کند، زمانی که با OpenSSL 1.0.2 یا جدیدتر کامپایل شده باشد. اگر سرور پیام ClientHello از نوع TLS/DTLS دریافت کند که حاوی یکی یا هر دوی این ALPNها باشد، سرور اولین برچسب *.stun را انتخاب کرده و آن را در فیلد پسوند ALPN (در ServerHello) بازمی‌گرداند. اگر هیچ برچسب *.stun یافت نشود، سرور اطلاعات ALPN را در ServerHello درج نمی‌کند. .SH ================================= .SH "کتابخانه‌ها (LIBRARIES)" در زیرشاخه lib/، فرآیند ساخت کتابخانه پیام‌رسانی کلاینت TURN را ایجاد می‌کند. در زیرشاخه include/، فایل‌های هدر لازم قرار داده می‌شوند. پوسته C++ برای عملکرد پیام‌رسانی در هدر TurnMsgLib.h قرار دارد. نمونه‌ای از کد C++ را می‌توان در فایل stunclient.c یافت. .SH ================================= .SH "مستندات (DOCS)" پس از نصب، دستور زیر را اجرا کنید: .PP $ man turnserver .PP یا در پوشه ریشه پروژه: .PP $ man \-M man turnserver .PP تا صفحه راهنما را مشاهده کنید. .PP در زیرپوشه docs/html از درخت آرشیو اصلی، مرجع کتابخانه کلاینت را خواهید یافت. پس از نصب، در PREFIX/share/doc/turnserver/html قرار خواهد گرفت. .SH ================================= .SH "لاگ‌ها و ثبت وقایع (LOGS)" هنگامی که سرور TURN راه‌اندازی می‌شود، تلاش می‌کند یک فایل لاگ به نام turn_.log در پوشه‌های زیر ایجاد کند: .RE .IP \(bu 3 /var/log .IP \(bu 3 /log/ .IP \(bu 3 /var/tmp .IP \(bu 3 /tmp .IP \(bu 3 پوشه جاری .RS اگر تمام تلاش‌ها ناموفق بود (به دلیل تنظیمات مجوزهای سیستم)، آنگاه تمام پیام‌های لاگ فقط به خروجی استاندارد فرآیند ارسال می‌شوند. .PP این رفتار می‌تواند با گزینه‌های \-\-log\-file، \-\-syslog و \-\-no\-stdout\-log کنترل شود. .SH ================================= .SH "رابط مدیریتی HTTPS (HTTPS MANAGEMENT INTERFACE)" فرآیند turnserver یک دسترسی وب HTTPS به عنوان واسط آمار و مدیریت اولیه ارائه می‌دهد. فرآیند turnserver اتصالات ورودی مدیریت HTTPS را روی همان پورت‌های شنونده اصلی TURN/STUN شنود می‌کند. صفحات مدیریت وب ساده و خودتوضیح هستند. .PP برای فعال کردن واسط HTTPS، جدول پایگاه‌داده admin_user باید با حساب(های) کاربری مدیر پر شود. یک کاربر مدیر می‌تواند کاربر ارشد (در صورتی که به قلمرو خاصی تخصیص داده نشده باشد) یا یک کاربر محدود (در صورتی که به یک قلمرو تخصیص داده شده باشد) باشد. کاربران مدیر محدود می‌توانند فقط اقدامات محدودی را در قلمروهای مربوط به خود انجام دهند. .SH ================================= .SH "واسط خط فرمان تل‌نت (TELNET CLI)" فرآیند turnserver یک دسترسی CLI از طریق telnet به عنوان واسط آمار و مدیریت اولیه فراهم می‌کند. به طور پیش‌فرض، turnserver یک شنونده CLI از نوع telnet روی IP 127.0.0.1 و پورت 5766 راه‌اندازی می‌کند. این را می‌توان با گزینه‌های خط فرمان فرآیند turnserver تغییر داد (گزینه‌های \-\-cli\-ip و \-\-cli\-port را ببینید). فهرست کامل دستورات CLI از نوع telnet در خروجی دستور "help" در واسط خط فرمان ارائه شده است. .SH ================================= .SH "خوشه‌ها (CLUSTERS)" سرور TURN می‌تواند بخشی از یک ساختار خوشه‌ای (cluster) باشد. اما برای پشتیبانی از قابلیت "even port" (جفت جریان‌های RTP/RTCP)، درخواست‌های کلاینت از یک IP خاص باید به همان نمونه سرور TURN تحویل داده شود، بنابراین این کار نیازمند تنظیماتی در شبکه خوشه است. دلیل این امر آن است که نقاط پایانی رله RTP و RTCP باید روی همان IP رله تخصیص داده شوند. امکان طراحی طرحی با فوروارد کردن درخواست‌ها در سطح برنامه وجود دارد (و ممکن است بعداً این کار را انجام دهیم) اما بر عملکرد تأثیر منفی خواهد گذاشت. .SH ================================= .SH "فایل‌ها (FILES)" /etc/turnserver.conf .PP /var/db/turndb .PP /usr/local/var/db/turndb .PP /var/lib/turn/turndb .PP /usr/local/etc/turnserver.conf .SH ================================= .SH "پوشه‌ها (DIRECTORIES)" /usr/local/share/turnserver .PP /usr/local/share/doc/turnserver .PP /usr/local/share/examples/turnserver .SH ================================= .SH "استانداردها (STANDARDS)" استاندارد منسوخ STUN RFC 3489 .PP استاندارد جدید STUN RFC 5389 .SH "استاندارد TURN RFC 5766" پسوند TURN\-TCP استاندارد RFC 6062 .PP پسوند TURN IPv6 استاندارد RFC 6156 .PP بردارهای آزمون STUN/TURN استاندارد RFC 5769 .PP کشف رفتار NAT در STUN استاندارد RFC 5780 .SH ================================= .SH "همچنین ببینید (SEE ALSO)" turnadmin, turnutils .SH ====================================== .SS "منابع وب (WEB RESOURCES)" صفحه پروژه: .PP https://github.com/coturn/coturn .PP صفحه ویکی: .PP https://github.com/coturn/coturn/wiki .PP انجمن گفتگو: .PP https://groups.google.com/forum/?fromgroups=#!forum/turn\-server\-project\-rfc5766\-turn\-server .SH ====================================== .SS "نویسندگان (AUTHORS)" فایل AUTHORS.md را در توزیع کد منبع coturn مشاهده کنید.