Sonata - سرور تامین SIP

من نمی دانم تامین را با چه چیزی مقایسه کنم. شاید با گربه؟ بدون آن ممکن به نظر می رسد، اما با آن کمی بهتر است. به خصوص اگر کار کند))

فرمول مسئله:

  1. من می خواهم تلفن های SIP را سریع، آسان و ایمن راه اندازی کنم. هنگام نصب گوشی و حتی بیشتر از آن هنگام پیکربندی مجدد آن.
  2. بسیاری از فروشندگان فرمت های پیکربندی خاص خود، ابزارهای کاربردی خاص خود را برای ایجاد پیکربندی ها و راه های محافظت از پیکربندی ها دارند. و من واقعاً نمی خواهم با همه سر و کار داشته باشم.
  3. بسیاری از راه‌حل‌های تامین، الف) بر یک فروشنده یا یک سیستم تلفن متمرکز هستند، ب) پیاده‌سازی بسیار دشوار هستند، تعداد زیادی اسکریپت، پارامترها، brrr...

در مورد نکته 3 نظر میدم که سیستم های تامین عالی وجود داره برای FreePBX, برای FusionPBX, برای کازو، که در آن الگوهای تلفن از فروشندگان مختلف به صورت عمومی در دسترس هستند. راه حل های تجاری وجود دارد که در آنها می توانید عملکرد تلفن های سازنده های مختلف را در ماژول تأمین، به عنوان مثال، Yeastar PBX پیکربندی کنید.

Habré همچنین پر از دستور العمل هایی در مورد نحوه راه اندازی دستگاه ها از فروشندگان مختلف است: زمان, два. اما همانطور که می گویند، همه سیستم ها یک نقص کشنده دارند. پس ما دوچرخه خودمان را خواهیم ساخت.

فرمت خودت

همانطور که در xkcd می گویند، اگر نمی خواهید با 14 فرمت سر و کار داشته باشید - با 15 بیا. بنابراین، ما از تنظیمات کلی برای هر گوشی استفاده می کنیم و فرمت پیکربندی json خود را می سازیم.

چیزی شبیه به این:

{
   "key": "sdgjdeu9443908",
   "token": "590sfdsf8u984",
   "model": "gxp1620",
   "vendor": "grandstream",
   "mac": "001565113af8",
   "timezone_offset": "GMT+03",
   "ntp_server": "pool.ntp.org",
   "status": true,
   "accounts": [
      {
         "name": "Мобилон",
         "line": 1,
         "sip_register": "sip.mobilonsip.ru",
         "sip_name": "sip102",
         "sip_user": "sip102",
         "sip_password": "4321",
         "sip_auth": "sip102"
      }
   ]
}

بنابراین، در هر تلفنی باید زمان محلی و خطوط SIP را پیکربندی کنید. اینجا همه چیز ساده است. می توانید نمونه های بیشتری را مشاهده کنید اینجا.

تامین سرور خودتان

در دفترچه‌های راهنمای سازنده معمولاً جایی وجود دارد که می‌گوید: یک csv بگیرید، ورود-گذرواژه-آدرس مک خود را یادداشت کنید، فایل‌ها را با استفاده از اسکریپت اختصاصی ما تولید کنید، آنها را در وب سرور آپاچی قرار دهید و همه چیز درست می‌شود.

پاراگراف بعدی دفترچه راهنما معمولاً به شما می گوید که می توانید فایل پیکربندی تولید شده را نیز رمزگذاری کنید.

اما اینها همه کلاسیک هستند. رویکرد مدرن با اسموتی ها و توییتر می گوید که شما باید یک وب سرور آماده بسازید که به اندازه آپاچی قدرتمند نباشد، اما فقط یک کار کوچک را انجام دهد. ایجاد و ارسال تنظیمات با استفاده از یک پیوند.

بیایید در اینجا توقف کنیم و به یاد داشته باشیم که تقریباً همه تلفن های SIP اکنون می توانند پیکربندی ها را از طریق http/https دریافت کنند، بنابراین ما پیاده سازی های دیگر (ftp، tftp، ftps) را در نظر نمی گیریم. سپس، هر تلفن آدرس MAC خود را می داند. بنابراین، ما دو پیوند ایجاد خواهیم کرد: یکی شخصی - بر اساس کلید دستگاه، دوم عمومی، که با استفاده از ترکیبی از یک رمز مشترک و یک آدرس MAC کار می کند.

همچنین، من روی پیکربندی صفر تمرکز نمی کنم، یعنی. راه اندازی گوشی از ابتدا، یعنی. شما آن را به شبکه وصل کردید و شروع به کار کرد. نه، در سناریوی من، شما آن را به شبکه وصل می‌کنید، تنظیمات اولیه را انجام می‌دهید (آن را برای دریافت پیکربندی از سرور تأمین‌کننده تنظیم می‌کنید)، و سپس پینا کولادا می‌نوشید و گوشی را در صورت نیاز از طریق تأمین، پیکربندی مجدد می‌کنید. توزیع گزینه 66 بر عهده سرور DHCP است.

ضمناً من از گفتن «تدارک» کاملاً خسته شدم، بنابراین کلمه به «تدارک» کوتاه شد، لطفاً مرا لگد ندهید.

و یک چیز دیگر: سرور تامین کننده ما رابط کاربری ندارد، یعنی. رابط کاربری شاید در حال حاضر، اما مطمئن نیستم، زیرا ... من به آن نیازی ندارم. اما یک API برای ذخیره/حذف تنظیمات، دریافت لیستی از فروشندگان پشتیبانی شده، مدل ها وجود دارد، همه چیز مطابق با قوانین مشخصات swagger توصیف شده است.

چرا API و نه UI؟ زیرا من قبلاً سیستم تلفن خود را دارم، سپس یک منبع اعتبار دارم، که فقط باید این داده ها را بگیرم، json لازم را کامپایل کنم و آن را در سرور تأمین کننده منتشر کنم. و سرور تامین کننده طبق قوانین مشخص شده در فایل json به دستگاه مورد نیاز کانفیگ خود را می دهد و یا در صورت درست نبودن دستگاه یا عدم رعایت معیارهای مشخص شده در این json آن را نمی دهد.

Sonata - سرور تامین SIP

به این ترتیب میکروسرویس تأمین کننده معلوم شد. تماس گرفت سوناتا، کد منبع در GitHub موجود است، همچنین وجود دارد تصویر داکر آماده، مثال استفاده از داکر اینجا.

ویژگی های کلیدی:

  • در هر صورت، دسترسی محدود به پیکربندی بر اساس زمان، به طور پیش فرض 10 دقیقه است. اگر می خواهید پیکربندی را دوباره در دسترس قرار دهید، پیکربندی را دوباره منتشر کنید.

  • یک قالب برای همه فروشندگان، تمام تنظیمات در سونات حذف می شوند، شما json استاندارد شده را ارسال می کنید، هر تجهیزات موجود را پیکربندی می کنید.

  • همه پیکربندی‌های صادر شده برای دستگاه‌ها ثبت می‌شوند، همه مناطق مشکل را می‌توان در گزارش مشاهده کرد و خطاها را می‌توان مشاهده کرد.

  • امکان استفاده از یک پیوند مشترک با یک توکن وجود دارد؛ هر تلفن با تعیین آدرس مک، پیکربندی خاص خود را دریافت می کند. یا یک پیوند شخصی از طریق کلید.

  • رابط های برنامه کاربردی برای مدیریت (مدیریت) و ارائه تنظیمات به تلفن ها (تامین) بر اساس پورت ها تقسیم می شوند

  • تست ها برای من بسیار مهم بود که فرمت کانفیگ صادر شده را درست کنم و تمام موقعیت های معمول صدور کانفیگ را با آزمایش پوشش دهم. به طوری که این همه به وضوح کار می کند.

منفی:

تا کنون، رمزگذاری به هیچ وجه در سوناتا استفاده نشده است. آن ها البته می توانید برای مثال با قرار دادن nginx در مقابل sonata شروع به استفاده از https کنید. اما روش های اختصاصی هنوز استفاده نشده است. چرا؟ این پروژه هنوز جوان است، صد دستگاه اول خود را راه اندازی کرده است. و البته ایده ها و بازخوردها را جمع آوری می کنم. علاوه بر این، برای ایمن کردن همه چیز، به طوری که تنظیمات را نتوان در شبکه بو کرد، احتمالاً ارزش دارد که با کلیدهای رمزگذاری، tls و خارپشت با آنها زحمت بکشید، اما این یک ادامه خواهد بود.

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

نتیجه؟

یک وب سرور کوچک و ساده برای تهیه چندین مدل گوشی با یک API برای مدیریت.

یک بار دیگر، این چگونه قرار است کار کند؟

  1. نصب سونات.
  2. ما یک پیکربندی json ایجاد می کنیم و آن را در sonata منتشر می کنیم.
  3. سپس ما یک لینک تامین از سونات دریافت می کنیم.
  4. سپس این لینک را در تلفن نشان می دهیم.
  5. دستگاه در حال بارگیری پیکربندی است

در عملیات بعدی فقط دو مرحله وجود دارد:

  1. ما یک پیکربندی json ایجاد می کنیم و آن را در sonata منتشر می کنیم
  2. دستگاه در حال بارگیری پیکربندی است

کدام گوشی ها تبلیغ می شوند؟

فروشندگان Grandstream، Fanvil، Yealink. تنظیمات موجود در فروشنده کم و بیش یکسان است، اما ممکن است بسته به سیستم عامل متفاوت باشد - ممکن است آزمایش اضافی لازم باشد.

چه قوانینی می توانید وضع کنید؟

بر حسب زمان می توانید زمانی را مشخص کنید که پیکربندی تا آن زمان در دسترس خواهد بود.
با آدرس مک هنگام ارسال پیکربندی از طریق پیوند شخصی دستگاه، آدرس مک نیز بررسی می شود.
توسط ip با آدرس IP از جایی که درخواست انجام شده است.

چگونه با سونات تعامل کنیم؟

از طریق API، ایجاد درخواست های http. API در نصب شما در دسترس خواهد بود. زیرا API از مشخصات swagger پشتیبانی می کند، می توانید از آن استفاده کنید ابزار آنلاین برای درخواست های آزمایشی به API.

باشه عالیه. چیزهای جالبی، امتحان کردنش چطوره؟

ساده ترین راه این است که یک تصویر داکر را بر اساس یک مخزن مستقر کنید سونات-نمونه. مخزن حاوی دستورالعمل های نصب است.

اگر من node.js را بدانم چه می شود؟

اگر تجربه استفاده از جاوا اسکریپت را دارید، به سرعت متوجه خواهید شد که همه چیز در اینجا چگونه کار می کند.

آیا توسعه سوناتا وجود خواهد داشت؟

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

خلاصه و قدردانی

خوشحال می شوم پیشنهادات / اعتراض / نظرات و سوالات سازنده ای داشته باشم زیرا ... ممکن است او چیزی را غیرقابل درک توصیف کند.

همچنین از همه همکارانم که کمک، مشاوره، آزمایش و ارائه/اهدای تلفن برای آزمایش کردند تشکر می کنم. در واقع، بسیاری از افرادی که در محل کار با آنها ارتباط برقرار کردم، به درجات مختلفی در پروژه مشارکت دارند. AsterConfدر چت ها و ایمیل ها. با تشکر از ایده ها و افکار.

منبع: www.habr.com

اضافه کردن نظر