IP-телефон за брандмауэром на FreeBSD - IPFilter

Я установил брандмауэр на FreeBSD 8.2, используя ipf+ipnat, а также SQUID 2.7 в качестве веб-прокси.

Все пользователи могут получить доступ к Интернету в порядке, но моей большой проблемой являются IP-телефоны, они пытаются получить доступ к sip-серверу в Интернете (услуга внешнего провайдера), они не могут установить соединение.

порты, используемые для sip-сервисов: SIP: порт 5060–5070 UDP/TCP RTP (голос) Трафик: порты 10000–20000 UDP

Это моя текущая конфигурация системы, что-то не так, но я не знаю, что

Интерфейсы: rl0 = локальная сеть офиса 192.168.10.x bge0 = подключение к Интернету через глобальную сеть

rc.conf:

squid_enable="YES"
ipfilter_enable="YES"
ipfilter_rules="/etc/ipf.rules"
ipmon_enable="YES"
ipmon_flags="-Ds"
gateway_enable="YES"
ipnat_enable="YES"
ipnat_rules="/etc/ipnat.rules"

ipf.rules:

pass out quick on rl0 all
pass in quick on rl0 all

pass out quick on bge0 all
pass in quick on bge0 all

pass in quick on lo0 all
pass out quick on lo0 all

Я открыл весь трафик на оба интерфейса (временно), но не получил хорошего результата, все ip телефоны пока не работают

ipnat.rules:

rdr rl0 0.0.0.0/0 port 80 -> 127.0.0.1 port 8080 tcp # transparent proxy
rdr bge0 0.0.0.0/0 port 22 -> 127.0.0.1 port 22 tcp # ssh server
map bge0 192.168.10.0/16 -> 0.0.0.0/32 proxy port ftp ftp/tcp
map bge0 192.168.10.0/16 -> 0.0.0.0/32 portmap tcp/udp auto
map bge0 192.168.10.0/16 -> 0.0.0.0/32

все IP-телефоны и компьютеры имеют статический IP-адрес, сервер FreeBSD в качестве шлюза и действующий DNS-сервер.


person erick    schedule 18.11.2011    source источник


Ответы (2)


Для работы SIP-телефонов за NAT требуется STUN-сервер.

(Либо используйте тот, который предоставлен вашим провайдером sip, либо попробуйте net/stund из коллекции портов)

Если у вас только один телефон, вы также можете попробовать переадресацию портов:

#SIP
#rdr pass on $ext_if proto tcp from any to $ext_addr port = 5060 -> \
    $IP_PHONE port 5060
#RTP
#rdr pass on $ext_if proto tcp from any to $ext_addr port = 5004 -> \
#        $IP_PHONE port 5004
#stun
#rdr pass on $ext_if proto tcp from any to $ext_addr port = 10000 -> \
 #        $IP_PHONE port 10000
person arved    schedule 21.11.2011
comment
Это достаточно близко к истине (требуется STUN) для +1: использование ICE в некотором роде подразумевает использование STUN. Вы также можете создать SIP-клиент, который можно административно настроить для использования внешних IP-адресов для определенных диапазонов адресов! - person Frank Shearar; 21.11.2011

Ваш первый вариант должен быть SIP Express Router или SER. Веб-сайт будет отличным местом для начала. В противном случае (вы не можете установить его по какой-либо причине), вам, вероятно, придется пойти по старой школе.

Проблема, с которой вы, вероятно, столкнетесь, заключается в том, что входящие соединения с телефоном поступают из-за пределов сети, поэтому порт, «сохраненный» для входящего трафика, отсутствует. Вы можете преодолеть некоторые из них, регулярно регистрируясь, или вы можете настроить брандмауэр и конфигурации NAT для передачи трафика от вашего провайдера на конкретный телефон, но в этом случае у вас останется только один телефон для подключения. Вам нужно будет настроить вышестоящего провайдера для отправки подключений каждого телефона через другой порт и привязать этот порт к определенному IP-адресу и порту. Например:

rdr rtk0 123.123.123.123/32 port 5061 -> 192.168.100.11 port 5061 udp
rdr rtk0 123.123.123.123/32 port 5062 -> 192.168.100.12 port 5062 udp
etc. 

где 123.123.123.123 — SIP-адрес вашего провайдера. Настройте свои телефоны так, чтобы они общались через порт 5060 + некоторое смещение.

Даже если это поможет вам с подключением, вы все равно можете столкнуться с проблемами RTP. STUN немного поможет в этом, но вам может потребоваться ограничить SIP-телефоны, чтобы их RTP-порты были уникальными (чтобы трафик с одного телефона не начал внезапно появляться на другом). Диапазоны портов для SIP и RTP смехотворно огромны — вы можете ограничить свои телефоны, скажем, 10 на телефон и покрыть большую территорию без особых проблем. Это будет выглядеть примерно так:

rdr rtk0 123.123.123.123/32 port 10000-10009 -> 192.168.100.11 port 10000 udp
rdr rtk0 123.123.123.123/32 port 10010-10019 -> 192.168.100.12 port 10010 udp

Установите диапазоны RTP на своем телефоне в соответствии с их уникальными диапазонами, и все будет относительно хорошо.

Обратите внимание, что использование адреса SIP-сервера в RDR делает это гораздо менее рискованным, чем полное перенаправление адреса 0.0.0.0/0.

person Dave Burgess    schedule 07.03.2012