Sonata - Máy chủ cung cấp SIP

Tôi không biết phải so sánh việc cung cấp với cái gì. Có lẽ với một con mèo? Có vẻ như có thể không có nó, nhưng có nó thì tốt hơn một chút. Đặc biệt là nếu nó hoạt động))

Xây dựng bài toán:

  1. Tôi muốn thiết lập điện thoại SIP một cách nhanh chóng, dễ dàng và an toàn. Khi cài đặt một chiếc điện thoại và thậm chí còn hơn thế nữa khi cấu hình lại nó.
  2. Nhiều nhà cung cấp có định dạng cấu hình riêng, tiện ích tạo cấu hình riêng và cách bảo vệ cấu hình riêng. Và tôi thực sự không muốn giao dịch với tất cả mọi người.
  3. Nhiều giải pháp cung cấp, a) tập trung vào một nhà cung cấp hoặc một hệ thống điện thoại, b) triển khai khá cồng kềnh, nhiều tập lệnh, tham số, brrr...

Về điểm 3, tôi sẽ nhận xét rằng có những hệ thống cung cấp tuyệt vời cho FreePBX, cho FusionPBX, cho Kazoo, nơi các mẫu dành cho điện thoại từ nhiều nhà cung cấp khác nhau được cung cấp công khai. Có những giải pháp thương mại mà bạn cũng có thể định cấu hình hoạt động của điện thoại từ các nhà sản xuất khác nhau trong mô-đun cung cấp, chẳng hạn như Yeastar PBX.

Habré cũng có đầy đủ các công thức về cách thiết lập thiết bị từ nhiều nhà cung cấp khác nhau: thời gian, два. Nhưng như người ta nói, tất cả các hệ thống đều có một lỗ hổng chết người. Vì vậy chúng ta sẽ tự làm chiếc xe đạp của riêng mình.

định dạng của riêng bạn

Như họ nói trong xkcd, nếu bạn không muốn xử lý 14 định dạng - đến với ngày 15. Do đó, chúng tôi sử dụng cài đặt chung cho bất kỳ điện thoại nào và tạo định dạng cấu hình json của riêng mình.

Một cái gì đó như thế này:

{
   "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"
      }
   ]
}

Vì vậy, trong bất kỳ điện thoại nào, bạn cần định cấu hình giờ địa phương và đường dây SIP. Mọi thứ đều đơn giản ở đây. Bạn có thể xem thêm ví dụ đây.

cung cấp máy chủ của riêng bạn

Trong hướng dẫn sử dụng của nhà sản xuất thường có một điểm trong đó có nội dung: lấy một csv, ghi lại địa chỉ mac-mật khẩu đăng nhập của bạn, tạo tệp bằng cách sử dụng tập lệnh độc quyền của chúng tôi, đặt chúng dưới máy chủ web Apache và mọi thứ sẽ ổn.

Đoạn tiếp theo của hướng dẫn thường cho bạn biết rằng bạn cũng có thể mã hóa tệp cấu hình được tạo.

Nhưng đây đều là những tác phẩm kinh điển. Cách tiếp cận hiện đại với sinh tố và Twitter nói rằng bạn cần tạo một máy chủ web làm sẵn, nó sẽ không mạnh bằng Apache mà chỉ làm được một việc nhỏ. Tạo và gửi cấu hình bằng liên kết.

Hãy dừng ở đây và nhớ rằng hầu hết tất cả các điện thoại SIP hiện có thể nhận cấu hình qua http/https, vì vậy chúng tôi không xem xét các triển khai khác (ftp, tftp, ftps). Sau đó, mỗi điện thoại sẽ biết địa chỉ MAC của riêng mình. Do đó, chúng tôi sẽ tạo hai liên kết: một liên kết cá nhân - dựa trên khóa thiết bị, liên kết chung thứ hai, hoạt động bằng cách sử dụng kết hợp mã thông báo chung và địa chỉ MAC.

Ngoài ra, tôi sẽ không tập trung vào cấu hình không, tức là. thiết lập điện thoại từ đầu, tức là. bạn cắm nó vào mạng và nó bắt đầu hoạt động. Không, trong trường hợp của tôi, bạn cắm nó vào mạng, thực hiện thiết lập sơ bộ (thiết lập để nhận cấu hình từ máy chủ cung cấp), sau đó uống pina colada và cấu hình lại điện thoại nếu cần thông qua quá trình cung cấp. Việc phân phối Tùy chọn 66 là trách nhiệm của máy chủ DHCP.

Nhân tiện, tôi hoàn toàn chán ngấy việc nói “cung cấp”, nên từ này được rút gọn thành “cung cấp”, xin đừng đá tôi.

Và một điều nữa: máy chủ cung cấp của chúng tôi không có giao diện người dùng, tức là. giao diện người dùng. Có lẽ là bây giờ, nhưng không chắc chắn lắm, bởi vì... Tôi không cần nó. Nhưng có một API để lưu/xóa cài đặt, lấy danh sách các nhà cung cấp, kiểu máy được hỗ trợ, mọi thứ đều được mô tả theo quy chuẩn của đặc tả vênh vang.

Tại sao lại là API mà không phải UI? Bởi vì Tôi đã có hệ thống điện thoại của riêng mình, sau đó tôi có nguồn thông tin xác thực, nơi tôi chỉ cần lấy dữ liệu này, biên dịch json cần thiết và xuất bản nó trên máy chủ cung cấp. Và máy chủ cung cấp, theo các quy tắc được chỉ định trong tệp json, sẽ cung cấp cấu hình của thiết bị được yêu cầu hoặc sẽ không cung cấp nếu thiết bị không đúng hoặc không đáp ứng các tiêu chí cũng được chỉ định trong json này.

Sonata - Máy chủ cung cấp SIP

Đây là cách mà việc cung cấp microservice đã diễn ra. Gọi điện sonata, mã nguồn có sẵn trên GitHub, ngoài ra còn có hình ảnh docker đã sẵn sàng, ví dụ sử dụng docker đây.

Các tính năng chính:

  • trong mọi trường hợp, quyền truy cập vào cấu hình bị giới hạn theo thời gian, theo mặc định là 10 phút. Nếu bạn muốn cung cấp lại cấu hình, hãy xuất bản lại cấu hình.

  • một định dạng cho tất cả các nhà cung cấp, tất cả các điều chỉnh sẽ bị xóa trong sonata, bạn gửi json tiêu chuẩn hóa, định cấu hình mọi thiết bị có sẵn.

  • tất cả các cấu hình được cấp cho thiết bị đều được ghi lại, tất cả các khu vực có vấn đề có thể được xem trong nhật ký và có thể thấy lỗi

  • Có thể sử dụng một liên kết chung với mã thông báo; mỗi điện thoại nhận được cấu hình riêng bằng cách chỉ định địa chỉ mac. Hoặc liên kết cá nhân thông qua key.

  • API quản lý (quản lý) và cung cấp config cho điện thoại (cung cấp) được chia theo cổng

  • Kiểm tra. Điều rất quan trọng đối với tôi là sửa định dạng của cấu hình đã cấp và bao gồm tất cả các tình huống thông thường khi cấp cấu hình bằng các thử nghiệm. Vì vậy, tất cả điều này hoạt động rõ ràng.

Nhược điểm:

Cho đến nay, mã hóa không được sử dụng dưới bất kỳ hình thức nào trong Sonata. Những thứ kia. tất nhiên bạn có thể bắt đầu sử dụng https bằng cách đặt nginx trước sonata chẳng hạn. Nhưng các phương pháp độc quyền vẫn chưa được sử dụng. Tại sao? Dự án vẫn còn non trẻ, nó đã ra mắt hàng trăm thiết bị đầu tiên. Và tất nhiên, tôi thu thập ý tưởng và phản hồi. Hơn nữa, để đảm bảo an toàn cho mọi thứ, để các cấu hình không thể bị đánh cắp trên mạng, có lẽ bạn nên bận tâm đến các khóa mã hóa, tls và con nhím đi cùng với chúng, nhưng đây sẽ là phần tiếp theo.

Thiếu giao diện người dùng. Có lẽ đây là một bất lợi đáng kể đối với người dùng cuối, nhưng đối với quản trị viên hệ thống, tiện ích bảng điều khiển quan trọng hơn một ứng dụng chính thức. Đã có kế hoạch tạo ra một tiện ích trên bảng điều khiển, nhưng tôi không chắc liệu nó có cần thiết không?

Kết quả ra sao?

Một máy chủ web nhỏ và đơn giản để cung cấp API để quản lý cho một số kiểu điện thoại.

Một lần nữa, việc này sẽ hoạt động như thế nào?

  1. Cài đặt sonata.
  2. Chúng tôi tạo cấu hình json và xuất bản nó dưới dạng sonata.
  3. Sau đó, chúng tôi nhận được liên kết cung cấp từ sonata.
  4. Sau đó, chúng tôi chỉ ra liên kết này trong điện thoại.
  5. Máy đang tải config

Chỉ có hai bước trong hoạt động tiếp theo:

  1. Chúng tôi tạo cấu hình json và xuất bản nó trong sonata
  2. Máy đang tải config

Những điện thoại nào sẽ được khuyến mãi?

Nhà cung cấp Grandstream, Fanvil, Yealink. Các cấu hình trong nhà cung cấp ít nhiều giống nhau nhưng có thể khác nhau tùy thuộc vào phần sụn - có thể cần phải kiểm tra thêm.

Bạn có thể đặt ra những quy tắc nào?

Theo thời gian. Bạn có thể chỉ định thời gian cho đến khi cấu hình có sẵn.
Theo địa chỉ mac. Khi submit config qua link cá nhân của thiết bị thì địa chỉ mac cũng sẽ được kiểm tra.
Bằng ip. Theo địa chỉ IP từ nơi yêu cầu được thực hiện.

Làm thế nào để tương tác với Sonata?

Thông qua API, thực hiện các yêu cầu http. API sẽ có sẵn trong quá trình cài đặt của bạn. Bởi vì API hỗ trợ đặc tả vênh vang, bạn có thể sử dụng tiện ích trực tuyến cho các yêu cầu thử nghiệm đối với API.

Tuyệt. Hàng đẹp đấy, bạn thử xem sao?

Cách dễ nhất là triển khai hình ảnh docker dựa trên kho lưu trữ mẫu sonata. Kho lưu trữ chứa hướng dẫn cài đặt.

Nếu tôi biết node.js thì sao?

Nếu bạn có kinh nghiệm sử dụng JavaScript thì bạn sẽ nhanh chóng tìm ra cách mọi thứ hoạt động ở đây.

Sẽ có sự phát triển Sonata?

Tôi đã đạt được một phần mục tiêu của mình. Phát triển hơn nữa là nhiệm vụ của tôi về chủ đề tự động hóa thiết lập điện thoại. Ngoài ra còn có cơ hội mở rộng cấu hình để định cấu hình các nút điện thoại, thêm tính năng cung cấp sổ địa chỉ, có lẽ là thứ gì đó khác, hãy viết vào phần bình luận.

Tóm tắt và lời cảm ơn

Tôi sẽ rất vui khi có những đề xuất/phản đối/nhận xét và câu hỏi mang tính xây dựng, bởi vì... Có thể là anh ấy đã mô tả điều gì đó khó hiểu.

Tôi cũng bày tỏ lòng biết ơn tới tất cả các đồng nghiệp đã giúp đỡ, tư vấn, xét nghiệm và cung cấp/tặng điện thoại để xét nghiệm. Trên thực tế, nhiều người mà tôi đã trao đổi tại nơi làm việc đều tham gia vào dự án ở các mức độ khác nhau, AsterConf'e, trong các cuộc trò chuyện và email. Cảm ơn những ý tưởng và suy nghĩ.

Nguồn: www.habr.com

Thêm một lời nhận xét