| TURN(1) | TURN(1) |
اطلاعات کلی (GENERAL INFORMATION)
پروژه TURN Server شامل کد منبع یک سرور TURN و کتابخانه پیامرسانی کلاینت TURN است. همچنین، برخی برنامههای اضافی صرفاً برای اهداف آزمایشی ارائه شدهاند.
برای دستورالعملهای ساخت، پرونده docs/Build.md را ببینید.
پس از ساخت، تصویرهای اجرایی (binary images) زیر را خواهید داشت:
- 1.
- turnserver: سرور رله TURN. تصویر اجرایی کامپایلشده برنامه TURN Server در زیرشاخه bin/ قرار دارد.
- 2.
- turnadmin: ابزار مدیریت TURN. به README.turnadmin و صفحه راهنمای turnadmin مراجعه کنید.
- 3.
- turnutils_uclient. به README.turnutils و صفحه راهنمای turnutils مراجعه کنید.
- 4.
- turnutils_peer. به README.turnutils و صفحه راهنمای turnutils مراجعه کنید.
- 5.
- turnutils_stunclient. به README.turnutils و صفحه راهنمای turnutils مراجعه کنید.
- 6.
- turnutils_rfc5769check. به README.turnutils و صفحه راهنمای turnutils مراجعه کنید.
در زیرشاخه "examples/scripts"، نمونههایی از خط فرمانهای مورد استفاده برای اجرای برنامهها را خواهید یافت. این اسکریپتها برای اجرا از زیرشاخه examples/ در نظر گرفته شدهاند، برای مثال:
$ cd examples $ ./scripts/secure_relay.sh
سیستمدی (SYSTEMD)
اگر کتابخانه توسعه systemd در دسترس باشد، وضعیت سرور را به systemd اطلاع میدهد.
اجرای سرور تِرن (RUNNING THE TURN SERVER)
برای
اجرای سرور
coturn به عنوان
یک دیمن (daemon)
استفاده
کنید از:
$ turnserver -o
نکته درباره گزینهها: turnserver برای اکثر گزینهها، نامهای طولانی و کوتاه دارد. برخی گزینهها فقط شکل طولانی دارند و برخی دیگر فقط شکل کوتاه دارند. نحو آنها در صورتی که یک آرگومان مورد نیاز باشد تا حدودی متفاوت است:
شکل کوتاه باید به این صورت استفاده شود (برای مثال):
$ turnserver -L 12.34.56.78
$ turnserver --listening-ip=12.34.56.78
$ turnserver -a
$ turnserver --lt-cred-mech
=====================================
نام (NAME)
turnserver - یک پیادهسازی سرور رله TURN.
خلاصه دستور (SYNOPSIS)
$ turnserver [-n | -c <config-file> ] [flags] [ --userdb=<userdb-file> | --psql-userdb=<db-conn-string> | --mysql-userdb=<db-conn-string> | --mongo-userdb=<db-conn-string> | --redis-userdb=<db-conn-string> ] [-z | --no-auth | -a | --lt-cred-mech ] [options] $ turnserver -h
توضیحات (DESCRIPTION)
تنظیمات پرونده پیکربندی:
- -n
- از پرونده پیکربندی استفاده نکنید، فقط از پارامترهای خط فرمان استفاده کنید.
- -c
- نام پرونده پیکربندی (پیشفرض - turnserver.conf). قالب پرونده پیکربندی را میتوان در
پرونده نمونه ارائه شده examples/etc/turnserver.conf دید. نامهای طولانی گزینهها به عنوان نام موارد پیکربندی در پرونده استفاده میشوند. اگر مسیر مطلقی ارائه نشده باشد، پرونده در شاخههای زیر جستجو میشود:
- شاخه جاری
- زیرشاخه etc/ در شاخه جاری
- سطح بالاتر شاخه etc/
- /etc/
- /usr/local/etc/
- شاخه نصب /etc
- -b, --db, --userdb
- نام پرونده پایگاه داده کاربر SQLite (پیشفرض - /var/db/turndb یا /usr/local/var/db/turndb یا /var/lib/turn/turndb).
"host=<host> dbname=<dbname> user=<db-user> password=<db-user-password> connect_timeout=<seconds>" (برای Postgres نسخه 8.x یا جدیدتر).
یا:
"postgresql://username:password@hostname:port/databasename" (برای Postgres نسخه 9.x یا جدیدتر).
برای توضیحات و نمونههای بیشتر، پرونده docs/PostgreSQL.md را ببینید.
همچنین، برای مستندات کامل PostgreSQL به http://www.PostgreSQL.org مراجعه کنید.
- -M, --mysql-userdb
- رشته اتصال پایگاه داده کاربر برای MySQL یا MariaDB. این پایگاه داده میتواند برای سازوکار اعتبارنامههای بلندمدت استفاده شود،
"host=<host> dbname=<dbname> user=<db-user> password=<db-user-password> connect_timeout=<seconds> read_timeout=<seconds>"
برای توضیحات و نمونههای بیشتر، پرونده 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 را ببینید).
- --secret-key-file
- این مسیر فایلی است که حاوی کلید محرمانه رمزنگاری aes هنگام استفاده از رمزنگاری گذرواژه MySQL است. اگر میخواهید در رشته اتصال MySQL از گذرواژه به شکل رمزنگاریشده استفاده کنید،
- -J, --mongo-userdb
- رشته اتصال پایگاه داده کاربر برای MongoDB. این پایگاه داده میتواند برای سازوکار اعتبارنامههای بلندمدت استفاده شود،
"mongodb://username:password@host:port/database?options"
برای توضیحات و نمونههای بیشتر، پرونده docs/Mongo.md را ببینید.
همچنین، برای مستندات کامل MongoDB به http://docs.mongodb.org/manual/ مراجعه کنید.
- -N, --redis-userdb
- رشته اتصال به پایگاهداده کاربر برای Redis. از این پایگاهداده میتوان برای سازوکار اطلاعات کاربری بلندمدت (long-term credentials) استفاده کرد،
"ip=<ip-addr> dbname=<db-number> password=<db-password> connect_timeout=<seconds>"
اگر کارساز TURN با پشتیبانی از hiredis_ssl ساخته شده باشد، میتوان یک انتقال TLS را با افزودن "tls=true" به همراه یک فایل CA معمول درخواست کرد: "... tls=true ca=<ca-cert-file>". راستیآزمایی گواهی کارساز به طور پیشفرض فعال است؛ برای فهرست کامل کلیدهای TLS (شامل ca، capath، cert، clientkey، sni و verify) و مثالها، فایل docs/Redis.md را ببینید.
برای توضیحات بیشتر و مثالها فایل docs/Redis.md را ببینید.
همچنین برای مستندات کامل Redis به http://redis.io مراجعه کنید.
- -v, --verbose
- حالت پرگویی ملایم (Moderate verbose).
- -V, --Verbose
- حالت پرگویی مضاعف، بسیار آزاردهنده و توصیه نمیشود.
- -o, --daemon
- اجرای کارساز به عنوان دیمن (daemon).
--no-software-attribute منسوخ شده است (DEPRECATED). گزینه "--software-attribute" را ببینید.
- --software-attribute
- ارسال SOFTWARE_ATTRIBUTE روی پیامهایی که امکان داشتن آن را دارند. به طور پیشفرض غیرفعال است. معادل گزینه منسوخشده "--no-software-attribute false" است.
- -f, --fingerprint
- استفاده از اثر انگشت (fingerprints) در پیامهای TURN. اگر یک درخواست دریافتی شامل اثر انگشت باشد، کارساز TURN همواره اثر انگشت را به پیامهای این نشست
- -a, --lt-cred-mech
- استفاده از سازوکار اطلاعات کاربری بلندمدت (long-term credentials) (این گزینه برای کاربرد WebRTC مورد نیاز است).
- -z, --no-auth
- عدم استفاده از هرگونه سازوکار اطلاعات کاربری، مجاز شمردن دسترسی ناشناس. نقطه مقابل گزینههای -a و -A. زمانی که هیچ گزینهای در رابطه با
- --use-auth-secret
- پرچم TURN REST API. پرچمی که یک گزینه ویژه مجوز WebRTC را تعیین میکند
- --oauth
- پشتیبانی از احراز هویت oAuth، مطابق استاندارد شخص ثالث RFC 7635 برای STUN/TURN.
- --dh566
- استفاده از کلید از پیشتعریفشده ۵۶۶ بیتی DH TLS. اندازه پیشفرض کلید ۲۰۶۶ است.
- --dh1066
- استفاده از کلید از پیشتعریفشده ۱۰۶۶ بیتی DH TLS. اندازه پیشفرض کلید ۲۰۶۶ است.
- --tlsv1
- تنظیم TLSv1 به عنوان حداقل نسخه پشتیبانیشده پروتکل.
- --tlsv1_1
- تنظیم TLSv1.1 به عنوان حداقل نسخه پشتیبانیشده پروتکل.
- --no-tlsv1_2
- تنظیم TLSv1.3/DTLSv1.2 به عنوان حداقل نسخه پشتیبانیشده پروتکل.
- --no-udp
- عدم راهاندازی شنوندگان سرویسگیرنده UDP.
- --no-tcp
- عدم راهاندازی شنوندگان سرویسگیرنده TCP.
- --no-tls
- عدم راهاندازی شنوندگان سرویسگیرنده TLS.
- --no-dtls
- عدم راهاندازی شنوندگان سرویسگیرنده DTLS.
- --no-udp-relay
- عدم اجازه به نقاط پایانی بازپخش UDP تعریفشده در RFC 5766، تنها استفاده از نقاط پایانی بازپخش TCP تعریفشده در RFC 6062.
- --no-tcp-relay
- عدم اجازه به نقاط پایانی بازپخش TCP تعریفشده در RFC 6062، تنها استفاده از نقاط پایانی بازپخش UDP تعریفشده در RFC 5766.
- --no-stdout-log
- پرچم برای جلوگیری از پیامهای گزارش stdout. بهطور پیشفرض، تمام پیامهای گزارش هم به stdout و هم به
- --syslog
- با این پرچم، تمام گزارشها به گزارش سامانه (syslog) هدایت میشوند.
- --syslog-facility
- <value> تنظیم تسهیلات syslog برای پیامهای syslog. مقدار پیشفرض '' است.
- --simple-log
- این پرچم به این معنی است که هیچ چرخش فایل گزارشی صورت نخواهد گرفت، و نام فایل گزارش همانگونه که هست، بدون اضافه شدن PID و تاریخ ساخته خواهد شد.
- --log-min-level
- <level> تنها ثبت پیامهای گزارش در این سطح یا بالاتر. سطوح معتبر، از پرگوترین تا کمگوترین: debug (همهچیز؛ پیشفرض)، info، warning، error (تنها خطاها). یک سطح ناشناخته با یک هشدار نادیده گرفته میشود.
- --new-log-timestamp
- فعالسازی برچسب زمانی کامل ISO-8601 در تمام گزارشها.
- --new-log-timestamp-format
- <format> تنظیم قالب برچسب زمانی (در قالب strftime(1))
- --log-binding
- ثبت درخواست پیوند (binding) در STUN. اکنون برای جلوگیری از حملات DoS به طور پیشفرض غیرفعال است.
- --secure-stun
- الزام به احراز هویت برای درخواست STUN Binding. بهطور پیشفرض، کلاینتها اجازه دسترسی ناشناس به قابلیت STUN Binding را دارند.
- -S, --stun-only
- اجرا تنها به عنوان سرور STUN؛ تمام درخواستهای TURN نادیده گرفته خواهند شد. گزینهای برای غیرفعالسازی قابلیت TURN، تنها درخواستهای STUN پردازش خواهند شد.
- --no-stun
- اجرا تنها به عنوان سرور TURN؛ تمام درخواستهای STUN نادیده گرفته خواهند شد. گزینهای برای غیرفعالسازی قابلیت STUN، تنها درخواستهای TURN پردازش خواهند شد.
- --allow-loopback-peers
- اجازه دادن به همتایان روی نشانیهای لوپبک (127.x.x.x و ::1). تنها برای آزمایش در محیط توسعه مجاز است!
- --no-multicast-peers
- عدم اجازه به همتایان روی نشانیهای برودکست شناختهشده (224.0.0.0 و بالاتر، و *:FFXX).
- --mobility
- پشتیبانی از مشخصات پویایی با MICE) ICE).
- --cli
- فعالسازی پشتیبانی از CLI. بهطور پیشفرض همواره خاموش است. همچنین گزینههای --cli-ip و --cli-port را ببینید.
- --no-cli
- غیرفعالسازی پشتیبانی از CLI. از آنجا که CLI بهطور پیشفرض خاموش است، این پرچم تنها برای لغو تنظیم "cli" از
- --server-relay
- رله سرور. گزینهای غیر استاندارد و خطرناک. تنها برای برنامههایی که میخواهیم برنامههای
- --udp-self-balance
- (تنها برای لینوکسهای قدیمیتر توصیه میشود) توزیع بار خودکار ترافیک UDP روی سرورهای کمکی
- --check-origin-consistency
- پرچمی که بررسی سازگاری مبدا (origin consistency) را تنظیم میکند: در طول نشست، همه درخواستها باید دارای یک مقدار
- --drop-invalid-packets
- دور انداختن زودهنگام بستههای نامعتبر. بهطور پیشفرض فعال است.
- --drop-invalid-packets-log
- ثبت لاگ بستههای نامعتبر. رفتار پیشفرض ثبت نکردن بستههای نامعتبر است.
- --udp-recvmmsg
- دریافت دستهای UDP ویژه لینوکس از طریق ()recvmmsg روی سوکتهای اشتراکی fan-in (شنونده کلاینت و، با --multiplex-peer، سوکت رله بهازای هر ترد). بهطور پیشفرض در لینوکس فعال است؛ مقدار false=--udp-recvmmsg
- --udp-recvmmsg-log
- ثبت لاگ آمار اشغال دستهای recvmmsg در لینوکس هر ۱۰ ثانیه.
- --udp-gso
- فعالسازی Linux UDP-GSO (پیام کمکی UDP_SEGMENT cmsg) در مسیر ارسال رله. هنگامی که یک دسته sendmmsg دارای مقصد و اندازه بخش یکسان باشد، یک
- --multiplex-peer
- ویژه لینوکس. فعالسازی حالت رله چندتایی سمت همتا (غیر استاندارد، اختیاری). جایگزینی بایند پورت رله بهازای
- --multiplex-peer-port <port>
- ویژه لینوکس. پورت پایه UDP برای سوکتهای رله multiplex-peer (پیشفرض: 3480، محدوده معتبر ۱-۶۵۰۰۰). ترد i به
- --respond-http-unsupported
- بازگرداندن پاسخ HTTP با کد وضعیت ۴۰۰ به اتصالات HTTP برقرار شده با پورتهایی که از HTTP پشتیبانی نمیکنند. رفتار پیشفرض
- --prometheus
- فعالسازی معیارهای پرومتئوس. بهطور پیشفرض غیرفعال است. روی پورت 9641 تحت مسیر metrics/ گوش فرا میدهد،
- --prometheus-username-labels
- فعالسازی برچسبگذاری معیارهای ترافیک پرومتئوس با نامهای کاربری کلاینت. برچسبگذاری با نامهای کاربری کلاینت
- --prometheus-port
- پورت شنونده پرومتئوس (پیشفرض: 9641).
- --prometheus-address
- <address> نشانی شنود پرومتئوس (پیشفرض: any).
- --prometheus-path
- <path> مسیر ارائه پرومتئوس (پیشفرض: /metrics).
- --version
- چاپ نسخه و خروج.
- -h
- راهنما.
گزینههای دارای مقدار (Options with values):
- --stale-nonce[=<value>]
- استفاده از امنیت بیشتر با مقدار نانس (nonce) دارای طول عمر محدود، بر حسب ثانیه (پیشفرض ۶۰۰ ثانیه).
- --max-allocate-lifetime
- تنظیم بیشینه مقدار طول عمر تخصیص (allocation). پیشفرض ۳۶۰۰ ثانیه.
- --channel-lifetime
- تنظیم طول عمر پیوند کانال (channel binding)، پیشفرض ۶۰۰ ثانیه. این مقدار برای مصارف عملیاتی نباید تغییر کند.
- --permission-lifetime
- تنظیم مقدار برای طول عمر مجوز (permission). پیشفرض ۳۰۰ ثانیه.
- -d, --listening-device
- دستگاه رابط شنونده (listener interface device). (توصیه نمیشود. قابلیت اختیاری، فقط لینوکس).
- -L, --listening-ip
- نشانی IP شنونده سرور رله. میتوان چندین شنونده را مشخص کرد، برای نمونه:
- -p, --listening-port
- درگاه شنونده TURN برای شنوندههای UDP و TCP (پیشفرض: ۳۴۷۸). نکته: در عمل، نشستهای TLS و DTLS میتوانند به درگاه(های) TCP و UDP
- --tls-listening-port
- درگاه شنونده TURN برای شنوندههای TLS و DTLS (پیشفرض: ۵۳۴۹). نکته: در عمل، نشستهای TCP و UDP «ساده» میتوانند به درگاه(های) TLS و DTLS
- --alt-listening-port
- درگاه شنود جایگزین برای شنوندههای UDP و TCP؛ مقدار پیشفرض (یا صفر) به معنای «درگاه شنود به علاوه یک» است.
- --alt-tls-listening-port
- درگاه شنود جایگزین برای پروتکلهای TLS و DTLS. مقدار پیشفرض (یا صفر) به معنای «درگاه شنود TLS به علاوه یک» است.
- --tcp-proxy-port
- پشتیبانی از اتصالهای توزیعکننده بار TCP روی این درگاه. توزیعکننده بار باید از پروتکل دودویی proxy استفاده کند.
- --aux-server
- نقطه پایانی شنود سرور کمکی STUN/TURN (Auxiliary STUN/TURN server). سرورهای کمکی تقریباً از تمام قابلیتهای TURN و STUN برخوردارند.
- 1)
- سرورهای کمکی درگاههای جایگزین ندارند و از قابلیتهای STUN RFC 5780 پشتیبانی نمیکنند (CHANGE REQUEST).
- 2)
- سرورهای
کمکی
همچنین
هیچگاه
پاسخ ALTERNATIVE-SERVER
بازنمیگردانند.
قالبهای معتبر عبارتند از 1.2.3.4:5555 برای IPv4 و [1:2::3:4]:5555 برای IPv6. ممکن است چندین گزینه aux-server وجود داشته باشد، که هر یک برای شنود به درخواستهای کلاینت استفاده خواهد شد.
- -i, --relay-device
- دستگاه رابط رله برای سوکتهای رله (توصیه نمیشود. اختیاری، فقط لینوکس).
- -E, --relay-ip
- نشانی رله (نشانی IP محلی که برای بازپخش بستهها به
- -X, --external-ip
- نگاشت نشانی عمومی/خصوصی سرور TURN، در صورتی که سرور پشت NAT قرار دارد. در این شرایط، اگر -X به فرم "-X <ip>" استفاده شود، آن نشانی IP به عنوان
- -m, --relay-threads
- تعداد ریسههای رله برای مدیریت اتصالهای برقرارشده (علاوه بر ریسه احراز هویت و ریسه شنونده).
- --cpus
- <number> بازنویسی تشخیص تعداد CPU سیستم. استفاده از این عدد به جای تعداد CPU شناساییشده خودکار. مفید در محیطهای مجازیسازیشده
- --min-port
- حد پایین بازه درگاه UDP برای تخصیص نقاط پایانی بازپخش (relay endpoints).
- --max-port
- حد بالای بازه درگاه UDP برای تخصیص نقاط پایانی بازپخش (relay endpoints).
- --sock-buf-size
- تنظیم اندازه بافر سوکت به یک مقدار جدید (به بایت).
- -u, --user
- حساب کاربری اعتبارنامههای سازوکار امنیتی بلندمدت، به صورت جداشده با دونقطه در قالب username:key.
- -r, --realm
- حوزه (realm) پیشفرض مورد استفاده برای کاربران هنگامی که هیچ رابطه صریح مبدأ/حوزه در پایگاه داده یافت نشود، یا اگر کارساز TURN
- -C, --rest-api-separator
- نماد (نویسه) جداکننده مهرزمانی/نامکاربری در TURN REST API. مقدار پیشفرض : است.
- -q, --user-quota
- سهمیه تخصیصهای بهازای هر کاربر: تعداد تخصیصهای همزمانی که یک کاربر میتواند ایجاد کند. این گزینه همچنین میتواند
- -Q, --total-quota
- سهمیه کل تخصیصها: محدودیت سراسری روی تخصیصهای همزمان. این گزینه همچنین میتواند از طریق پایگاه داده برای یک حوزه مشخص تنظیم شود.
- -s, --max-bps
- حداکثر پهنای باند بایتبرثانیه که یک نشست TURN مجاز به مدیریت آن است (جریانهای شبکه ورودی و خروجی جداگانه مدیریت میشوند). هر چیزی بیش از
- -B, --bps-capacity
- حداکثر ظرفیت کارساز. مجموع پهنای باند بایتبرثانیه که کارساز TURN مجاز است برای
- --static-auth-secret
- مقدار راز احراز هویت ایستا (یک رشته) تنها برای TURN REST API. اگر تنظیم نشود، کارساز turn تلاش خواهد کرد تا از مقدار پویا
- --no-auth-pings
- غیرفعالسازی بررسیهای سلامت دورهای جدولهای راز احراز هویت «پویا».
- --no-dynamic-ip-list
- عدم استفاده از فهرست پویای نشانیهای IP همتای مجاز/غیرمجاز.
- --no-dynamic-realms
- عدم استفاده از تخصیص پویا و گزینههای حوزه (realm).
- --server-name
- نام کارساز مورد استفاده برای اهداف احراز هویت oAuth.
- --cert
- پرونده گواهی، با قالب PEM. همان قواعد جستجوی پرونده که برای پرونده پیکربندی به کار میرود در اینجا نیز اعمال
- --pkey
- پرونده کلید خصوصی، با قالب PEM. همان قواعد جستجوی پرونده که برای پرونده پیکربندی به کار میرود در اینجا نیز اعمال
- --raw-public-keys
- پشتیبانی از کلیدهای عمومی خام (Raw public keys). کلید روشن/خاموش برای RFC-7250 موسوم به کلیدهای عمومی خام.
- --pkey-pwd
- اگر پرونده کلید خصوصی رمزنگاری شده باشد، این گذرواژه استفاده میشود.
- --cipher-list
- فهرست رمزهای مجاز OpenSSL برای اتصالات TLS/DTLS. مقدار پیشفرض برای نسخههای TLS/DTLS تا TLSv1.2/DTLSv1.2 برابر "DEFAULT" است،
- --CA-file
- پرونده CA در قالب OpenSSL. کارساز TURN را ملزم به تأیید گواهیهای SSL کلاینت میکند.
- --ec-curve-name
- نام خم برای رمزهای EC، در صورت پشتیبانی توسط کتابخانه OpenSSL (در TLS و DTLS). در صورتی که نسخه قبل از OpenSSL 1.0.2
- --dh-file
- استفاده از کلید سفارشی DH TLS، ذخیرهشده با قالب PEM در پرونده. پرچمهای --dh566 و --dh1066 هنگامی که کلید DH از یک پرونده گرفته شود نادیده گرفته میشوند.
- -l, --log-file
- گزینه تنظیم مسیر کامل پرونده گزارش (log file). بهطور پیشفرض، turnserver تلاش میکند پرونده گزارش را در شاخههای
- --alternate-server
- گزینه تنظیم حالت "تغییر مسیر" (redirection). مقدار این گزینه نشانی کارساز جایگزین برای سرویس UDP و TCP به شکل
- --tls-alternate-server
- گزینه تنظیم کارساز جایگزین برای سرویسهای TLS و DTLS به شکل <ip>:<port>. در صورت حذف شماره درگاه، درگاه پیشفرض
- -O, --redis-statsdb
- رشته اتصال به پایگاهداده وضعیت و آمار Redis در صورت استفاده (پیشفرض - خالی، هیچ پایگاهداده آمار Redis استفاده نمیشود). این پایگاهداده اطلاعات وضعیت تخصیصها را نگه میدارد، و میتواند
- --max-allocate-timeout
- حداکثر زمان، بر حسب ثانیه، مجاز برای برقراری کامل تخصیص. پیشفرض ۶۰ ثانیه است.
- --drain-min-allocations
- در حالت تخلیه (drain mode، با دریافت SIGUSR1)، به محض آنکه تعداد تخصیصهای فعال به این مقدار یا کمتر از آن کاهش یابد، فرایند متوقف میشود. پیشفرض ۰ است (صبر تا زمانی که تمام تخصیصها از بین بروند).
--allowed-peer-ip=<IPaddr[-IPaddr]> گزینههای مسدودسازی یا مجاز کردن نشانیهای IP یا محدودههای خاصی از نشانیهای IP. اگر یک نشانی IP هم به عنوان مجاز و هم مسدود مشخص شده باشد،
- 1)
- اگر هیچ قاعدهای برای یک نشانی وجود نداشته باشد، مجاز است؛
- 2)
- اگر یک قاعده "مجاز" وجود داشته باشد که با نشانی مطابقت کند، آن نشانی مجاز است - بدون استثنا؛
- 3)
- اگر هیچ قاعده "مجاز" مطابق با نشانی نباشد، و قاعده "مسدود" مطابق با نشانی وجود داشته باشد، مسدود میشود.
- --pidfile
- نام پرونده برای ذخیره pid فرایند. پیشفرض /var/run/turnserver.pid است (در صورت استفاده از حساب کاربری ریشه/ابرکاربر) یا
- --acme-redirect
- <URL> تغییر مسیر درخواستهای ACME/RFC8555 (مانند چالش Let's Encrypt)، یعنی درخواستهای HTTP GET منطبق با '^/.well-known/acme-challenge/(.*)'
- --proc-user
- نام کاربری برای اجرای فرایند. پس از مقداردهی اولیه، فرایند turnserver تلاش خواهد کرد شناسه کاربر فعلی (user ID) را به آن کاربر تغییر دهد.
- --proc-group
- نام گروه برای اجرای فرایند. پس از مقداردهی اولیه، فرایند turnserver تلاش خواهد کرد شناسه گروه فعلی (group ID) را به آن گروه تغییر دهد.
- -K, --keep-address-family
- منسوخ شده و به نفع --allocation-default-address-family حذف خواهد شد!! کارساز TURN خانواده نشانی را بر اساس خانواده نشانی ارتباطی
- -A --allocation-default-address-family=<ipv4|ipv6|keep>
- پیشفرض IPv4 است کارساز TURN خانواده نشانی را بر اساس خانواده نشانی درخواستی کارگیر TURN تخصیص میدهد.
- --cli-ip
- نشانی IP سیستم محلی برای استفاده در رابط مدیریتی CLI. فرایند turnserver برای مدیریت میتواند با telnet در این نشانی IP
- --cli-port
- درگاه شنود رابط مدیریتی CLI. پیشفرض ۵۷۶۶ است.
- --cli-password
- گذرواژه دسترسی CLI. پیشفرض خالی است (بدون گذرواژه). به دلایل امنیتی، توصیه میشود از شکل رمزنگاریشده
- --cli-max-output-sessions
- حداکثر تعداد نشستهای خروجی در دستور CLI به نام ps. این مقدار میتواند در زمان اجرا در CLI تغییر یابد. مقدار پیشفرض ۲۵۶ است.
- --web-admin
- فعالسازی پشتیبانی از Turn Web-admin. بهطور پیشفرض غیرفعال است.
- --web-admin-ip=<IP>
- نشانی IP سیستم محلی برای استفاده به عنوان نقطه پایانی کارساز Web-admin. مقدار پیشفرض 127.0.0.1 است.
- --web-admin-port=<port>
- درگاه سرور وب-ادمین (web-admin). پیشفرض 8080 است.
- --web-admin-listen-on-workers
- فعالسازی گوش دادن سرور وب-ادمین روی درگاههای STUN/TURN متعلق به کارگران (workers) STUN/TURN. بهطور پیشفرض به دلایل امنیتی غیرفعال است!
- --rfc5780
- فعالسازی RFC5780 (کشف رفتار NAT). در ابتدا، اگر بیش از یک نشانی شنونده از یک
- --no-rfc5780
- منسوخ شده و اکنون رفتار پیشفرض است. --rfc5780 را ببینید.
- --stun-backward-compatibility
- افزودن صفت منسوخشده MAPPED-ADDRESS به پاسخهای اتصال STUN، علاوه بر صفت XOR-MAPPED-ADDRESS که همیشه ارسال میشود. تنها برای کلاینتهایی لازم است که قادر به تجزیه XOR-MAPPED-ADDRESS نیستند. اکیداً توصیه میشود این گزینه را خاموش نگه دارید تا ضریب تقویت در پاسخهای اتصال STUN کاهش یابد.
- --rfc3489-compatibility
- منسوخ شده. فعالسازی مدیریت درخواستهای اتصال منسوخ RFC 3489 («STUN کلاسیک»)، که فاقد کوکی جادویی (magic cookie) هستند. سند RFC 5389 این سازوکارها را منسوخ کرد و RFC 8489 آنها را کاملاً کنار گذاشت. این گزینه برای حذف در انتشار اصلی بعدی برنامهریزی شده و هیچ جایگزینی ندارد.
- پیش از ایجاد این گزینه، مسیر درخواست RFC 3489 توسط --stun-backward-compatibility کنترل میشد. مدیرانی که آن گزینه را برای پاسخگویی به کلاینتهای STUN کلاسیک تنظیم میکردند اکنون باید --rfc3489-compatibility را به جای آن، یا هر دو گزینه را برای حفظ دقیق رفتار قبلی تنظیم کنند.
- فعالسازی محدودسازی نرخ پاسخهای 401 Unauthorized در پروتکل UDP بهازای هر منبع. این امر حملات بازتابی و تقویتی را که نشانی منبع قربانی را جعل میکنند تا چالشهای احراز هویت را دریافت کنند کاهش میدهد. بهطور پیشفرض غیرفعال است.
- حداکثر تعداد پاسخهای 401 Unauthorized در پروتکل UDP که بهازای هر IP منبع در هر ثانیه ارسال میشود. مقدار پیشفرض 10 است.
- --stateless-nonce
- صدور نانسهای (nonce) چالش 401/438 بهصورت کوکیهای مهرزمانی احرازهویتشده (زمان صدور به همراه یک HMAC روی نشانی کلاینت، کلیدخورده با یک راز اختصاصیِ هر فرایند) بهجای ذخیره یک نانس تصادفی در وضعیت نشست بهازای هر کلاینت. در نتیجه درخواستهای UDP احرازهویتنشده بدون تخصیص نشست پاسخ داده میشوند، که حافظه سرور را در برابر سیلابهای ناشی از نشانیهای منبع جعلیِ پیامهای از نظر ساختاری معتبر STUN محدود نگه میدارد. سازگار با کلاینتهای استاندارد TURN در سطح شبکه (Wire-compatible). بهطور پیشفرض فعال است؛ با --stateless-nonce=false غیرفعال میشود، که نانس تصادفی ذخیرهشده و چالش ۱۶ نویسهای قدیمی را به جای چالش ۲۴ نویسهای بازمیگرداند.
- --stateless-nonce-secret=<secret>
- مشتق کردن کلید امضای stateless-nonce از این راز بهجای یک کلید تصادفی بهازای هر فرایند (مستلزم فعال بودن --stateless-nonce). سرورهایی که این راز را به اشتراک میگذارند نانسهای یکدیگر را اعتبارسنجی میکنند، بنابراین چالشها پس از راهاندازی مجدد باقی میمانند و در سراسر یک ناوگان متوازنشده (load-balanced) کار میکنند. از یک رشته طولانی با انتروپی بالا استفاده کنید و ساعتهای ناوگان را از طریق NTP همگام نگه دارید.
==================================
توازن بار و تنظیم کارایی (LOAD BALANCE AND PERFORMANCE TUNING)
این موضوع در صفحه ویکی پوشش داده شده است:
https://github.com/coturn/coturn/wiki/turn_performance_and_load_balance
===================================
کاربرد WEBRTC (WEBRTC USAGE)
این مجموعهای از یادداشتها برای کاربران WebRTC است:
- 1)
- فناوری WebRTC از سازوکار احراز هویت بلندمدت (long-term) استفاده میکند، بنابراین باید از گزینه -a (یا --lt-cred-mech) استفاده کنید. رله کردن WebRTC با دسترسی ناشناس کار نخواهد کرد. با گزینه -a، تنظیم قلمرو (realm) پیشفرض (گزینه -r) را فراموش نکنید. همچنین باید حسابهای کاربری را تنظیم کنید، که برای این کار گزینههای متعددی دارید:
الف) گزینههای خط فرمان (-u).
ب) یک جدول پایگاه داده (SQLite یا PostgreSQL یا MySQL یا MongoDB). باید کلیدها را با ابزار turnadmin تنظیم کنید (مستندات و صفحه مان turnadmin را ببینید). نمیتوانید از گذرواژههای متنی آشکار در پایگاه داده استفاده کنید.
ج) جفت(های) کلید/مقدار Redis، اگر از Redis استفاده شود. میتوانید از کلیدها یا گذرواژههای متنی آشکار در Redis استفاده کنید؛ فایل turndb/testredisdbsetup.sh را ببینید.
د) همچنین میتوانید از TURN REST API استفاده کنید. نیاز به راز(های) مشترک تنظیمشده خواهید داشت، چه از طریق گزینه خط فرمان، چه فایل پیکربندی، یا از طریق جدول پایگاه داده یا جفتهای کلید/مقدار Redis.
- 2)
- معمولاً WebRTC از اثرانگشتگذاری (-f) استفاده میکند.
- 3)
- گزینه -v ممکن است برای مشاهده کلاینتهای متصل مناسب باشد.
- 4)
- اگر سرور TURN خود را پشت یک NAT اجرا میکنید، گزینه -X مورد نیاز است.
- 5)
- اگر میخواهید محدوده شماره درگاههای نقاط پایانی رله را محدود کنید، ممکن است به گزینههای --min-port و --max-port نیاز باشد.
===================================
رابط برنامهنویسی کاربردی رست ترن (TURN REST API)
در WebRTC، مرورگر اطلاعات اتصال TURN را از وبسرور دریافت میکند. این اطلاعات حساس و امنیتی است - زیرا شامل اعتبارنامههای لازم برای TURN میباشد. از آنجا که این اعتبارنامهها از طریق شبکههای عمومی منتقل میشوند، با یک رخنه امنیتی بالقوه مواجه هستیم.
اگر ناچار به انتقال اطلاعات باارزش در شبکه عمومی باشیم، این اطلاعات باید طول عمر محدودی داشته باشد. بدین ترتیب کسی که این اطلاعات را بدون مجوز به دست آورد، تنها قادر به وارد کردن آسیبی محدود خواهد بود.
ایده رابط برنامهنویسی کاربردی TURN REST - اعتبارنامههای دارای محدودیت زمانی TURN - بدین شکل شکل گرفت. این سازوکار امنیتی بر پایه سازوکار اعتبارنامههای بلندمدت استوار است. ایده اصلی REST API این است که وبسرور اعتبارنامهها را در اختیار کلاینت قرار میدهد، اما این اعتبارنامهها تنها برای مدت محدودی توسط برنامهای که قصد برقراری اتصال به سرور TURN را دارد قابل استفاده هستند.
سازوکار «کلاسیک» اعتبارنامههای بلندمدت (LTCM) در اینجا شرح داده شده است:
http://tools.ietf.org/html/rfc5389#section-10.2
http://tools.ietf.org/html/rfc5389#section-15.4
برای احراز هویت، هر کاربر باید دو چیز را بداند: نام کاربری (username) و گذرواژه (password). به صورت اختیاری، کاربر باید مقدار ORIGIN را نیز ارائه دهد تا سرور بتواند قلمرو (realm) مورد استفاده برای کاربر را تشخیص دهد. مقادیر nonce و realm توسط سرور TURN ارائه میشوند. اما LTCM چیزی درباره ماهیت و ماندگاری نام کاربری و گذرواژه بیان نمیکند؛ و این همان نقطهای است که توسط REST API بهرهبرداری میشود.
در TURN REST API، هیچ گذرواژه دائمی برای کاربران وجود ندارد. کاربر تنها یک نام کاربری دارد. گذرواژه همواره موقت است و هنگام دسترسی کاربر به صفحه WebRTC، بر حسب تقاضا توسط وبسرور تولید میشود. در واقع، یک نام کاربری موقت و تنها مخصوص یک نشست نیز در اختیار کاربر قرار میگیرد.
کاربر موقت به صورت زیر ایجاد میشود:
temporary-username="timestamp" + ":" + "username"
که در آن username همان نام کاربری پایدار است، و قالب timestamp صرفاً ثانیههای سپریشده از سال ۱۹۷۰ است - همان مقداری که تابع time(NULL) بازمیگرداند.
گذرواژه موقت از طریق تابع HMAC-SHA1 بر روی نام کاربری موقت، با استفاده از راز مشترک (shared secret) به عنوان کلید HMAC به دست آمده و سپس نتیجه کدگذاری میشود:
temporary-password = base64_encode(hmac-sha1(shared-secret, temporary-username))
هم سرور TURN و هم وبسرور از یک راز مشترک یکسان آگاه هستند. نحوه توزیع راز مشترک میان موجودیتهای درگیر، به جزئیات استقرار WebRTC واگذار شده است - این موضوع فراتر از محدوده TURN REST API است.
بنابراین، از یک مهرزمانی (timestamp) برای محاسبه گذرواژه موقت استفاده میشود، و این مهرزمانی را میتوان از نام کاربری موقت بازیابی کرد. این اطلاعات ارزشمند است، اما تا زمانی که مهرزمانی منقضی نشده باشد تنها موقتی است. بدون دانستن راز مشترک، امکان تولید گذرواژه موقت جدید وجود ندارد.
تمام این موارد به صورت رسمی در سند TURN REST API جاستین اوبرتی (Justin Uberti) شرح داده شده است که از طریق پیوند «TURN REST API» در صفحه پروژه TURN Server به نشانی https://github.com/coturn/coturn/ قابل دسترسی است.
هنگامی که
نام کاربری
و گذرواژه
موقت توسط
برنامه
کلاینت
(مرورگر)
دریافت شد،
باقی مراحل
همان
سازوکار
«کلاسیک»
اعتبارنامههای
بلندمدت
است. برای
توسعهدهندگان،
در زیر آن را
گامبهگام
شرح
میدهیم:
- یک کلاینت جدید TURN دستور درخواستی را به سرور TURN ارسال میکند. به صورت اختیاری، فیلد ORIGIN را نیز به آن میافزاید.
- سرور TURN متوجه میشود که این یک کلاینت جدید است و پیام احراز هویت نشده است.
- سرور TURN یک رشته nonce تصادفی تولید میکند، و خطای 401 را همراه با nonce و realm به کلاینت بازمیگرداند. اگر فیلد ORIGIN در درخواست کلاینت وجود داشته باشد، ممکن است بر مقدار realm که سرور برای کلاینت برمیگزیند اثر بگذارد.
- کلاینت خطای 401 را مشاهده کرده و دو مقدار را از پاسخ خطا استخراج میکند: nonce و realm.
- کلاینت از
username، realm و password برای
تولید یک
کلید
استفاده
میکند:
key = MD5(username ":" realm ":" SASLprep(password)) (SASLprep is described here: http://tools.ietf.org/html/rfc4013)
- کلاینت درخواست جدیدی تشکیل میدهد، username، realm و nonce را به درخواست اضافه میکند. سپس کلاینت فیلد یکپارچگی (integrity) را محاسبه کرده و به درخواست میافزاید. این پیچیدهترین بخش فرایند است و در پایان بخش 15.4 شرح داده شده است: http://tools.ietf.org/html/rfc5389#section-15.4
- کلاینت، به صورت اختیاری، فیلد fingerprint را میافزاید. این کار نیز ممکن است رویهای پیچیده باشد که در بخش 15.5 همان سند شرح داده شده است. WebRTC معمولاً از پیامهای انگشتنگاریشده (fingerprinted) در TURN استفاده میکند.
- سرور TURN درخواست را دریافت کرده، username را میخواند.
- سپس سرور TURN بررسی میکند که nonce و realm موجود در درخواست معتبر باشند.
- سپس سرور TURN کلید را محاسبه میکند.
- سپس سرور TURN فیلد یکپارچگی (integrity) را محاسبه میکند.
- سپس سرور TURN فیلد یکپارچگی محاسبهشده را با فیلد دریافتشده مقایسه میکند - آنها باید یکسان باشند. اگر فیلدهای یکپارچگی با یکدیگر تفاوت داشته باشند، درخواست رد میشود.
در ارتباطات بعدی، سرور و کلاینت همواره همان گذرواژه یکسان را فرض خواهند کرد - گذرواژه اولیه به پارامتر نشست تبدیل شده و هرگز منقضی نمیشود. بنابراین تا زمانی که نشست معتبر و منقضینشده باشد، گذرواژه تغییر نمیکند. در نتیجه، اگر نشست به درستی حفظ شود، حتی در صورت تغییر گذرواژه کاربر (در پایگاهداده)، نشست ممکن است تا ابد ادامه یابد. نشست صرفاً از گذرواژه قدیمی استفاده میکند. به محض قطع ارتباط نشست، کلاینت برای اتصال مجدد باید از گذرواژه جدید استفاده کند (در صورتی که گذرواژه تغییر کرده باشد).
نمونهای که در آن راز مشترک جدید هر ساعت توسط دستگاه سرور TURN تولید شده و سپس از راه دور به وبسرور ارائه میگردد، در اسکریپت examples/scripts/restapi/shared_secret_maintainer.pl آورده شده است.
نکته بسیار مهم این است که nonce باید کاملاً تصادفی باشد و برای کلاینتها و نشستهای مختلف متفاوت باشد.
===================================
پایگاههای داده (DATABASES)
برای پایگاه داده کاربران، turnserver گزینههای زیر را ارائه میدهد:
- 1)
- کاربران میتوانند در خط فرمان با گزینههای متعدد -u یا --user تعیین شوند. بدیهی است که از این طریق تنها شمار اندکی از کاربران را میتوان تعریف کرد و اعتبارنامههای آنها در طول دوره اجرای فرایند turnserver ثابت باقی میماند.
- 2)
- کاربران را میتوان در پایگاه داده SQLite ذخیره کرد. پرونده پایگاه داده پیشفرض SQLite مسیر /var/db/turndb یا /usr/local/var/db/turndb یا /var/lib/turn/turndb است.
- 3)
- در صورتی که turnserver با پشتیبانی از PostgreSQL کامپایل شده باشد، کاربران را میتوان در پایگاه داده PostgreSQL ذخیره کرد. هربار که turnserver اعتبارنامههای کاربر را بررسی میکند، پایگاه داده را میخواند (البته به صورت ناهمگام، تا جریان جاری بستهها به هیچ وجه با تاخیر مواجه نشود)، بنابراین هر تغییری در محتوای پایگاه داده بیدرنگ توسط turnserver قابل مشاهده است. اگر به بهترین مقیاسپذیری نیاز دارید، این روش مناسب است. طرحواره (schema) پایگاه داده را میتوان در پرونده schema.sql یافت. برای اعتبارنامههای بلندمدت، باید «کلیدها» (keys) را برای کاربران تنظیم کنید؛ این «کلیدها» توسط ابزار turnadmin تولید میشوند. برای تولید کلید، به نام کاربری، گذرواژه و realm نیاز دارید. همه کاربران در پایگاه داده باید از یک مقدار realm یکسان استفاده کنند؛ اگر در آینده تصمیم به تغییر نام realm بگیرید، باید تمام کلیدهای کاربران را دوباره تولید کنید (این کار را میتوان در یک اسکریپت دستهای انجام داد). برای نمونه به پرونده turndb/testsqldbsetup.sql نگاه کنید.
- 4)
- همین موضوع برای پایگاه داده MySQL نیز صادق است. پرونده طرحواره یکسان قابل استفاده است. ملاحظات مشابهی نیز اعمال میشود.
- 5)
- همین موضوع برای پایگاه داده Redis نیز صدق میکند، اما پایگاه داده Redis طرحواره متفاوتی دارد - که میتوان آن را (به شکل توضیحات) در schema.userdb.redis یافت. همچنین در Redis میتوانید هم «کلیدها» و هم گذرواژههای خام (open passwords) را (برای اعتبارنامههای بلندمدت) ذخیره کنید - گزینه «گذرواژه خام» امنیت کمتری دارد اما برای محیطهای با امنیت پایین راحتتر است. برای نمونه به پرونده turndb/testredisdbsetup.sh نگاه کنید.
- 6)
- اگر از پایگاه داده استفاده شود، کاربران را میتوان به چندین realm مستقل تقسیم کرد. هر realm را میتوان به طور جداگانه مدیریت کرد، و هر realm میتواند مجموعه کاربران خاص خود و گزینههای کارایی اختصاصی خود (max-bps، user-quota، total-quota) را داشته باشد.
- 7)
- اگر از MongoDB استفاده کنید، پایگاه داده به طور خودکار برای شما راهاندازی خواهد شد.
- 8)
- البته، turnserver میتواند در حالت غیرامن استفاده شود، به گونهای که کاربران اجازه داشته باشند نشستها را به صورت ناشناس برقرار کنند. اما در بیشتر موارد (مانند WebRTC) این روش کار نخواهد کرد.
برای پایگاه داده وضعیت و آمار، دو انتخاب وجود دارد:
- 1)
- سادهترین انتخاب عدم استفاده از آن است. گزینه --redis-statsdb را تنظیم نکنید، و این قابلیت به سادگی نادیده گرفته خواهد شد.
- 2)
- اگر تصمیم به استفاده از آن دارید، گزینه --redis-statsdb را تنظیم کنید. این میتواند همان پایگاه داده تعیینشده در گزینه --redis-userdb باشد، یا پایگاه داده متفاوتی باشد. ممکن است به دلایل امنیتی یا راحتی بخواهید از پایگاه داده متفاوتی استفاده کنید. همچنین میتوانید از سامانههای مدیریت پایگاه داده متفاوتی برای پایگاه داده کاربران و پایگاه داده وضعیت و آمار استفاده کنید. برای نمونه، میتوانید از MySQL به عنوان پایگاه داده کاربران، و از Redis برای آمار استفاده کنید. یا از Redis برای هر دو استفاده نمایید.
بنابراین، ما ۶ انتخاب برای مدیریت کاربران، و ۲ انتخاب برای مدیریت آمار داریم. این دو کاملاً مستقل از یکدیگرند. پس در کل ۶*۲=۱۲ روش برای مدیریت اطلاعات ماندگار در اختیار دارید؛ هرکدام را که راحتتر هستید برگزینید.
نیازی نیست اطلاعات پایگاه داده را «دستی» مدیریت کنید - برنامه turnadmin میتواند همه چیز را برای شما مدیریت کند. برای PostgreSQL و MySQL تنها کافی است یک پایگاه داده خالی با اسکریپت SQL به نام schema.sql بسازید. در مورد Redis، حتی نیازی به این کار نیز ندارید - تنها turnadmin را اجرا کنید تا کاربران را برای شما تنظیم کند (به راهنماهای turnadmin مراجعه کنید). اگر از SQLite استفاده میکنید، turnserver یا turnadmin در زمان راهاندازی، پایگاه داده خالی را برای شما مقداردهی اولیه خواهند کرد. فرایند نصب سرور TURN یک پایگاه داده خالی مقداردهیشده SQLite را در مکان پیشفرض (/var/db/turndb یا /usr/local/var/db/turndb یا /var/lib/turn/turndb، بسته به سیستم) ایجاد میکند.
=================================
ALPN (مذاکره پروتکل لایه کاربرد)
سرور از ALPNهای "stun.turn" و "stun.nat-discovery" در صورت کامپایل با OpenSSL 1.0.2 یا جدیدتر پشتیبانی میکند. اگر سرور پیام ClientHello از نوع TLS/DTLS را دریافت کند که شامل یک یا هر دوی این ALPNها باشد، نخستین برچسب *stun. را برمیگزیند و آن را (در ServerHello) درون فیلد افزونه ALPN بازمیفرستد. در صورتی که هیچ برچسب *stun. یافت نشود، سرور اطلاعات ALPN را در ServerHello نمیگنجاند.
=================================
کتابخانهها (LIBRARIES)
در زیرشاخه lib/، فرایند ساخت کتابخانه پیامرسانی کلاینت TURN را ایجاد خواهد کرد. در زیرشاخه include/، پروندههای سرایند لازم قرار خواهند گرفت. پوششدهنده C++ برای قابلیتهای پیامرسانی در سرایند TurnMsgLib.h قرار دارد. نمونهای از کد C++ را میتوان در پرونده stunclient.c یافت.
=================================
مستندات (DOCS)
پس از نصب، دستور زیر را اجرا کنید:
$ man turnserver
یا در شاخه ریشه پروژه:
$ man -M man turnserver
تا صفحه راهنما را مشاهده کنید.
در زیرشاخه docs/html از درخت آرشیو اصلی، مرجع کتابخانه کلاینت را خواهید یافت. پس از نصب، این مرجع در مسیر PREFIX/share/doc/turnserver/html قرار خواهد گرفت.
=================================
گزارشها (LOGS)
هنگامی که
سرور TURN آغاز
به کار
میکند،
تلاش
میکند
پرونده
گزارش turn_<pid>.log
را در
شاخههای
زیر ایجاد
کند:
- /var/log
- /log/
- /var/tmp
- /tmp
- شاخه جاری
این رفتار را میتوان با گزینههای --log-file، --syslog و --no-stdout-log مهار کرد.
=================================
رابط مدیریتی HTTPS (HTTPS MANAGEMENT INTERFACE)
فرایند turnserver یک دسترسی وب HTTPS را به عنوان رابط آماری و مدیریت پایه فراهم میکند. turnserver روی همان درگاههای شنونده اصلی TURN/STUN به اتصالات مدیریتی ورودی HTTPS گوش فرامیدهد. صفحات وب مدیریت پایه بوده و خودتوضیح هستند.
برای فعالسازی رابط HTTPS، جدول پایگاهداده admin_user باید با حساب(های) کاربری مدیر پر شود. یک کاربر مدیر میتواند مدیر ارشد (superuser) باشد (در صورتی که به قلمرو یا realm خاصی اختصاص نیافته باشد) یا کاربر محدودشده (در صورتی که به یک realm تخصیص داده شده باشد). کاربران مدیر محدودشده تنها میتوانند کنشهای محدودی را در چارچوب قلمروهای مربوط به خود انجام دهند.
=================================
واسط خط فرمان تلنت (TELNET CLI)
فرایند turnserver یک دسترسی واسط خط فرمان (CLI) تلنت را به عنوان رابط آماری و مدیریت پایه فراهم میآورد. به صورت پیشفرض، turnserver یک شنونده تلنت CLI را روی نشانی آیپی 127.0.0.1 و درگاه 5766 راهاندازی میکند. این مقدار با گزینههای خط فرمان فرایند turnserver قابل تغییر است (گزینههای --cli-ip و --cli-port را ببینید). فهرست کامل دستورهای telnet CLI در خروجی دستور "help" در واسط تلنت CLI ارائه شده است.
=================================
خوشهها (CLUSTERS)
سرور TURN میتواند بخشی از یک راهاندازی خوشهای باشد. اما برای پشتیبانی از قابلیت «درگاه زوج» (جفت جریانهای RTP/RTCP)، درخواستهای کلاینت از یک نشانی IP مشخص باید به همان نمونه از سرور TURN ارسال شوند؛ بنابراین نیازمند اعمال برخی تنظیمات شبکهای برای خوشه است. دلیل آن این است که نقاط پایانی رله RTP و RTCP باید روی همان IP رله تخصیص یابند. طراحی سازوکاری با فوروارد درخواستها در سطح برنامه امکانپذیر خواهد بود (و شاید بعداً آن را انجام دهیم)، اما بر کارایی تأثیر منفی میگذارد.
=================================
پروندهها (FILES)
/etc/turnserver.conf
/var/db/turndb
/usr/local/var/db/turndb
/var/lib/turn/turndb
/usr/local/etc/turnserver.conf
=================================
شاخهها (DIRECTORIES)
/usr/local/share/turnserver
/usr/local/share/doc/turnserver
/usr/local/share/examples/turnserver
=================================
استانداردها (STANDARDS)
استاندارد منسوخ STUN RFC 3489
استاندارد جدید STUN RFC 5389
استاندارد TURN RFC 5766 (TURN RFC 5766)
افزونه TURN-TCP RFC 6062
افزونه TURN IPv6 RFC 6156
بردارهای آزمایشی STUN/TURN RFC 5769
کشف رفتار STUN NAT RFC 5780
=================================
همچنین ببینید (SEE ALSO)
turnadmin, turnutils
======================================
منابع وب (WEB RESOURCES)
صفحه پروژه:
https://github.com/coturn/coturn/
صفحه ویکی:
https://github.com/coturn/coturn/wiki
انجمن:
https://groups.google.com/forum/?fromgroups=#!forum/turn-server-project-rfc5766-turn-server
======================================
نویسندگان (AUTHORS)
پرونده AUTHORS.md را در بسته توزیع سورس coturn ببینید.
| 17 May 2026 |