Asterisk: batang eksternal dalam status Permintaan Terkirim

Gambar yang akrab?

[root@pbx scripts]# asterisk -x "sip show registry"
Host                                    dnsmgr Username       Refresh State                Reg.Time
sipnet.ru:5060                          Y      XXXXXXXXXXX         102 Request Sent           Fri, 20 Mar 2020 09:19:31
87.103.236.26:5060                      N      XXXXXX             105 Request Sent           Fri, 20 Mar 2020 09:20:55
sbc.megafon.ru:5060                     Y      XXXXXXXXXXX@       165 Request Sent           Fri, 20 Mar 2020 09:20:28
login.mtt.ru:5060                       Y      XXXXXXXXXXXXXX       105 Request Sent           Fri, 20 Mar 2020 09:19:50

Begitu dia mendapatkan saya juga, dan saya menulis naskah.

Saya mencoba mencari resep yang sudah jadi, yang sebagian besar menjadi begini: Saya mendapat ping alamat, menyalakan debug dan melihat di dalamnya persis apa yang dikatakan dalam kalimat pertama dari kutipan "paket pergi, tetapi jawabannya tidak datang." Tapi kenapa? Poin nomor 1 dikesampingkan SD. Poin nomor 2 - juga, karena koneksi uji dari alamat IP yang sama tetapi host internal yang berbeda bekerja. Poin nomor 4 adalah mutlak "zhost". Tetapi nomor 3 sudah lebih dekat. Itu hanya tidak memblokir, tetapi untuk beberapa alasan itu tidak memungkinkan host untuk bertukar paket dengan Asterisk. Dan ini terjadi pada 99% kasus setelah poin 2, ketika sesi PPPoE pecah. Sesi ini kemudian dipulihkan, dan akses ke Internet dari LAN juga tersedia, tetapi sesi UDP macet. Inilah yang dikatakan Mikrotik kepada kami melalui sesi mana ini:

, .

1) .
2)
3)
4) .
..








[admin@MikroTik] > /ip firewall connection print where dst-address~":5060" and srcnat
Flags: E - expected, S - seen-reply, A - assured, C - confirmed, D - dying, F - fasttrack, s - srcnat, d - dstnat
 #          PR.. SRC-ADDRESS           DST-ADDRESS           TCP-STATE   TIMEOUT     ORIG-RATE REPL-RATE ORIG-PACKETS REPL-PACKETS      ORIG-BYTES
 0  SAC  s  udp  10.X.X.X:5060     80.75.130.83:5060                 59m48s           0bps      0bps        2 172        2 191       1 358 335
 1  SAC  s  udp  10.X.X.X:5060     193.201.229.35:5060               59m47s           0bps      0bps        1 611        1 662         996 786
 2  SAC  s  udp  10.X.X.X:5060     212.53.40.40:5060                 59m44s           0bps      0bps        1 837        1 830       1 114 259
 3  SAC  s  udp  10.X.X.X:5060     87.103.236.26:5060                59m21s           0bps      0bps        2 501        2 509       1 614 239

Ini adalah keadaan sesi dalam mode normal ketika semuanya bekerja. Dengan tidak adanya registrasi, jika ingatanku benar, tidak ada flag S - seen-reply.

Kami mencoba mengurangi sesi yang macet dengan perintah:

[admin@MikroTik] > ip firewall connection remove [find where dst-address~":5060" and srcnat]

Dan, lihatlah, secara harfiah dalam batang kedua dipulihkan, panggilan berlanjut, kehidupan mekar dengan warna-warna cerah! Jadi kami sedang menulis naskah!

Pertama, kita perlu mengendalikan Mikrot berdasarkan informasi dari Asterisk. Oleh karena itu, skrip akan dijalankan di cron setiap 5 menit pada host dengan Asterisk, dan kami akan mengelola Mikrot via ssh dengan sertifikat. Di sini semuanya dicat dengan sempurna - cara membuat kunci dan mengikatnya ke pengguna baru di mikrotia.

Nah, skrip itu sendiri:

#!/bin/sh

if /usr/sbin/asterisk -x "sip show registry" | grep -q "Request Sent"; then
    echo "$(date) Resetting UDP connections on Mikrotik" >> /var/log/asterisk/mikrotik
    ssh -l admin-ssh -i /XXXX/.ssh/id_dsa 10.X.X.X 'ip firewall connection remove [find where dst-address~":5060" and srcnat]'
    sleep 2
    asterisk -x "sip reload"
fi

Untuk jaga-jaga, 2 detik setelah reset dari sesi yang digantung, kami memperbarui pendaftaran - sehingga pasti berfungsi!

Dari 4 September 2019, skrip bekerja 273 kali, dilihat dari log. Anda dapat menghitung berapa banyak dia menghemat waktu saya, dan para manajer serta klien mereka gelisah.

PS Situasi serupa terjadi pada semua router yang saya temui bersamaan dengan Asterisk. Dan hanya Mikrot yang dapat memecahkan masalah tanpa mempengaruhi layanan lain. Sisa router harus dibebani dengan bodoh.

All Articles