Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

История изменений [назад]

нажмите, чтобы скрыть/показать версии 1
изначальная версия
редактировать

ответил 2014-08-31 02:37:30 +0400

Валерий_ещё_один Gravatar Валерий_ещё_один

Можно вылечить, только не совсем средствами Asterisk, а средствами iptables.

Что сделал я:

iptables -t nat -A OUTPUT -d 0.0.0.1 -j DNAT --to-destination --==ip-адрес сервера SIP==--

iptables -t nat -A OUTPUT -d 0.0.0.2 -j DNAT --to-destination --==ip-адрес сервера SIP==--

Что это даёт? Все исходящие пакеты на адрес 0.0.0.1 будут направляться на --==ip-адрес сервера SIP==--. Вроде бы ничего, НО! все ответы приходящие от сервера будут так же приходиться (как будто бы) с адреса 0.0.0.1 - это так работает механизм подмены адресов DNAT/SNAT из iptables. Это позволяет создать секцию типа type=peer по ip-адресу серверва соединений, который теперь всегда будет корректно назначаться именно тому каналу, который должен быть связан с этим IP.

Аналогично с 0.0.0.2.

Можно использовать любой удобный адрес, у меня шла настройка нескольких учётных записей мультифона, там адрес 193.201.229.35, я выбрал:

iptables -t nat -A OUTPUT -d 193.201.229.34 -j DNAT --to-destination 193.201.229.35

iptables -t nat -A OUTPUT -d 193.201.229.33 -j DNAT --to-destination 193.201.229.35

Соответственно необходимо подправить строчки регистрации на Asterisk, теперь в качестве сервера сипов надо будет указывать не адрес сервера, а то, что мы "подменяем" правильным адресом в iptables, то есть в моём примере регистрация идёт на 193.201.229.34 и 193.201.229.33 вместо 193.201.229.35 (это sbc.megafon.ru).

register => tcp://89xxXXXxxXX@multifon.ru:CoOlPaSsWd:89xxXXXxxXX@193.201.229.33:5060/my_ext1

register => tcp://89xxXXXxxXX@multifon.ru:CoOlPaSsWd:89xxXXXxxXX@193.201.229.34:5060/my_ext2

Лучшего решения я не нашёл.

Нужные настройки в секциях пиров asterisk:

[xxx]

; симмка 89xxXXXxxXX с мультифона - SIP от мегафона

type=peer ; только пир - определение по ip адресу!!!

host=193.201.229.34 ; этот адрес заменяется в iptables на правильный 193.201.229.35

insecure=port,invite ; обязательно так!!! Иначе входящий вызов не пройдёт!!!

context=incoming_calls ; контекст этот для входящих звонков, экстенжн указан в регистрации

fromuser=89xxXXXxxXX ; это нужно ТОЛЬКО для исходящих вызовов!!!

fromdomain=multifon.ru ; это нужно ТОЛЬКО для исходящих вызовов!!!

secret=xyz ; это нужно ТОЛЬКО для исходящих вызовов!!!

Можно вылечить, только не совсем средствами Asterisk, а средствами iptables.

Что сделал я:

iptables -t nat -A OUTPUT -d 0.0.0.1 0.0.0.1 -j DNAT --to-destination --==ip-адрес сервера SIP==--

iptables -t nat -A OUTPUT -d 0.0.0.2 0.0.0.2 -j DNAT --to-destination --==ip-адрес сервера SIP==--

Что это даёт? Все исходящие пакеты на адрес 0.0.0.1 будут направляться на --==ip-адрес сервера SIP==--. Вроде бы ничего, НО! все ответы приходящие от сервера будут так же приходиться (как будто бы) с адреса 0.0.0.1 - это так работает механизм подмены адресов DNAT/SNAT из iptables. Это позволяет создать секцию типа type=peer по ip-адресу серверва соединений, который теперь всегда будет корректно назначаться именно тому каналу, который должен быть связан с этим IP.

Аналогично с 0.0.0.2.

Можно использовать любой удобный адрес, у меня шла настройка нескольких учётных записей мультифона, там адрес 193.201.229.35, я выбрал:

iptables -t nat -A OUTPUT -d -d 193.201.229.34 -j DNAT --to-destination 193.201.229.35

iptables -t nat -A OUTPUT -d -d 193.201.229.33 -j DNAT --to-destination 193.201.229.35

Соответственно необходимо подправить строчки регистрации на Asterisk, теперь в качестве сервера сипов надо будет указывать не адрес сервера, а то, что мы "подменяем" правильным адресом в iptables, то есть в моём примере регистрация идёт на 193.201.229.34 и 193.201.229.33 вместо 193.201.229.35 (это sbc.megafon.ru).

register => => tcp://89xxXXXxxXX@multifon.ru:CoOlPaSsWd:89xxXXXxxXX@193.201.229.33:5060/my_ext1

register => => tcp://89xxXXXxxXX@multifon.ru:CoOlPaSsWd:89xxXXXxxXX@193.201.229.34:5060/my_ext2

Лучшего решения я не нашёл.

Нужные настройки в секциях пиров asterisk:

[xxx]

[xxx]
; симмка 89xxXXXxxXX с мультифона - SIP от мегафона

мегафона type=peer ; только пир - определение по ip адресу!!!

адресу!!! host=193.201.229.34 ; этот адрес заменяется в iptables на правильный 193.201.229.35

193.201.229.35 insecure=port,invite ; обязательно так!!! Иначе входящий вызов не пройдёт!!!

пройдёт!!! context=incoming_calls ; контекст этот для входящих звонков, экстенжн указан в регистрации

регистрации fromuser=89xxXXXxxXX ; это нужно ТОЛЬКО для исходящих вызовов!!!

вызовов!!! fromdomain=multifon.ru ; это нужно ТОЛЬКО для исходящих вызовов!!!

вызовов!!! secret=xyz ; это нужно ТОЛЬКО для исходящих вызовов!!!

вызовов!!!

Можно вылечить, только не совсем средствами Asterisk, а средствами iptables.

Что сделал я:

iptables -t nat -A OUTPUT -d 0.0.0.1 -j DNAT --to-destination --==ip-адрес сервера SIP==--

iptables -t nat -A OUTPUT -d 0.0.0.2 -j DNAT --to-destination --==ip-адрес сервера SIP==--

Что это даёт? Все исходящие пакеты на адрес 0.0.0.1 будут направляться на --==ip-адрес сервера SIP==--. Вроде бы ничего, НО! все ответы приходящие от сервера будут так же приходиться (как будто бы) с адреса 0.0.0.1 - это так работает механизм подмены адресов DNAT/SNAT из iptables. Это позволяет создать секцию типа type=peer по ip-адресу серверва соединений, который теперь всегда будет корректно назначаться именно тому каналу, который должен быть связан с этим IP.

Аналогично с 0.0.0.2.

Можно использовать любой удобный адрес, у меня шла настройка нескольких учётных записей мультифона, там адрес 193.201.229.35, я выбрал:

iptables -t nat -A OUTPUT -d 193.201.229.34 -j DNAT --to-destination 193.201.229.35

iptables -t nat -A OUTPUT -d 193.201.229.33 -j DNAT --to-destination 193.201.229.35

Соответственно необходимо подправить строчки регистрации на Asterisk, теперь в качестве сервера сипов надо будет указывать не адрес сервера, а то, что мы "подменяем" правильным адресом в iptables, то есть в моём примере регистрация идёт на 193.201.229.34 и 193.201.229.33 вместо 193.201.229.35 (это sbc.megafon.ru).

register => tcp://89xxXXXxxXX@multifon.ru:CoOlPaSsWd:89xxXXXxxXX@193.201.229.33:5060/my_ext1

register => tcp://89xxXXXxxXX@multifon.ru:CoOlPaSsWd:89xxXXXxxXX@193.201.229.34:5060/my_ext2

Лучшего решения я не нашёл.

Нужные настройки в секциях пиров sip.conf asterisk:

[xxx]
; симмка 89xxXXXxxXX с мультифона - SIP от мегафона
type=peer                       ; только пир - определение по ip адресу!!!
host=193.201.229.34             ; этот адрес заменяется в iptables на правильный  193.201.229.35
insecure=port,invite            ; обязательно так!!! Иначе входящий вызов не пройдёт!!!
context=incoming_calls          ; контекст этот для входящих звонков, экстенжн указан в регистрации
fromuser=89xxXXXxxXX            ; это нужно ТОЛЬКО для исходящих вызовов!!!
fromdomain=multifon.ru          ; это нужно ТОЛЬКО для исходящих вызовов!!!
secret=xyz                      ; это нужно ТОЛЬКО для исходящих вызовов!!!

Можно вылечить, только не совсем средствами Asterisk, а средствами iptables.

Что сделал я:

iptables -t nat -A OUTPUT -d 0.0.0.1 -j DNAT --to-destination --==ip-адрес сервера SIP==--

iptables -t nat -A OUTPUT -d 0.0.0.2 -j DNAT --to-destination --==ip-адрес сервера SIP==--

Что это даёт? Все исходящие пакеты на адрес 0.0.0.1 будут направляться на --==ip-адрес сервера SIP==--. Вроде бы ничего, НО! все ответы приходящие от сервера будут так же приходиться (как будто бы) с адреса 0.0.0.1 - это так работает механизм подмены адресов DNAT/SNAT из iptables. Это позволяет создать секцию типа type=peer по ip-адресу серверва соединений, который теперь всегда будет корректно назначаться именно тому каналу, который должен быть связан с этим IP.

Аналогично с 0.0.0.2.

Можно использовать любой удобный адрес, у меня шла настройка нескольких учётных записей мультифона, там адрес 193.201.229.35, я выбрал:

iptables -t nat -A OUTPUT -d 193.201.229.34 193.201.229.34 -j DNAT --to-destination 193.201.229.35

iptables -t nat -A OUTPUT -d 193.201.229.33 193.201.229.33 -j DNAT --to-destination 193.201.229.35

Соответственно необходимо подправить строчки регистрации на Asterisk, теперь в качестве сервера сипов надо будет указывать не адрес сервера, а то, что мы "подменяем" правильным адресом в iptables, то есть в моём примере регистрация идёт на 193.201.229.34 и 193.201.229.33 вместо 193.201.229.35 (это sbc.megafon.ru).

register => tcp://89xxXXXxxXX@multifon.ru:CoOlPaSsWd:89xxXXXxxXX@193.201.229.33:5060/my_ext1tcp://89xxXXXxxXX@multifon.ru:CoOlPaSsWd:89xxXXXxxXX@193.201.229.33:5060/my_ext1

register => tcp://89xxXXXxxXX@multifon.ru:CoOlPaSsWd:89xxXXXxxXX@193.201.229.34:5060/my_ext2tcp://89xxXXXxxXX@multifon.ru:CoOlPaSsWd:89xxXXXxxXX@193.201.229.34:5060/my_ext2

Лучшего решения я не нашёл.

Нужные настройки в секциях пиров sip.conf asterisk:

[xxx]
; симмка 89xxXXXxxXX с мультифона - SIP от мегафона
type=peer                       ; только пир - определение по ip адресу!!!
host=193.201.229.34             ; !!!!! этот адрес заменяется в iptables на правильный 193.201.229.35
insecure=port,invite            ; обязательно так!!! Иначе входящий вызов не пройдёт!!!
context=incoming_calls          ; контекст этот для входящих звонков, экстенжн указан в регистрации
fromuser=89xxXXXxxXX            ; это нужно ТОЛЬКО для исходящих вызовов!!!
fromdomain=multifon.ru          ; это нужно ТОЛЬКО для исходящих вызовов!!!
secret=xyz                      ; это нужно ТОЛЬКО для исходящих вызовов!!!
нажмите, чтобы скрыть/показать версии 5
Добавил информацию по SIP-модулю для IPTABLES
редактировать

Можно вылечить, только не совсем средствами Asterisk, а средствами iptables.

Что сделал я:

iptables -t nat -A OUTPUT -d 0.0.0.1 -j DNAT --to-destination --==ip-адрес сервера SIP==--

iptables -t nat -A OUTPUT -d 0.0.0.2 -j DNAT --to-destination --==ip-адрес сервера SIP==--

Что это даёт? Все исходящие пакеты на адрес 0.0.0.1 будут направляться на --==ip-адрес сервера SIP==--. Вроде бы ничего, НО! все ответы приходящие от сервера будут так же приходиться (как будто бы) с адреса 0.0.0.1 - это так работает механизм подмены адресов DNAT/SNAT из iptables. Это позволяет создать секцию типа type=peer по ip-адресу серверва соединений, который теперь всегда будет корректно назначаться именно тому каналу, который должен быть связан с этим IP.

Аналогично с 0.0.0.2.

Можно использовать любой удобный адрес, у меня шла настройка нескольких учётных записей мультифона, там адрес 193.201.229.35, я выбрал:

iptables -t nat -A OUTPUT -d 193.201.229.34 -j DNAT --to-destination 193.201.229.35

iptables -t nat -A OUTPUT -d 193.201.229.33 -j DNAT --to-destination 193.201.229.35

Соответственно необходимо подправить строчки регистрации на Asterisk, теперь в качестве сервера сипов надо будет указывать не адрес сервера, а то, что мы "подменяем" правильным адресом в iptables, то есть в моём примере регистрация идёт на 193.201.229.34 и 193.201.229.33 вместо 193.201.229.35 (это sbc.megafon.ru).

register => tcp://89xxXXXxxXX@multifon.ru:CoOlPaSsWd:89xxXXXxxXX@193.201.229.33:5060/my_ext1

register => tcp://89xxXXXxxXX@multifon.ru:CoOlPaSsWd:89xxXXXxxXX@193.201.229.34:5060/my_ext2

Лучшего решения я не нашёл.

Нужные настройки в секциях пиров sip.conf asterisk:

[xxx]
; симмка 89xxXXXxxXX с мультифона - SIP от мегафона
type=peer                       ; только пир - определение по ip адресу!!!
host=193.201.229.34             ; !!!!! этот адрес заменяется в iptables на правильный 193.201.229.35
insecure=port,invite            ; обязательно так!!! Иначе входящий вызов не пройдёт!!!
context=incoming_calls          ; контекст этот для входящих звонков, экстенжн указан в регистрации
fromuser=89xxXXXxxXX            ; это нужно ТОЛЬКО для исходящих вызовов!!!
fromdomain=multifon.ru          ; это нужно ТОЛЬКО для исходящих вызовов!!!
secret=xyz                      ; это нужно ТОЛЬКО для исходящих вызовов!!!

P.S. Чтобы iptables корректно обрабатывал преобразования необходимо использовать модули ipnatsip и ipconntracksip (nfnatsip, nfconntracksip). Для проверить их наличие можно при помощи команды lsmod | grep sip, если они не загружаются автоматически, надо установить их загрузку в /etc/modules

Можно вылечить, только не совсем средствами Asterisk, а средствами iptables.

Что сделал я:

iptables -t nat -A OUTPUT -d 0.0.0.1 -j DNAT --to-destination --==ip-адрес сервера SIP==--

iptables -t nat -A OUTPUT -d 0.0.0.2 -j DNAT --to-destination --==ip-адрес сервера SIP==--

Что это даёт? Все исходящие пакеты на адрес 0.0.0.1 будут направляться на --==ip-адрес сервера SIP==--. Вроде бы ничего, НО! все ответы приходящие от сервера будут так же приходиться (как будто бы) с адреса 0.0.0.1 - это так работает механизм подмены адресов DNAT/SNAT из iptables. Это позволяет создать секцию типа type=peer по ip-адресу серверва соединений, который теперь всегда будет корректно назначаться именно тому каналу, который должен быть связан с этим IP.

Аналогично с 0.0.0.2.

Можно использовать любой удобный адрес, у меня шла настройка нескольких учётных записей мультифона, там адрес 193.201.229.35, я выбрал:

iptables -t nat -A OUTPUT -d 193.201.229.34 -j DNAT --to-destination 193.201.229.35

iptables -t nat -A OUTPUT -d 193.201.229.33 -j DNAT --to-destination 193.201.229.35

Соответственно необходимо подправить строчки регистрации на Asterisk, теперь в качестве сервера сипов надо будет указывать не адрес сервера, а то, что мы "подменяем" правильным адресом в iptables, то есть в моём примере регистрация идёт на 193.201.229.34 и 193.201.229.33 вместо 193.201.229.35 (это sbc.megafon.ru).

register => tcp://89xxXXXxxXX@multifon.ru:CoOlPaSsWd:89xxXXXxxXX@193.201.229.33:5060/my_ext1

register => tcp://89xxXXXxxXX@multifon.ru:CoOlPaSsWd:89xxXXXxxXX@193.201.229.34:5060/my_ext2

Лучшего решения я не нашёл.

Нужные настройки в секциях пиров sip.conf asterisk:

[xxx]
; симмка 89xxXXXxxXX с мультифона - SIP от мегафона
type=peer                       ; только пир - определение по ip адресу!!!
host=193.201.229.34             ; !!!!! этот адрес заменяется в iptables на правильный 193.201.229.35
insecure=port,invite            ; обязательно так!!! Иначе входящий вызов не пройдёт!!!
context=incoming_calls          ; контекст этот для входящих звонков, экстенжн указан в регистрации
fromuser=89xxXXXxxXX            ; это нужно ТОЛЬКО для исходящих вызовов!!!
fromdomain=multifon.ru          ; это нужно ТОЛЬКО для исходящих вызовов!!!
secret=xyz                      ; это нужно ТОЛЬКО для исходящих вызовов!!!

P.S. Чтобы iptables корректно обрабатывал преобразования необходимо использовать модули ipnat ip nat sip и ipconntrackip conntrack sip (nfnat(или nf nat sip и nf conntrack sip, nfconntracksip). Для проверить вместо пробелов в названиях модулей - подчёркивания)

Проверить их наличие можно при помощи команды lsmod | grep sip, если они не загружаются автоматически, надо установить их загрузку в /etc/modules

Можно вылечить, только не совсем средствами Asterisk, а средствами iptables.

Что сделал я:

iptables -t nat -A OUTPUT -d 0.0.0.1 -j DNAT --to-destination --==ip-адрес сервера SIP==--

iptables -t nat -A OUTPUT -d 0.0.0.2 -j DNAT --to-destination --==ip-адрес сервера SIP==--

Что это даёт? Все исходящие пакеты на адрес 0.0.0.1 будут направляться на --==ip-адрес сервера SIP==--. Вроде бы ничего, НО! все ответы приходящие от сервера будут так же приходиться (как будто бы) с адреса 0.0.0.1 - это так работает механизм подмены адресов DNAT/SNAT из iptables. Это позволяет создать секцию типа type=peer по ip-адресу серверва соединений, который теперь всегда будет корректно назначаться именно тому каналу, который должен быть связан с этим IP.

Аналогично с 0.0.0.2.

Можно использовать любой удобный адрес, у меня шла настройка нескольких учётных записей мультифона, там адрес 193.201.229.35, я выбрал:

iptables -t nat -A OUTPUT -d 193.201.229.34 -j DNAT --to-destination 193.201.229.35

iptables -t nat -A OUTPUT -d 193.201.229.33 -j DNAT --to-destination 193.201.229.35

Соответственно необходимо подправить строчки регистрации на Asterisk, теперь в качестве сервера сипов надо будет указывать не адрес сервера, а то, что мы "подменяем" правильным адресом в iptables, то есть в моём примере регистрация идёт на 193.201.229.34 и 193.201.229.33 вместо 193.201.229.35 (это sbc.megafon.ru).

register => tcp://89xxXXXxxXX@multifon.ru:CoOlPaSsWd:89xxXXXxxXX@193.201.229.33:5060/my_ext1

register => tcp://89xxXXXxxXX@multifon.ru:CoOlPaSsWd:89xxXXXxxXX@193.201.229.34:5060/my_ext2

Лучшего решения я не нашёл.

Нужные настройки в секциях пиров sip.conf asterisk:

[xxx]
; симмка 89xxXXXxxXX с мультифона - SIP от мегафона
type=peer                       ; только пир - определение по ip адресу!!!
host=193.201.229.34             ; !!!!! этот адрес заменяется в iptables на правильный 193.201.229.35
insecure=port,invite            ; обязательно так!!! Иначе входящий вызов не пройдёт!!!
context=incoming_calls          ; контекст этот для входящих звонков, экстенжн указан в регистрации
fromuser=89xxXXXxxXX            ; это нужно ТОЛЬКО для исходящих вызовов!!!
fromdomain=multifon.ru          ; это нужно ТОЛЬКО для исходящих вызовов!!!
secret=xyz                      ; это нужно ТОЛЬКО для исходящих вызовов!!!

P.S. Чтобы iptables корректно обрабатывал преобразования необходимо использовать модули ip nat sip и ip conntrack sip (или nf nat sip и nf conntrack sip, вместо пробелов в названиях модулей - подчёркивания)

Проверить их наличие можно при помощи команды lsmod | grep sip, если они не загружаются автоматически, надо установить их загрузку в /etc/modules

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.