Яагаад SIP дуудлага VPN-ээр бүртгэгдээд дуу илгээдэггүй вэ
Бүртгэл ба дуу нь өөр замаар явдаг. Нэг дуудлагыг туннелээр дагаж, PBX ямар хаягуудыг ашиглаж болох, RTP хаана үнэхээр зогсдогыг харна уу.
Амжилттай бүртгэл дууны тухай бараг юу ч хэлдэггүй. Программ телефон оффисын PBX-тэй хэдэн цагийн турш хүчинтэй холбоо барьж, гэсэн хэдий ч чимээгүй байдлыг дамжуулж чадна. Туннель нь хэн нэгэн санаатайгаар илгээсэн пакетуудыг л зөөдөг бөгөөд дуудлага гурван тусдаа замыг ашигладаг: холбоо, харилцан яриа тогтоох, RTP урсгал. Эдгээрийг салгахад алдаа нь VPN гэдэг үгэн дээр биш, нэг зам дээр буудаг.
Гэрийн Wi-Fi-д байгаа зөөврийн компьютер зөвшөөрөгдсөн туннелээр оффисын дотоод дугаарыг залгаж байна гэж төсөөлөөд үзээрэй. PBX хэрэглэгчийг баталгаажуулж, REGISTER-ийг хүлээн авч, дотоод дугаар боломжтой гэж харагдана, гэхдээ дуудлага нэг чиглэлд бүрэн чимээгүйгээр холбогддог.
Бүртгэл нь харилцагчийг холбодог, медиа замыг биш
REGISTER хүсэлт нь бүртгэгчээс бичлэгийн хаяг болон нэг буюу хэд хэдэн харилцагчийн URI-н хоорондын тохирлыг хадгалахыг хүсдэг. Энэ тохирол нь шинэ харилцан яриаг яг одоо хаана илгээх вэ гэсэн нарийн асуултад хариулдаг. Энэ нь медиа хаана хамаарах тухай юу ч хэлдэггүй бөгөөд хүлээн авсан бүртгэл нь дараагийн INVITE хүрч болох медиа хаягийг агуулж байгааг батлахгүй. Бүртгэлүүд таймераар дуусдаг тул шинэчлэхээ больсон телефон туннель нь эрүүл харагдаж байхад нь ирж буй дуудлагыг алддаг. Туннелийн төлөв биш, харилцагчийн хугацаа дуусахыг ажиглаарай.
Программ телефон туннелийн ард байх үед харилцагчийн толгой хувийн хаяг агуулж болно. Үүнийг өөр төгсгөлийн цэг рүү дамжуулдаг PBX нь дуудагдсан тал хүрч чадахгүй сүлжээ рүү чиглэсэн харилцан яриа үүсгэдэг. PJSIP төгсгөлийн цэг дээр rewrite_contact=yes тохируулбал PBX өөрийн ажигласан эх хаягийг орлуулдаг бөгөөд энэ нь ихэвчлэн дуут дохио болон хугацаа дуусахын хоорондын ялгаа юм.
INVITE юу санал болгодог, хэн ашиглаж болох вэ
SDP биетэй INVITE нь дуудлагыг хийж буй хүн медиаг хаана хүлээн авахыг хүсэж байгааг санал болгодог: хаяг, порт, кодекийн жагсаалт. Дуудагдсан тал өөрийн хаяг, портоор хариулж, дараа нь тал бүр нөгөөгийн санал болгосон газар руу RTP илгээдэг. Хэрэв дуудлагыг хийж буй хүн зөвхөн гэрийн сүлжээндээ байдаг 192.168.x.x хаяг санал болгосон бол сигнал хэр цэвэр байсан ч дуудагдсан талд дуу илгээх газар байхгүй. Маскировка нь пакетууд чиглүүлэгчээс гарах үед IP толгойг дахин бичдэг боловч SDP биеийн доторх текстийг хэзээ ч дахин бичдэггүй.
Энэ зөрүү нь сонгодог нэг чиглэлийн дуудлагыг тайлбарладаг: сигнал нь хоёр төгсгөлийн цэг PBX-д хүрдэг тул ажилладаг, харин дуу нь нэг төгсгөлийн цэгт зөвхөн өөр NAT-ийн ард байдаг хаяг руу илгээ гэж хэлсэн тул бүтэлгүйтдэг.
| Path | Who picks the address | Typical failure |
|---|---|---|
| REGISTER | Softphone, rewritten by the registrar if configured | Binding expires or points at a private address |
| INVITE and SDP | Each endpoint in its own offer or answer | Offer names a media address nobody can route to |
| RTP | PBX relay policy or the two endpoints | Port range blocked, or no return path |
Дууг хэн зөөх нь тохиргооны сонголт
Сигнал ба медиа нь тусдаа үүрэг. Прокси бүх дуудлагын туршид сигналын зам дээр үлдэж, нэг ч RTP пакетийг хүрч болохгүй. PBX медиа реле болох эсэх нь туннелийн оршихуйгаас биш, тохиргооноос хамаарна.
Шууд медиа үед төгсгөлийн цэгүүд RTP-г өөрсдөө солилцдог бөгөөд энэ нь нэг LAN дээр сайн ажилладаг, харин нэг тал нарийн портын мужийн ард байх үед муу.
direct_media=no тохируулбал PBX медиа зам руу түлхэгдэж, хоёр хөл нь өөрийн хянадаг хаяг дээр дуусна, энэ нь урьдчилан таамаглах боломжтой хаяглалтын төлөө зурвасын өргөн, процессорыг солилцдог. Реле хийх үед PBX хүрч болох хаягийг зарлах ёстой хэвээр. Олон сүлжээт хост дээр pjsip.conf доторх external_media_address болон external_signaling_address нь SDP болон Via толгойд юу харагдахыг тодорхойлно. Тэдгээрийг тохируулахгүй орхивол PBX өөрийн LAN хаягийг цорын ганц зам нь туннелийн алслагдсан тал болох дуудлагыг хийж буй хүнд санал болгож болно.
Тохиргоог хүрэхээс өмнө чиглэл бүрийг дага
Дуудлага идэвхтэй байх үед PBX-ийн сокетын хүснэгтээс эхэл: ss -uanp | grep -E '5060|10000' RTP портууд холбогдсон эсэх, ямар локал хаяг ашиглаж байгааг харуулна. Медиа мужид юу ч холбогдоогүй бол реле оролцохгүй бөгөөд төгсгөлийн цэгүүд шууд ярьдаг. Дараа нь программ телефоны талд tcpdump -ni any -s0 udp portrange 10000-20000 -w rtp.pcap ашиглан бичлэг хий. Ирж буй пакетгүй гарч буй пакетууд асуудлыг буцах зам эсвэл алслагдсан талд ашигла гэж хэлсэн хаяг руу нарийсгана, хоосон бичлэг нь медиа туннелийн интерфэйсэд огт хүрээгүй гэсэн үг. sngrep ашигласан сигналын бичлэг нь SDP холболтын мөрийг илгээсэн хэвээр харуулж нөгөө хагаст хариулна.
Тухайн холболтын мөр дэх хаягийг алслагдсан тал үнэхээр чиглүүлж чадах хаягтай харьцуул. Энэ нэг харьцуулалт нь нэг чиглэлийн дууны ихэнх тайланг аливаа тохиргооны хяналтаас илүү хурдан шийддэг.
Шифрлэлт туннелийн ирмэг дээр зогсдог
TLS дээрх SIP нь тохируулсан сигналын үсрэлтийг хамгаалж, SRTP нь хоёр тал тохиролцсон үед медиаг хамгаалж, туннель нь өөрийн төгсгөлийн цэгүүдийн хоорондын урсгалыг хамгаална. Эдгээрийн аль нь ч бусдыг нь өгдөггүй. Туннель дотор шифрлэгдсэн дуудлага гарцаас PBX рүү тодорхой текстээр гарч болох бөгөөд энэ нь алдаа биш, дизайны шийдвэр юм.
Тасалбарыг хаахаас өмнө гурван зүйлийг дарааллаар нь баталгаажуул: бүртгэл шинэ, SDP нь алслагдсан тал хүрч чадах хаягийг агуулж байна, пакетууд медиа портуудад хоёр чиглэлд урсаж байна. Эдгээрийн аль нэг нь худал бол асуудал туннельд биш. Бүтэлгүйтсэн замыг засаж, дараа нь өөрчлөлтийг батлахын тулд мөнөөх бичлэгийг дахин ажиллуул. Өмнөх болон дараах бичлэгүүдийг хадгалах нь дараагийн нэг чиглэлийн тайланг бүтэн үдээс хойш биш таван минутын шалгалт болгоно.