One problem that some VoIP users are experiencing these days is that they have trouble connecting to their home Asterisk, FreeSWITCH, YATE, or other software PBX server, but only when using certain ISP’s. One suspicion is that certain ISP’s that offer their own VoIP or traditional landline service attempt to mess with packets using the common SIP port 5060, hoping customers will think that VoIP is unreliable and will subscribe to the company’s overpriced offering instead (see this thread at BroadbandReports.com).
There are various ways to enable an alternate SIP port on the server (in addition to the usual port 5060) but if you are using Webmin to manage your firewall, here’s an easy way, in just three steps:
If you use Webmin to manage your firewall, then you already know how to get to the Linux Firewall page. So go there and select the Network Address Translation (nat) table in the dropdown at the top of the page. Then when the page changes, click the topmost Add Rule button (in the Packets before routing (PREROUTING) section):
Now you should see this page. The items you need to change are indicated by the red ovals. The Destination TCP or UDP port is set to 7654 in this example, but don’t use that. Pick your own unique port; just make sure that it’s not used by anything else on the server already. And yes, you really do put the alternate SIP port you want to use in the Destination setting; it may not make intuitive sense but that’s just how it is. Avoid using ports in the range 10000 through 20000 because those are used for RTP traffic, and avoid ports below 1024 because those are protected ports that are reserved by the system. There are also other ports you should avoid (those used by other software on your system) but if you don’t know how to find ports in use on your system, a bit of time with a search engine will lead you to several pages that show you how to detect already active ports. It can vary a bit depending on your operating system, and it’s beyond the scope of this article.
SIP traffic is UDP only, not TCP (there may be rare exceptions but most software PBX’s use UDP by default). If by some very odd chance you are using TCP for SIP traffic (why?!?) then you will need to specify that under the Network Protocol item. Also, note that the incoming interface is set to eth0 in this example – Webmin will usually show the correct one by default, but you want to select the interface used by incoming SIP traffic if you happen to have more than one. Don’t forget to click Save when you’re finished.
After you have saved the page you should be back at the page you came from, and it should now show your new forwarding rule. If it does, just click Apply Configuration at the bottom of the page to make it active:
One other thing you might need to to is add a rule on the main Linux Firewall page allowing incoming traffic on your selected alternate port, if you have a restrictive firewall that blocks most traffic by default. Try it first without doing that, but if your clients can’t connect on the alternate port, just be aware that you may need to do that before they will be able to connect. For more security, you can enable access to your SIP ports only from specific IP addresses, if your remote clients are at fixed IP addresses.
Now you should be able to change the port number on your SIP endpoints from the default 5060 to your alternate port. Of course I can’t guarantee it will always work, but if you try it and suddenly find that your SIP connections become far more reliable, you might want to leave a comment, and mention the ISP that you suspect might be messing with SIP traffic.
By the way, if you are NOT using Webmin to manage your firewall, and have iptables installed, then all you should need to do is enter these two lines from a command prompt (replace 7654 with your chosen alternate port). But I strongly caution you NOT to do this if you are using Webmin to manage your firewall:
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 7654 -j REDIRECT --to-ports 5060