Подключение (Авторизация) SIP по TCP
Картина следующая:
Asterisk находиться за NAT
на шлюзе проброс портов с внешнего интерфейсы на сервер Asterisk
-A PREROUTING -d XXX.XXX.XXX.XXX/32 -p udp -m udp --dport 10000:20000 -j DNAT --to-destination 192.168.10.37
-A PREROUTING -d XXX.XXX.XXX.XXX/32 -p udp -m udp --dport 5060 -j DNAT --to-destination 192.168.10.37
-A PREROUTING -d XXX.XXX.XXX.XXX/32 -p tcp -m tcp --dport 5038 -j DNAT --to-destination 192.168.10.37
-A PREROUTING -d XXX.XXX.XXX.XXX/32 -p tcp -m tcp --dport 5060 -j DNAT --to-destination 192.168.10.37
-A OUTPUT -d XXX.XXX.XXX.XXX/32 -p udp -m udp --dport 10000:20000 -j DNAT --to-destination 192.168.10.37
-A OUTPUT -d XXX.XXX.XXX.XXX/32 -p udp -m udp --dport 5060 -j DNAT --to-destination 192.168.10.37
-A OUTPUT -d XXX.XXX.XXX.XXX/32 -p tcp -m tcp --dport 5038 -j DNAT --to-destination 192.168.10.37
-A OUTPUT -d XXX.XXX.XXX.XXX/32 -p tcp -m tcp --dport 5060 -j DNAT --to-destination 192.168.10.37
-A FORWARD -d 192.168.10.37/32 -i eth1 -o eth0 -p udp -m udp --dport 5060 -j ACCEPT
-A FORWARD -d 192.168.10.37/32 -i eth1 -o eth0 -p tcp -m tcp --dport 5038 -j ACCEPT
-A FORWARD -d 192.168.10.37/32 -i eth1 -o eth0 -p tcp -m tcp --dport 5060 -j ACCEPT
-A FORWARD -d 192.168.10.37/32 -i eth1 -o eth0 -p udp -m udp --dport 10000:20000 -j ACCEPT
И если авторизовываться по UDP на внешний IP то все прекрасно подключается и работает.
И если авторизовываться по TCP на внешний IP то ничего не подключается и как следствие не работает.
но
И если авторизовываться по TCP на внутренний IP то все прекрасно подключается и работает.
netstat -nlp | grep :5060
tcp 0 0 0.0.0.0:5060 0.0.0.0:* LISTEN 3769/asterisk
udp 0 0 0.0.0.0:5060 0.0.0.0:* 3769/asterisk
| Link @ Пн Дек 01, 2014 20:13 писал(а): |
| а что в настройке Default Settings: Allowed transports ? |
Я не опытный я не понял о чем Вы и не знаю где это смотреть? Подскажите пожалуйста.
Added after 29 minutes:
| Link @ Пн Дек 01, 2014 20:13 писал(а): |
| а что в настройке Default Settings: Allowed transports ? |
Default Settings:
-----------------
Allowed transports: UDP
Outbound transport: UDP
Context: from-sip-external
Record on feature: automon
Record off feature: automon
Force rport: Yes
DTMF: rfc2833
Qualify: 0
Keepalive: 0
Use ClientCode: No
Progress inband: Never
Language: ru
Tone zone:
MOH Interpret: default
MOH Suggest:
Added after 10 minutes:
Не я чисто примерно понимаю что дело в этом:
Allowed transports: UDP
Outbound transport: UDP
Но как это исправить не знаю.
И от сюда 2 вопроса:
1. Почему тогда по локальному ip подключение проходит.
2. где это меняется через FreePBX (или где то в другом месте)?
[ppername](+)
transport=udp,tcp
или через Web GUI - > Asterisk SIP Settings установить дополнительный параметр Other SIP Settings transport=udp,tcp
Default Settings:
-----------------
Allowed transports: UDP,TCP
Outbound transport: UDP
Context: from-sip-external
Record on feature: automon
Record off feature: automon
Force rport: Yes
DTMF: rfc2833
Qualify: 0
Keepalive: 0
Use ClientCode: No
Progress inband: Never
Language: ru
Tone zone:
MOH Interpret: default
MOH Suggest:
а каким параметром это изменить Outbound transport: UDP на TCP
Added after 54 minutes:
Вопрос решен тема закрыта. Всем огромное спасибо.
Решение.
Удалил все старые правила проброса и пробросил из этим скриптом
#!/bin/bash
# Проброс портов
EXT_IP="xxx.xxx.xxx.xxx" # Он всё равно чаще всего один и тот же.
INT_IP="xxx.xxx.xxx.xxx" # См. выше.
EXT_IF=eth0 # Внешний и внутренний интерфейсы.
INT_IF=eth1 # Для шлюза они вряд ли изменятся, поэтому можно прописать вручную.
LAN_IP=$1 # Локальный адрес сервера передаём скрипту первым параметром,
SRV_PORT=$2 # а тип сервера, в смысле какой порт (или набор портов) открывать - вторым
# Здесь желательно сделать проверку ввода данных, потому что операции достаточно серьёзные.
iptables -t nat -A PREROUTING --dst $EXT_IP -p tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IP
iptables -t nat -A POSTROUTING --dst $LAN_IP -p tcp --dport $SRV_PORT -j SNAT --to-source $INT_IP
iptables -t nat -A OUTPUT --dst $EXT_IP -p tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IP
iptables -I FORWARD 1 -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp -m tcp --dport $SRV_PORT -j ACCEPT
все заработало