VoIP, Linux, Security & much more fun
If you need any help regarding these subjects do not hesitate about sending me a text

Today while doing a little support I had this strange issue: if a user dials out through a carrier, he/she will listen to the ringback tone right away; but if this same user calls to another extension he/she won't listen right away. Instead, you will have a variable dead air and then suddenly, the callee will answer.

When a caller listens to a ringback tone, it means that the callee has been reached and it has answered with a SIP signal. Usually, the normal SIP flow is as follows (it could vary):

  1. Caller sends the INVITE to the switch
  2. Switch answers with ACK
  3. Switch sends the INVITE to the callee
  4. Callee sends the ACK
  5. Callee answers with a 1XX answer (could be 100 or 183) to report it started the ringing
  6. Switch sends a 1XX answer to the caller followed by an RTP flow of the ringback tone
  7. Callee answers
  8. The switch sends an 183 (session in progress) followed by the voice RTP flow

Today I have just published in the OKay's RPM repository RPMs for libuv 1.9.1. libuv is a multi-platform support library with a focus on asynchronous I/O. It was primarily developed for use by Node.js, but it's also used by LuvitJuliapyuv, and others.

FreeSWITCH 1.6.10 needs libuv >= 1.0.0. This is the second step of the many changes that FreeSWITCH 1.6.10 has. Stay tunned!

RPM's are available for Centos 6 and 7. And you can find it if you type yum search libuv.


Today I have just published in the OKay's RPM repository RPMs for libShout 2.4.1. libshout is a library for communicating with and sending data to an icecast server. It handles the socket connection, the timing of the data, and prevents most bad data from getting to the icecast server.

FreeSWITCH 1.6.10 needs libshout >= 2.3.1. This is the first step of the many changes that FreeSWITCH 1.6.10 has. Stay tunned!

RPM's are available for Centos 6 and 7. And you can find it if you type yum search libshout.


First of all, I don't like VoIP Innovations. My personal experience with them was not good and I ran away immediately. Besides the technical requirements, there are some commercial ones that I totally disagree. A good customer and friend of mine told me they are now asking for a minimum 200 USD monthly charge. This means, regardless if you have one DID or much more, they will bill you always two hundred American dollars minimum. I have not confirmed that, and I don't want. But don't take it wrong, for a reason VoIP Innovation is very popular in the United States. They totally support the intrastate and interstate thing (something that I have only seen in the US) and they give native SMS support with SIMPLE SIP.

The FreeSWITCH (and the FusionPBX) work with VoIP Innovation trunk, but they won't work out of the box. There are some configurations you should do in the gateway configuration. It is not just that it is annoying, it is that there are many restrictions, and a minimum parameter sends a 503 error code right away, without any further explanation. So, for those poor souls who still need to deal with this carrier, I will put this useful notes.

Today, I am really tired. It was a very exhausted day. I have been configuring many clusters to give high availability. This thing of giving support to three clients almost at the same time is very exhausting. However, one coment of them made me the day.

Just your presence alone makes things work better

Maybe some sysadmin fellows will agree that machines fear us. Our only presence makes them to behaive, then we left and all goes down again.


Today I have just published in the OKay's RPM repository RPMs for CasperJS 1.1.3. CasperJS is an open source navigation scripting & testing utility written in Javascript and based on PhantomJS. It eases the process of defining a full navigation scenario and provides useful high-level functions, methods & syntactic sugar for doing common tasks.

CasperJS needs PhantomJS 1.9. My RPM will download this dependency for you.

RPM's are available for Centos 6 and 7. And you can find it if you type yum search casperjs.


Syncthing 0.14.4 RPMs for Mageia Cauldron (6) are now available since today. Syncthing is a complete synchronization, multi-platform solution to have same files in your devices. It is like a Peer-to-Peer.

Syncthing is an excellent option if you have at least one road warrior involved. Since there is no warranty of a public IP or even a static IP, Syncthing architecture allows clients to bypass NAT's and allow file exchange. The good thing of Syncthing is it is available not only on Linux and Windows but Android as well. You can have in sync important files in your mobile or tablet.

Syncthing 0.14.x is not compatible with 0.13.x. You must update all your devices. Backport for Mageia 5 is more difficult as it seems. I am not able to reproduce it in the build system. Mageia 5 has Golang 1.4 which it is not compatible with Syncthing 0.13.x. Someone has ported back golang 1.6 into Mageia 5, this means you can compile syncthing under Mageia 5 using the SRPM without issues. To do this, you must enable the backport/release repository.

As part of my commitment with Mageia, I will try to keep this package as updated as possible. The team from Syncthing are very responsive and they release new versions very often. At the time when writing this article, Mageia Cauldron 6 is in version freeze; this means we will need to wait for a little until the big system administrators let the new RPM in.

RPM's are available for Mageia Cauldron (6), I will be working to backport to Mageia 5 as soon as possible. You can install it if you type urpmi syncthing.

The Canadian Job Bank is the official place where an employer needs to posts its job offer in order to start running the many government hiring processes such as getting an LMIA. I will describe in this article how to post a vacancy. First things you need to do is to register yourself as an employer. The first thing you need to do is to open an account. You will need the following things:

  • Social Security Number (a non-temporal one),
  • Personal data

By accessing to the Canadian Employers Job Bank page, you will be able to register. The sign-up is not immediate, you will need to way for a verification and in the worst case, you will get an email asking for documentation or to present in person in a Canada Service to enable it. Once you are verified you will need to setup an Enterprise. One person has an account who can register one or more enterprises. Until you verified an enterprise, you won't be able to post a job offer. To verify an enterprise you will need the following:

  • Telephone bill
  • Company's payroll deduction form (also known as PD7A)

You will be contacted to send this documentation. If you don't know how PD7A looks like, they will send you these images as a guide.


Until then you will be able to post a job offer. I will start talking about the processes.

These days all is in the cloud. Being in the cloud means your service or information is on someone's server without knowing exactly where it is. Being in the cloud is as easy as renting some VPS'es. Now you are "in" with the technology, but that it is not enough. Depending your business, you may be worried about being online as much as possible and at the same time to keep your costs down. If you do an Internet search, you will find that the most common high availability option is having all servers in the same datacenter by sharing an IP (also known as floating IP). This could work, but you will have all your eggs in the same nest (not very smart for high availability), there are some VPS companies with this option, but again, in order to allow the IP switch the containers must be in the same collision domain (that not always is the same sub-network) which it means again, all eggs in the same nest.

Well, today is your lucky day, there is another approach that allows high availability: the smart DNS balancing. DNS will let the end-points get the correct IP depending some network, software and business conditions. This means that you can have VPS'es spread around the world, and depending the real-time decision they may get IP A or IP Z. If you do a little research, you will find some professional solutions such as F5 which it is crazy expensive and it is really a headache to make it work properly. So, I have my own solution: my very own smart DNS software.

I will introduce this software to you and I will show a brief setup.

After you have already setup your MySQL or MariaDB cluster in master-master mode, the next step is to know how to put this in high availability or load balance scheme. One of the many software you can use for this is the HAProxy project. HAProxy is a TCP/HTTP reverse proxy which is particularly suited for high availability environments. Indeed, it can: route HTTP requests depending on statically assigned cookies, spread load among several servers while assuring server persistence through the use of HTTP cookies, switch to backup servers in the event of a main server fails, accept connections to special ports dedicated to service monitoring, stop accepting connections without breaking existing ones, add, modify, and delete HTTP headers in both directions, block requests matching particular patterns, report detailed status to authenticated users from a URI intercepted by the applications.

So, I will explain how I did this configuration.

Some months ago I wrote an article explaining how to configure MariaDB using Galera Cluster in Master-Master mode. However, when you are behind a NAT there are some changes you must do in order to let this cluster to work. 

In the configuration you should put attention on the following parameters (it only applies to the server that is behind the NAT):

  • wsrep_cluster_address=gcomm://INTERFACE_IP_SERVER_A, PUBLIC_IP_SERVER_B
  • wsrep_node_address=NATTED_IP_SERVER_A

I am assuming SERVER_A is the one with the NAT and SERVER_B is an external server, where we only matter the attached public IP. If all servers are behind a NAT, you should apply the same logic. 

Good Luck!

FreeSWITCH it is an excellent soft switch, you can do all your imagination asks for. If you combining it with FusionPBX you can have a very nice experience managing your switch. However, the out-of-the-box configuration is not suitable for everyone. It happens I have a customer who uses the Freeswitch for call termination in a very particular way. They only serve a busy or calling tone (depending some conditions) to all the incoming calls.

The big issue here was the stress, the carrier they are using has a 3 seconds tolerance timeout and they need to serve as much calls as possible. The FusionPBX server was having an issue when receiving more than 200 cps, the carrier was reporting times out (more than 3 seconds to answer). In this article, I will try to put notes of what I did to increase the cps up to 450 (as 450 was the number my customer reported). Please note this VoIP switch are not intented for end-user use, some of the techniques won't apply to other kind of deployments.

If you need more help than the free one provided here...