[Asterisk-Users] Suggestion re: SIP/NAT/*
Karl Brose
khb at brose.com
Fri Oct 29 14:01:17 MST 2004
RE: SIP and NAT
Of course it is not "nonsense" running Asterisk and/or SIP behind a NAT.
In fact it can and does work well if set up properly by the various methods
available, many are technically sound and reliable and potentially secure.
I am running one Asterisk server behind a commercial, mass-market
consumer NAT router using STUN support in Asterisk and processing over
2000 calls per week (not a heavy load at all, though)
NAT does not introduce any instability issues in most cases. Understanding
the NAT and characterizing it properly is important of course. Anything can
be made insecure without care.
The methods obviously need to be evaluated and selected on a case by
case basis.
"Double NAT", id est, device behind NAT and server behind another NAT,
can work as well with proper care and insight.
The notion that SIP and NAT together are somehow improper or unprofessional
is total nonsense. NAT is a fact of networking today and has a proper place,
despite the misuse of it and the unfortunate proliferation despite better
practices (i.e. IPv6). IAX is no adequate replacement option for SIP
either.
One difficulty with Asterisk NAT traversal is that none of the existing
methods in * are
properly or at all documented and not many people actually know what they do
or how they work internally, Even the Wiki recently (perhaps still?)
states that this
is not well understood.
The existing NAT traversal methods are:
a) SIP symmetric UDP transmission (send SIP packets to the address and
port
from which we receive a packet) which is triggered with the nat=yes/no
parameter
b) partial implementation of RFC 3581, the "rport" header feature for
receiving
back the port number from which we sent our request. However, this
information
is then not used, therefore the feature is useless when Asterisk is
behind NAT.
Asterisk does now provide rport info to clients behind NAT
This function is also controlled by the recent additions to nat=,
however this is
improper and rather confusing and should be controlled independently
with
a separate parameter (use_rport=yes, send_rport=yes)
c) Symmetric RTP, like connection-oriented mode (similar to TCP),
sending RTP back to a port from which we received the audio,
This works ok in some respects, but is not indicated in the SDP headers
as described in the mmusic-commedia draft, so proper
interoperability with
other devices is not likely. Also controlled by nat= in another
confused way.
d) the qualify=yes/no/# option, probably not intended as a NAT helper
originally,
rather as a client/network monitoring tool, but can help to keep NAT
port bindings
for SIP protocol active. This sends SIP OPTION packets.
e) a decision logic based on the peer IP address and the local routing
table and
localnet= settings, to decide whether to turn on symmetric
transmissions.
This is useful when multiple interfaces exist on the server and SIP
is bound to
0.0.0.0, ie. all interfaces. This mechanism has been found to not
work correctly
when using IP aliases in some situation, rather than discrete
hardware interfaces.
Coming methods:
f) STUN. Has been running here in test mode and clients' networks Will
be released
in the near future. It provides for totally automatic configuration
of bindaddress,
externip, localnet, etc settings, and properly opens RTP ports with
the assistance
of a STUN server and corrects the settings in SDP headers.
g) outbound proxy, has been implemented, but release is questionable,
there are
many different interpretations of what an outbound proxy is or does,
perhaps
use in a similar fashion as the Freeworlddialup o/b proxy. SIP
devices behind
symmetric NATs typically require a provider-supplied remote outbound
proxy,
unless port forwarding can used.
Port forwarding of course is also a proper technique used in
environments with firewalls
and NATs to the open Internet, but often many ports need to be opened
for servers with
higher call volume as each call requires independent UDP ports for RTP.
IAX, which doesn't use RTP, doesn't have this requirement as all traffic
uses a
well-known port. This makes IAX easier to use through firewalls and NAT
If it is a concern to people that many ports need to be opened for SIP
to operate,
than perhaps you might want to reconsider using Asterisk SIP at all. It
opens
RTP ports (at least 2, but 4 when video support is turned on) on every SIP
request, whether or not audio actually will get transmitted, so even for a
simple REGISTER or OPTION it will allocate RTP sockets and bind to ports.
These are expensive system calls and if used indiscriminately, can cause
substantial system load. Some SIP providers out there that have used
Asterisk
SIP as their SIP server probably have found the limits from this quickly.
SIP call control is a fairly lightweight affair actually, if done properly.
For example, IPTel.org states that SER (SIP Express Router) can serve the
size of a metropolitan area easily with a regular PC or so.
BTW, to fix Asterisk SIP and RTP requires quite a bit of surgery, but will
be included in a STUN package (among other goodies often
requested/complained
about on the list)
One of the best papers on this subject, SIP traversal across NATs can be
found
at the SIEMENS site:
http://mysip.ch/sub_furtherinformation/sub_nat/doc/sip_architecture_with_nat_v1.0.pdf
Steve Totaro wrote:
> I would agree that it is not good to suggest or impliment a solution
> that is not a "Best Practice" unless it is a last resort.
>
>
> ----- Original Message ----- From: "Bill Seddon"
> <bill.seddon at lyquidity.com>
> To: "'Asterisk Users Mailing List - Non-Commercial Discussion'"
> <asterisk-users at lists.digium.com>
> Sent: Friday, October 29, 2004 1:01 PM
> Subject: RE: [Asterisk-Users] Suggestion re: SIP/NAT/*
>
>
>> Karl
>>
>> Are you saying it is nonsense that there difficulties using Asterisk
>> and SIP
>> behind a NAT server. Or are you saying it is nonsense that SIP and
>> NAT are
>> dangerous together?
>>
>> Bill Seddon
>>
>> -----Original Message-----
>> From: asterisk-users-bounces at lists.digium.com
>> [mailto:asterisk-users-bounces at lists.digium.com] On Behalf Of Karl Brose
>> Sent: October 29, 2004 5:49 PM
>> To: Benjamin on Asterisk Mailing Lists; Asterisk Users Mailing List -
>> Non-Commercial Discussion
>> Subject: Re: [Asterisk-Users] Suggestion re: SIP/NAT/*
>>
>> NONSENSE
>>
>> Benjamin on Asterisk Mailing Lists wrote:
>>
>>> On Thu, 28 Oct 2004 14:45:46 -0600, Ryan Courtnage
>>> <ryan-lists at voxbox.ca>
>>
>> wrote:
>>
>>>
>>>
>>>> Yep, you can do this, just requires some port forwarding and special
>>>> considerations in sip.conf.
>>>>
>>>>
>>>
>>> You are missing the point. There is no *solution* to SIP NAT
>>> traversal. All there is are *workarounds*, otherwise known as bad and
>>> rather dangerous hacks. Whether it works or not is highly dependent on
>>> external factors that you don't usually control. It also depends on
>>> the type of NAT/PAT your router is using, ie the router's particular
>>> NAT/PAT implementation.
>>>
>>> The fact remains that SIP NAT traversal setups are highly insecure and
>>> unreliable. Consider this to be the equivalent of locking your
>>> apartment with duct tape. It may work for you, but you wouldn't
>>> recommend it to anyone else UNLESS you wish them harm.
>>>
>>> Now, this is valid for single NAT situations and it is even more valid
>>> for double NAT situations.
>>>
>>> If you want to do this properly without duct tape, then you will have
>>> the three choices I mentioned:
>>>
>>> - If you must use SIP, don't use NAT
>>> - If you must use NAT, use IAX
>>> - If you must use both SIP and NAT, build a tunnel
>>>
>>> Anything else is improper and unprofessional.
>>>
>>> rgds
>>> benjk
>>>
>>>
>>
>
More information about the asterisk-users
mailing list