1 | изначальная версия редактировать | |
Пишу демон для мониторинга очередей на нескольких asterisk серверах. Есть очень много мелочей которые мне нужно реализовать, поэтому готовые решения использовать не получается.
Проблема в следующем: Имеется 2 подсети. Например 172.1.0.0/24 (N1) и 172.1.1.0/24 (N2). В N1 находится Asterisk, а в N2 находится сервер, на котором крутится демон. Демон устанавливает AMI соединение к астериску. Так вот это соединение очень быстро убивается по инициативе астериска.
Если же располагать сервер мониторинга в той же подсети, что и сам астериск, то соединение живет вечно. (По крайней мере у меня оно не падало. Тестировал 26 часов. Закрыл сам, из-за того что надоело ждать когда оно упадет :)) Если же в разных сетях то после первого же вывода: "Connection closed by remote host"
Пробовал снифать трафик и выяснилось, что TCP сессию рвет именно АТС. В последнем пакете с данными (Ответ на команду "Action: QueueStatus") АТС ставит флаг FIN, чем и инициирует завершение TCP сессии. В случае расположения серверов в одной подсети этот флаг не ставится и поэтому сессиия не рвется...
Уже думал грешить на Cisco роутер, который стоит между этими подсетями, но сняв трафик на обоих концах, окончательно убедился, что первый пакет с FIN флагом шлет именно АТС.
Еще есть вариант что соединение рвет не сам астериск а операционная система. Но интересно то, что рвется сессиия не по истечении какого-то определенного времени, а четко в последнем пакете с данными. Т.е. если подключиться по AMI и сразу отправить команду, например "Action: QueueStatus", то в последнем пакете тут же возникнет флаг FIN. Вывод в ответ на команду идет довольно большой. Может кто-то сталкивался с данной проблемой? Принимаются любые мысли к размышлению.
Вобщем, предоставлю любую интересующую информацию. Проблему надо как то побороть, а я уперся. Нужна помощь! :)
2 | No.2 Revision редактировать |
Пишу демон для мониторинга очередей на нескольких asterisk серверах. Есть очень много мелочей которые мне нужно реализовать, поэтому готовые решения использовать не получается.
Проблема в следующем: Имеется 2 подсети. Например 172.1.0.0/24 (N1) и 172.1.1.0/24 (N2). В N1 находится Asterisk, а в N2 находится сервер, на котором крутится демон. Демон устанавливает AMI соединение к астериску. Так вот это соединение очень быстро убивается по инициативе астериска.
Если же располагать сервер мониторинга в той же подсети, что и сам астериск, то соединение живет вечно. (По крайней мере у меня оно не падало. Тестировал 26 часов. Закрыл сам, из-за того что надоело ждать когда оно упадет :)) Если же в разных сетях то после первого же вывода: "Connection closed by remote host"
Пробовал снифать трафик и выяснилось, что TCP сессию рвет именно АТС. В последнем пакете с данными (Ответ на команду "Action: QueueStatus") АТС ставит флаг FIN, чем и инициирует завершение TCP сессии. В случае расположения серверов в одной подсети этот флаг не ставится и поэтому сессиия не рвется...
Уже думал грешить на Cisco роутер, который стоит между этими подсетями, но сняв трафик на обоих концах, окончательно убедился, что первый пакет с FIN флагом шлет именно АТС.
Еще есть вариант что соединение рвет не сам астериск а операционная система. Но интересно то, что рвется сессиия не по истечении какого-то определенного времени, а четко в последнем пакете с данными. Т.е. если подключиться по AMI и сразу отправить команду, например "Action: QueueStatus", то в последнем пакете тут же возникнет флаг FIN. Вывод в ответ на команду идет довольно большой. Может кто-то сталкивался с данной проблемой? Принимаются любые мысли к размышлению.
Вобщем, предоставлю любую интересующую информацию. Проблему надо как то побороть, а я уперся. Нужна помощь! :)
UPDATED. Проверял все телнетом на порт Asterisk Manager Interface (5038). История аналогичная. Соединение рвется сразу после вывода первой команды. Дело не в модуле питона, и не в моих кодах. Проблема на стороне сервера. Либо Asterisk, либо Linux. Вопрос в том что именно и как это пофиксить.
3 | Добавил ответ редактировать |
Пишу демон для мониторинга очередей на нескольких asterisk серверах. Есть очень много мелочей которые мне нужно реализовать, поэтому готовые решения использовать не получается.
Проблема в следующем: Имеется 2 подсети. Например 172.1.0.0/24 (N1) и 172.1.1.0/24 (N2). В N1 находится Asterisk, а в N2 находится сервер, на котором крутится демон. Демон устанавливает AMI соединение к астериску. Так вот это соединение очень быстро убивается по инициативе астериска.
Если же располагать сервер мониторинга в той же подсети, что и сам астериск, то соединение живет вечно. (По крайней мере у меня оно не падало. Тестировал 26 часов. Закрыл сам, из-за того что надоело ждать когда оно упадет :)) Если же в разных сетях то после первого же вывода: "Connection closed by remote host"
Пробовал снифать трафик и выяснилось, что TCP сессию рвет именно АТС. В последнем пакете с данными (Ответ на команду "Action: QueueStatus") АТС ставит флаг FIN, чем и инициирует завершение TCP сессии. В случае расположения серверов в одной подсети этот флаг не ставится и поэтому сессиия не рвется...
Уже думал грешить на Cisco роутер, который стоит между этими подсетями, но сняв трафик на обоих концах, окончательно убедился, что первый пакет с FIN флагом шлет именно АТС.
Еще есть вариант что соединение рвет не сам астериск а операционная система. Но интересно то, что рвется сессиия не по истечении какого-то определенного времени, а четко в последнем пакете с данными. Т.е. если подключиться по AMI и сразу отправить команду, например "Action: QueueStatus", то в последнем пакете тут же возникнет флаг FIN. Вывод в ответ на команду идет довольно большой. Может кто-то сталкивался с данной проблемой? Принимаются любые мысли к размышлению.
Вобщем, предоставлю любую интересующую информацию. Проблему надо как то побороть, а я уперся. Нужна помощь! :)
UPDATED. Проверял все телнетом на порт Asterisk Manager Interface (5038). История аналогичная. Соединение рвется сразу после вывода первой команды. Дело не в модуле питона, и не в моих кодах. Проблема на стороне сервера. Либо Asterisk, либо Linux. Вопрос в том что именно и как это пофиксить.
Не знаю почему я не могу сам ответить на свой вопрос... Напишу здесь:
Asterisk AMI truncates long responses over medium latency connections https://issues.asterisk.org/jira/browse/ASTERISK-19603
4 | No.4 Revision редактировать |
Пишу демон для мониторинга очередей на нескольких asterisk серверах. Есть очень много мелочей которые мне нужно реализовать, поэтому готовые решения использовать не получается.
Проблема в следующем: Имеется 2 подсети. Например 172.1.0.0/24 (N1) и 172.1.1.0/24 (N2). В N1 находится Asterisk, а в N2 находится сервер, на котором крутится демон. Демон устанавливает AMI соединение к астериску. Так вот это соединение очень быстро убивается по инициативе астериска.
Если же располагать сервер мониторинга в той же подсети, что и сам астериск, то соединение живет вечно. (По крайней мере у меня оно не падало. Тестировал 26 часов. Закрыл сам, из-за того что надоело ждать когда оно упадет :)) Если же в разных сетях то после первого же вывода: "Connection closed by remote host"
Пробовал снифать трафик и выяснилось, что TCP сессию рвет именно АТС. В последнем пакете с данными (Ответ на команду "Action: QueueStatus") АТС ставит флаг FIN, чем и инициирует завершение TCP сессии. В случае расположения серверов в одной подсети этот флаг не ставится и поэтому сессиия не рвется...
Уже думал грешить на Cisco роутер, который стоит между этими подсетями, но сняв трафик на обоих концах, окончательно убедился, что первый пакет с FIN флагом шлет именно АТС.
Еще есть вариант что соединение рвет не сам астериск а операционная система. Но интересно то, что рвется сессиия не по истечении какого-то определенного времени, а четко в последнем пакете с данными. Т.е. если подключиться по AMI и сразу отправить команду, например "Action: QueueStatus", то в последнем пакете тут же возникнет флаг FIN. Вывод в ответ на команду идет довольно большой. Может кто-то сталкивался с данной проблемой? Принимаются любые мысли к размышлению.
Вобщем, предоставлю любую интересующую информацию. Проблему надо как то побороть, а я уперся. Нужна помощь! :)
UPDATED. Проверял все телнетом на порт Asterisk Manager Interface (5038). История аналогичная. Соединение рвется сразу после вывода первой команды. Дело не в модуле питона, и не в моих кодах. Проблема на стороне сервера. Либо Asterisk, либо Linux. Вопрос в том что именно и как это пофиксить.
Не знаю почему я не могу сам ответить на свой вопрос... Напишу здесь:
Asterisk AMI truncates long responses over medium latency connections https://issues.asterisk.org/jira/browse/ASTERISK-19603
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.