In an effort to help our customers ensure their network devices will provide the best service possible we are posting our findings on several routers, and will work to update as we find others with problems. This list is not a complete list, as we get reports from the field or through in house testing of devices that cause issues we will add them to the list. There are certainly devices in the market place that will cause problems that we have not yet run across so please do not use this list as a definitive guide and assume that any device not listed is therefore endorsed.
(Excerpt from: VoIP-Info.org)
Many of today's commercial routers implement SIP ALG (Application-level gateway), coming with this feature enabled by default. While ALGs are intended to help in solving NAT related problems, the fact is that many routers' ALG implementations are wrong and break SIP.
The main problem is the poor implementation at SIP protocol level of most commercial routers and the fact that this technology is just useful for outgoing calls, but not for incoming calls:
- Lack of incoming calls: When a UA is switched on it sends a REGISTER to the proxy in order to be localizable and receive incoming calls. This REGISTER is modified by the ALG feature (if not the user wouldn't be reachable by the proxy since it indicated a private IP in REGISTER "Contact" header). Common routers just maintain the UDP "connection" open for a while (30-60 seconds) so after that time the port forwarding is ended and incoming packets are discarded by the router. Many SIP proxies maintain the UDP keep-alive by sending OPTIONS or NOTIFY messages to the UA, but they just do it when the UA has been detected as natted during the registration. A SIP ALG router rewrites the REGISTER request so the proxy doesn't detect the NAT and doesn't maintain the keep-alive (so incoming calls will be not possible).
- Breaking SIP signaling: Many of the actual common routers with inbuilt SIP ALG modify SIP headers and the SDP body incorrectly, breaking SIP and making communication just impossible. Some of them do a whole replacing by searching a private address in all SIP headers and body and replacing them with the router public mapped address (for example, replacing the private address if it appears in "Call-ID" header, which makes no sense at all). Many SIP ALG routers corrupt the SIP message when writting into it (i.e. missed semi-colon ";" in header parameters). Writing incorrect port values greater than 65536 is also common in many of these routers.
- Disallows server side solutions: Even if you don't need a client side NAT solution (your SIP proxy gives you a server NAT solution), if your router has SIP ALG enabled that breaks SIP signaling, it will make communication with your proxy impossible.