LINUX.ORG.RU
ФорумAdmin

Sip через NAT или как? (очень нужно помогите пожалуйста)


0

1

Ситуация такая. Стоит в сети станция siemens, йп ее шлюза 192.168.0.251. В качестве шлюза с внешним миром Frebsd натит трафик и pf в качестве фаервола. белый йп наружу 111.111.111.111 и внутренный 192.168.0.201. Необходимо из внешки подключаться sip телефоном или прогой на компе к станции. Во внутренней сети все работает.

Добился только то что телефон подключатся (регистрируется) но не слышно голоса (rtp трафик не идет). Вычитал что через нат не получится. Нашел 2 решения Siproxd, stun. Но пока тоже не получается пробросить rtp наружу.

/usr/local/sbin/siproxd -d -1 2 > debug.log выдает

sip_find_direction: unable to determine direction of SIP packet

Подскажите, в правильную сторону я смотрю или есть другие решения. Ведь кто-то делал подобное!!! Желательно с примерами. Очень нужно пожалуйста!!!



Последнее исправление: romanb (всего исправлений: 1)

На машинке с прямым IP ставь OpenSIPs/kamailio + rtpproxy/mediaproxy и правильно их настрой. Еще можно раскочегарить asterisk/freeswitch и тоже правильно настроить.

plm ★★★★★
()

Конфиг нормальный для siproxd напиши.

Ну а еще лучше - снеси нафиг фрю, поставь линукс, в нем в netfilter есть conntrack/nat для SIP.

no-dashi ★★★★★
()

есть отличное решение:
vpn для voip клиентов снаружи. при нормально настроенном роутинге работает так, будто бы вы в локальной сети =)

вообще тебе нужно дампануть трафик клиента на шлюзе и проанализировать.
какие адреса в сигнализации, какие порты и тд.
велика вероятность что твой нат не пускает внутрь rtp трафик. можешь попробовать пробросить udp диапозон, согласно документации твоего сименса.

сименс stun не понимает?

fr_butch
()
Ответ на: комментарий от fr_butch

stun пробовали, не понимает. freebsd сносить - не вариант. на серваке поднят mpd5 - так вот если подключиться из вне к нему - то все работает, НО как быть с телефонами SIP - они не умеют поднимать pptp соединение. Смысл как раз в них, програмным клиентом так и делали пока не пришла необходимость в телефонах. Можно конечно ставить роутер и на нем поднимать соединение и цепляться к нему, но это костыли.

Станция исходя из документации использует rtp порты udp- 29100-29131. пробовали прокидывать их в pf - не помогает.

в siproxd указываю эти порты - тоже не понимает, конфиг siproxd ниже (из документации - нужно менять только названия интерфейсов и порты если нужно и все.)

if_inbound = xl0 # (внутренный - в локалку)

if_outbound = vr0 #(внешний белый йп наружу 111.111.111.111)

hosts_allow_reg = 0.0.0.0/0 # всем

hosts_allow_sip = 0.0.0.0/0 # всем

#hosts_allow_sip = 0.0.0.0/0

#hosts_allow_reg = 192.168.1.8/24

#hosts_allow_sip = 123.45.0.0/16,123.46.0.0/16

#hosts_deny_sip = 10.0.0.0/8,11.0.0.0/8

sip_listen_port = 5060

daemonize = 0 # для отладки

silence_log = 0

user = nobody

chrootjail = /usr/local/siproxd/

registration_file = siproxd_registrations

autosave_registrations = 300

pid_file = siproxd.pid

rtp_proxy_enable = 1

rtp_port_low = 29100 # исходя из настроек станции

rtp_port_high = 29131 #

rtp_timeout = 300

rtp_dscp = 46

rtp_input_dejitter = 0

rtp_output_dejitter = 0

default_expires = 600

debug_level = 0x00000000

debug_port = 0

plugindir=/usr/local/lib/siproxd/

load_plugin=plugin_logcall.so

plugin_demo_string = This_is_a_string_passed_to_the_demo_plugin

plugin_shortdial_akey = *00

plugin_shortdial_entry = 17474743246

plugin_shortdial_entry = 17474745000

plugin_defaulttarget_log = 1

plugin_defaulttarget_target = sip:internal@dddd:port

plugin_fix_bogus_via_networks = 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16

и конфиг pf может в нем что -то неправильно?? привожу все варианты которые пробовали

#rdr on vr0 inet proto tcp to 111.111.111.111 port 5060 -> 192.168.0.251 port 5060

#rdr on vr0 inet proto udp to 111.111.111.111 port 5060 -> 192.168.0.251 port 5060

#rdr on vr0 inet proto udp to 111.111.111.111 port 29100:29131 tag tel_sip -> 192.168.0.251 port 29100:29131

#pass in on vr0 inet proto udp from any to 111.111.111.111 port {5060, 29100:29131, 1024:65535} keep state

как еще попробовать??

romanb
() автор топика
Ответ на: комментарий от romanb

Ну для начала надо посмотреть сниффером что куда ходит. Во время звонка:

ngrep -d eth0 -qt -W byline port 5060 and host <ip телефона>
tcpdump -i eth0 -s0 port 5060 and host <ip телефона> -w nat_issue.pcap
tshark -i eth0 -R rtp
anton_jugatsu ★★★★
()
Ответ на: комментарий от anton_jugatsu

Подолжил эксперименты дома. Имею бук с дебианом, подключенный через роутер в нэт, на нем поднимаю ppp, qutecom работатет. Делаю из бука шлюз, (ppp0 (192.168.255.9) - типа наружу, wlan0 (192.168.10.6) - внутрь)

iptables

iptables -A INPUT -i lo -j ACCEPT

# Разрешаем пакеты с состоянием ESTABLISHED и RELATED по протоколам TCP и UDP

iptables -A FORWARD -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -p udp -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -t nat -A POSTROUTING -o ppp0 -j SNAT --to-source 192.168.255.9

цепляю сип телефон (192.168.10.9) по лану к роутеру, прописываю в нем шлюз - wlan0(192.168.10.6) он регистрируется, звука нет. выхлоп при звонке с струбки

tshark -i ppp0 -R rtp

54.694700 192.168.255.9 -> 192.168.0.251 RTP 216 PT=ITU-T G.711 PCMU, SSRC=0xC7BEC5FE, Seq=815, Time=1063200

54.714694 192.168.255.9 -> 192.168.0.251 RTP 216 PT=ITU-T G.711 PCMU, SSRC=0xC7BEC5FE, Seq=816, Time=1063360

54.734710 192.168.255.9 -> 192.168.0.251 RTP 216 PT=ITU-T G.711 PCMU, SSRC=0xC7BEC5FE, Seq=817, Time=1063520

-----------------------------------------------------------------------

ngrep -d wlan0 -qt -W byline port 5060 and host 192.168.10.9

interface: wlan0 (192.168.10.0/255.255.255.0)

filter: (ip or ip6) and ( port 5060 and host 192.168.10.9 )

U 2012/03/18 11:14:57.093241 192.168.10.9:5060 -> 192.168.0.251:5060

INVITE sip:набираемыйномер@192.168.0.251;user=phone SIP/2.0.

Via: SIP/2.0/UDP

192.168.10.9:5060;branch=z9hG4bK61096036f80d8b51ff96e4e705f906;rport.

From: «1299» <sip:1299@192.168.0.251>;tag=991259266.

To: <sip:набираемыйномер@192.168.0.251;user=phone>.

Call-ID: 566469740@192_168_10_9.

CSeq: 2 INVITE.

Contact: <sip:1299@192.168.10.9:5060>.

Max-Forwards: 70.

User-Agent: A510 IP/42.051.01.000.000.

Supported: replaces.

Allow-Events: message-summary, refer, ua-profile.

Allow: INVITE, ACK, CANCEL, BYE, OPTIONS, INFO, REFER, SUBSCRIBE, NOTIFY.

Content-Type: application/sdp.

Content-Length: 371.

.

v=0.

o=1299 40042 26 IN IP4 192.168.10.9.

s=Mapping.

c=IN IP4 192.168.10.9.

t=0 0.

m=audio 40042 RTP/AVP 18 96 97 2 8 0 9 101.

a=rtpmap:18 G729/8000.

a=fmtp:18 annexb=no.

a=rtpmap:96 G726-32/8000.

a=rtpmap:97 AAL2-G726-32/8000.

a=rtpmap:2 G726-32/8000.

a=rtpmap:8 PCMA/8000.

a=rtpmap:0 PCMU/8000.

a=rtpmap:9 G722/8000.

a=rtpmap:101 telephone-event/8000.

a=fmtp:101 0-16.

1299 - это логин и внутр. номер на станции, к нему привязан еще городской для обратных звонков. rtp порты у станции 29100-29131, а что за порт 40042? ну у меня все порты открыты.

-----------------------------------------------------------------------

tcpdump -i wlan0 -s0 port 5060 and host 192.168.10.9

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes

11:02:43.651529 IP 192.168.10.9.sip > 192.168.0.251.sip: SIP, length: 964

11:02:43.694197 IP 192.168.0.251.sip > 192.168.10.9.sip: SIP, length: 392

11:02:43.776797 IP 192.168.10.9.sip > 192.168.0.251.sip: SIP, length: 429

11:02:48.478005 IP 192.168.10.9.sip > 192.168.0.251.sip: SIP, length: 473

11:02:48.513552 IP 192.168.0.251.sip > 192.168.10.9.sip: SIP, length: 536

11:02:48.536630 IP 192.168.10.9.sip > 192.168.0.251.sip: SIP, length: 763

11:02:48.580769 IP 192.168.0.251.sip > 192.168.10.9.sip: SIP, length: 373

11:02:48.588436 IP 192.168.0.251.sip > 192.168.10.9.sip: SIP, length: 432

11:02:53.162304 IP 192.168.10.9.sip > 192.168.0.251.sip: SIP, length: 964

Звука нет, порты прокидывал, чтотолько не делал, добился только регистацию и отсутствие звука, куда дальше копать? Вот еще, модули подключил. modprobe -l | grep sip

kernel/net/netfilter/nf_conntrack_sip.ko

kernel/net/netfilter/ipvs/ip_vs_pe_sip.ko

kernel/net/ipv4/netfilter/nf_nat_sip.ko

sipproxy & stun не получилось, регистрация не проходит. Замучился уже, ну както оно должно работать я чувствую - иснина где то рядом...

romanb
() автор топика
Ответ на: комментарий от romanb

tcpdump | grep 168.10.9 при запущенном stun выдает ошибку, порт на станции не доступен , правильно я понял?

16:18:02.356554 IP 192.168.10.9.8000 > 192.168.0.251.29100: UDP, length 172

16:18:02.359069 IP 192.168.0.251 > 192.168.10.9: ICMP 192.168.0.251 udp port 29100 unreachable, length 36

romanb
() автор топика
Ответ на: комментарий от romanb

Пишу с мобилы, много букв, нарисуй схему, что хочешь получить? Почему не работает стан, при чём здесь впн , попробуй напрямую, пробрось порты

anton_jugatsu ★★★★
()

voip не любит nat

сабж.
SIP - это voip сигнализация.
В Siemens она поверх чего бежит (TCP/UPD/TLS)?
Начните с этого. В соответствии с этим и способы проброса выбирайте.

bashnia
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.