1 | изначальная версия редактировать | |
Можно вылечить, только не совсем средствами 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 ; это нужно ТОЛЬКО для исходящих вызовов!!!
2 | No.2 Revision редактировать |
Можно вылечить, только не совсем средствами 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 от 3 | No.3 Revision редактировать |
Можно вылечить, только не совсем средствами 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 ; это нужно ТОЛЬКО для исходящих вызовов!!!
4 | No.4 Revision редактировать |
Можно вылечить, только не совсем средствами 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.34193.201.229.34 -j DNAT --to-destination 193.201.229.35iptables -t nat -A OUTPUT -d
193.201.229.33193.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_ext1register =>
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
6 | No.6 Revision редактировать |
Можно вылечить, только не совсем средствами 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
7 | No.7 Revision редактировать |
Можно вылечить, только не совсем средствами 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.