Sternchen: Externe Amtsleitungen im Status "Anfrage gesendet"

Ein bekanntes Bild?

[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

Einmal hat sie mich auch erwischt und ich habe ein Drehbuch geschrieben.

Ich habe versucht, nach vorgefertigten Rezepten zu suchen, die Mehrheit lief darauf hinaus: Ich bekam einen Ping der Adressen, schaltete das Debug ein und sah darin genau das, was im ersten Satz des Zitats "Pakete gehen, aber die Antworten kommen nicht" gesagt wurde. Aber warum? Punkt Nummer 1 wurde elementar ausgeschlossen. Punkt Nummer 2 - auch, weil Eine Testverbindung von derselben IP-Adresse, aber einem anderen internen Host funktionierte. Punkt Nummer 4 ist absolut "zhost". Aber Nummer 3 ist schon näher. Es wird nur nicht blockiert, aber aus irgendeinem Grund kann der Host keine Pakete mit Asterisk austauschen. Und dies geschieht in 99% der Fälle nach Punkt 2, wenn die PPPoE-Sitzung unterbrochen wird. Die Sitzung wird dann wiederhergestellt, und der Zugriff auf das Internet über das LAN ist ebenfalls verfügbar, UDP-Sitzungen bleiben jedoch hängen. Mikrotik sagt uns Folgendes, durch das diese Sitzungen gehen:

, .

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

Dies ist der Status der Sitzungen im normalen Modus, wenn alles funktioniert. In Abwesenheit von Registrierungen gibt es, wenn der Speicher mir richtig dient, kein Flag S - gesehene Antwort.

Wir versuchen, die festgefahrenen Sitzungen mit dem folgenden Befehl zu reduzieren:

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

Und siehe da, buchstäblich in einer Sekunde werden Stämme wiederhergestellt, Anrufe gehen weiter, das Leben blüht mit leuchtenden Farben! Also schreiben wir ein Skript!

Zuerst müssen wir Mikrot basierend auf Informationen von Asterisk steuern. Daher wird das Skript alle 5 Minuten in cron auf dem Host mit Asterisk ausgeführt, und wir werden Mikrot über ssh mit einem Zertifikat verwalten. Hier gibt es alles perfekt gemalt - wie den Schlüssel zu erstellen und sie an einen neuen Benutzer auf der Mikrotie gebunden.

Nun, das Skript selbst:

#!/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

Nur für den Fall, 2 Sekunden nach dem Zurücksetzen der aufgesetzten Sitzungen aktualisieren wir die Registrierung - damit es definitiv funktioniert!

Ab dem 4. September 2019 arbeitete das Skript 273 Mal, gemessen am Protokoll. Sie können berechnen, wie viel er mir Zeit gespart hat, und die Manager und ihre Kundennerven.

PS Eine ähnliche Situation tritt bei allen Routern auf, die mir in Verbindung mit Asterisk begegnet sind. Und nur Mikrot kann das Problem lösen, ohne andere Dienste zu beeinträchtigen. Der Rest der Router muss dumm überlastet werden.

All Articles