SIP за NAT (asterisk и iptables)

Автор: Admin | 16.04.2014

Минимальный набор правил Iptables для работы SIP сервера, например Asterisk, находящегося за NAT’ом.


Для работы SIP за NAT‘ом, организованным с помощью iptables, необходимо следующее:

# Переменные
IPT="/sbin/iptables"
INET_IP="x.x.x.x" # Внешний IPшник 
ASTER_IP="192.168.0.10" # IPшник SIP сервера
EXTEN_IP="192.168.0.100" # IPшник SIP клиента
# Подключить модули:
/sbin/modprobe nf_conntrack_sip
/sbin/modprobe nf_nat_sip
/sbin/modprobe nf_conntrack_h323
# Разрешить пересылку пакетов
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -p udp --dport 5060 -j ACCEPT
$IPT -A FORWARD -p udp -m multiport --dports 10000:20000 -j ACCEPT
# Пробросить SIP порт до сервера
$IPT -t nat -A PREROUTING -p udp -d $INET_IP --dport 5060 -j DNAT --to-destination $ASTER_IP:5060
# Разрешить NAT для диапазона "голосовых" портов
$IPT -t nat -A POSTROUTING -s $ASTER_IP -p udp -m multiport --dports 10000:20000 -j SNAT --to $INET_IP
$IPT -t nat -A POSTROUTING -s $EXTEN_IP -p udp -m multiport --dports 10000:20000 -j SNAT --to $INET_IP

Если клиентов несколько — для каждого надо открыть NAT на диапазон портов 10000:20000, как в последнем правиле.
Этого достаточно для работы VoIP сервера и клиентов за NAT’ом.


Если есть внешние клиенты, подключающиеся из интернета, то не будет проходить голос в их направлении. Для решения надо прокинуть порты, по которым ходит голос, на SIP сервер:

$IPT -t nat -A PREROUTING -p udp -d $INET_IP -m multiport --dports 10000:20000 -j DNAT --to-destination $ASTER_IP

Но будет лучше взять у провайдера дополнительный IP и повесить телефонию на него.

Комментарии к посту “SIP за NAT (asterisk и iptables)

  1. Серега

    Спасибо тебе в фаере я и сам разобрался, но то, что модули надо подключить я не знал, Спасибо, как коллега тебе респект большой!!!
    # Подключить модули:
    /sbin/modprobe nf_conntrack_sip
    /sbin/modprobe nf_nat_sip
    /sbin/modprobe nf_conntrack_h323
    Из за этих и форварда у меня нифига не заводилось. Ты помог, Ты Класс!!!!
    $IPT -A FORWARD -m state —state ESTABLISHED,RELATED -j ACCEPT
    $IPT -A FORWARD -p udp —dport 5060 -j ACCEPT
    $IPT -A FORWARD -p udp -m multiport —dports 10000:20000 -j ACCEPT

  2. Серега

    На oneser@pisem.net можешь скинуть сообщения, деньгами отблагодарю, мне нравится, потому что сей пост, выручил, в долгу не лю оставаться, я ценю сей труд!

  3. Серега

    Ибо я нифига не сдел, если бы не прочитав сей пост — пост меня в верное направление повернул, за что я блогадарен. Спасибо тебе ИТ специалист!!!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *