<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>{ :ivan =&#62; :hq } &#187; Asterisk</title>
	<atom:link href="http://ivanhq.net/category/asterisk/feed/" rel="self" type="application/rss+xml" />
	<link>http://ivanhq.net</link>
	<description>Unix, tecnología y algunas cosas sobre mí</description>
	<lastBuildDate>Wed, 08 Sep 2010 18:07:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Asterisk y el maldito SIP NAT</title>
		<link>http://ivanhq.net/2006/09/18/asterisk-y-el-maldito-sip-nat/</link>
		<comments>http://ivanhq.net/2006/09/18/asterisk-y-el-maldito-sip-nat/#comments</comments>
		<pubDate>Mon, 18 Sep 2006 16:11:34 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[Networking]]></category>

		<guid isPermaLink="false">http://ivanhq.net/2006/09/18/asterisk-y-el-maldito-sip-nat/</guid>
		<description><![CDATA[Después de muchos dolores de cabeza por fin he conseguido hacer funcionar una centralita Asterisk con algunos problemas de enrutamiento. Es sabido que SIP da problemas cuando las terminales se encuentran detrás de un router o firewall, debido a que las cabeceras de los paquetes incluyen la dirección original de la petición, con lo cual [...]]]></description>
			<content:encoded><![CDATA[<p><img width="128" height="63" align="left" id="image70" alt="logo_rev.gif" src="http://ivanhq.net/wp-content/uploads/2006/09/logo_rev.gif" />Después de muchos dolores de cabeza por fin he conseguido hacer funcionar una centralita Asterisk con algunos problemas de enrutamiento. Es sabido que <a href="http://www.voip-info.org/wiki/view/NAT+and+VOIP">SIP da problemas</a> cuando las terminales se encuentran detrás de un router o firewall, debido a que las cabeceras de los paquetes incluyen la dirección original de la petición, con lo cual el servidor no sabe como enrutar las respuestas. Existen varias soluciones según el mapa de la instalación, que comunmente cuenta con un servidor conectado directamente a Internet y varas terminales enrutadas por el firewall/router de una oficina.</p>
<p>En este caso, el mapa consta de dos oficinas cuyos dispositivos están enrutados por firewalls con <a href="http://www.netfilter.org">Netfilter</a>. La oficina B hospeda el servidor Asterisk y varias terminales SIP. La oficina A hospeda sólamente terminales. De momento las terminales son ordenadores con <a href="http://sjlabs.com/sjp.html">SJphone</a> o <a href="http://www.twinklephone.com/">Twinkle</a>, pero ahora vamos a sustituirlos por <em>hardphones</em>. Los firewalls están a su vez enrutados por los routers ADSL correspondientes, configurados en modo DMZ (NAT de todos los puertos, que no es lo mismo que un Bridge). Así, las terminales de la oficina B no tienen problemas para registrarse contra el servidor ni para establecer llamadas entre ellos. El problema lo tienen las terminales de la oficina A, que deben pasar 4 NAT&#8217;s antes de registrarse o hablar con el destino.</p>
<p>Aquí el mapa:</p>
<div style="text-align: center"><img alt="netmap011.png" id="image68" style="width: 456px; height: 221px" src="http://ivanhq.net/wp-content/uploads/2006/09/netmap011.png" /></div>
<div style="text-align: left">Para conseguir hacerlo funcionar he necesitado un proxy SIP para la oficina A. He encontrado un par, pero <a href="http://pof.eslack.org">Pof</a> me habló de <a href="http://siproxd.sourceforge.net/">Siproxd</a> y la verdad es que es sencillo de usar y la docu es muy buena.</div>
<div style="text-align: left">Para la configuración de Asterisk, el fichero<span style="font-weight: bold"> sip.conf</span> necesita que se especifique el uso de NAT y las direcciones interna y externa que deben llevar las cabeceras:</div>
<p align="left">
<pre>[general] context=from-sip
bindport=5060
bindaddr=0.0.0.0
srvlookup=yes
disallow=all
allow=gsm
allow=ulaw
allow=ilbc
language=es
nat=yes
insecure=very
relaxdtmf=yes
dtmfmode=info
externip=111.222.333.444
localnet=192.168.2.0/255.255.255.0</pre>
<p align="left">El campo <span style="font-weight: bold">externip</span> es la IP externa del router que hospeda el Asterisk (el de la oficina B). EL campo <span style="font-weight: bold">localnet</span> es la red interna de la oficina, a la que está conectado el servidor.</p>
<p align="left">En el fichero <span style="font-weight: bold">rtp.conf</span>, especifico el rango de puertos que se usará para la transmisión de audio:</p>
<pre>[general]
rtpstart=7000
rtpend=20000</pre>
<p align="left">Instalo <span style="font-weight: bold">siproxd</span> en la oficina A, y siguiendo la <a href="http://siproxd.sourceforge.net/index.php?op=odoc">docu</a> especifico los parametros necesarios en la configuración (/etc/siproxd.conf):</p>
<pre>if_inbound = eth1
if_outbound = eth0
hosts_allow_reg = 192.168.1.0/24
sip_listen_port = 5060
daemonize = 1
silence_log = 1
log_calls = 1
user = siproxd
registration_file = /var/lib/siproxd/siproxd_registrations
pid_file = /var/run/siproxd/siproxd.pid
rtp_proxy_enable = 1
rtp_port_low = 7000
rtp_port_high = 20000
rtp_timeout = 300
default_expires = 600
debug_level = 0
debug_port = 0</pre>
<p align="left">Lanzo siproxd habilitando el nivel 1 de debug:</p>
<pre>siproxd -d -1</pre>
<p align="left">Añado al firewall de la oficina A (donde está el proxy) las reglas de <a href="http://www.netfilter.org">iptables</a> que redirigen las peticiones SIP a modo de proxy transparente. Es lo mismo que cuando se monta por ejemplo un proxy web transparente con Squid:</p>
<pre># Siproxd
iptables -t nat -A PREROUTING -m udp -p udp -i eth1 --destination-port 5060:5082 -j REDIRECT
iptables -A INPUT -m udp -p udp -i ppp0 --dport 5060:5082 -j ACCEPT
iptables -A INPUT -m udp -p udp -i ppp0 --dport 7000:20000 -j ACCEPT</pre>
<p align="left">Y ya está. Las extensiones SIP las configuro como de costumbre:</p>
<pre>[110]
type=friend
context=from-sip
secret=xxx
language=es
username=110
host=dynamic
reinvite=no
canreinvite=no</pre>
<p align="left">Y en el dialplan no hay nada especial que especificar. Así funciona perfectamente, la receta la he encontrado dando vueltas por <a href="http://www.asteriskguru.com">Asteriskguru</a>, pero no me pregunteis dónde porque la verdad es que ya no recuerdo todo lo que he leído.</p>
<p align="left">Por cierto, que todo esto lo he montado en Slackware, y he creado los paquetes TGZ para instalar Siproxd por si alguien los requiere. Están aquí:</p>
<p align="center"><a href="/stuff/libosip2-2.2.2-i686-1.tgz">libosip2-2.2.2-i686-1.tgz</a><br />
<a href="/stuff/siproxd-0.5.13-i686-1.tgz">siproxd-0.5.13-i686-1.tgz</a></p>
<p align="left">Espero que a alguien pueda servirle. Desde luego a mí me ha traído de culo, y como las configuraciones cambian según el mapa de cada instalación es difícil encontrar una ayuda <em>personalizada</em> para solventarlo.</p>
<p align="left">Ahora tengo que cambiar los softphones por hardphones, y espero no encontrarme ninguna sorpresa más. He pensado usar <a href="http://www.avanzada7.com/eshop/product_info.php?cPath=21_28&#038;products_id=64">Grandstream BT101</a> para los terminales corrientes, y  un <a href="http://www.grandstream.com/y-gxp2000.htm">GXP-2000</a> para la operadora, pero si a alguien se le ocurre un hardware más apropiado a un precio similar agradecería que me lo recomiende :)</p>
]]></content:encoded>
			<wfw:commentRss>http://ivanhq.net/2006/09/18/asterisk-y-el-maldito-sip-nat/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
