In this chapter we try to setup VoIP system, simple at first, then more and more complex.
A (Win9x+Sound card) - - - B (Win9x+Sound card) 192.168.1.1 - - - 192.168.1.2 192.168.1.1 calls 192.168.1.2.
A and B should:
In this kind of view A can make a H323 call to B (if B has Netmeeting active) using B IP address. Then B can answer to it if it wants. After accepting call, VoIP data packets start to pass.
If you use Microsoft Windows in a lan you can call the other side using NetBIOS name. NetBIOS is a protocol that can work (stand over) with NetBEUI low level protocol and also with TCP/IP. It is only need to call the "computer name" on the other side to make a connection.
A - - - B 192.168.1.1 - - - 192.168.1.2 John - - - Alice John calls Alice.
This is possible cause John call request to Alice is converted to IP calling by the NetBIOS protocol.
The above 2 examples are very easy to implement but aren't scalable.
In a more big view such as Internet it is impossible to use direct calling cause, usually, the callers don't know the destination IP address. Furthermore NetBIOS naming feature cannot work cause it uses broadcast messages, which typically don't pass ISP routers .
The NetBIOS name calling idea can be implemented also in a Internet environment, using a WINS server: NetBIOS clients can be configured to use a WINS server to resolve names.
PCs using the same WINS server will be able to make direct calling between them.
A (WINS Server is S) - - - - I - - - - B (WINS Server is S) N T E - - - - - S (WINS Server) C (WINS Server is S) - - - - R N E - - - - D (WINS Server is S) T Internet communication
A, B, C and D are in different subnets, but they can call each other in a NetBIOS name calling fashion. The needed is that all are using S as WINS Server.
Note: WINS server hasn't very high performance cause it use NetBIOS feature and should only be used for joining few subnets.
A problem of few IPs is commonly solved using the so called masquering (also NAT, network address translation): there is only 1 IP public address (that Internet can directly "see"), the others machines are "masqueraded" using all this IP.
A - - - B - - - Router with NAT - - - Internet C - - - This doesn't work
In the example A,B and C can navigate, pinging, using mail and news services with Internet people, but they CANNOT make a VoIP call. This because H323 protocol send IP address at application level, so the answer will never arrive to source (that is using a private IP address).
Solutions:
A - - - Router with NAT B - - - + - - - Internet C - - - ip_masq_h323 module This works
A - - - B - - - PhonePatch - - - Internet C - - - This works
With Linux (as an h323 terminal) you can experiment everything done before.
Sintax is:
"ohphone -l|--listen [options]"
"ohphone [options]... address"
Also, when you start ohphone, you can give command to the interpreter directly (like decrease AEC, Automatic Echo Cancellation).
You can also experiment gatekeeper feature
Example (Terminal H323) A - - - \ (Terminal H323) B - - - D (Gatekeeper) / (Terminal H323) C - - - Gatekeeper configuration
We have to notice that the Gatekeeper is able only to solve name in IP address, it couldn't join hosts that aren't reachable each other (at IP level), in other words it couldn't act as a NAT router.
You can find gatekeeper code here: openh323 library is also required.
Program has only to be launch with -d (as daemon) or -x (execute) parameter.
In addition you can use a config file (.ini) you find here.
As we said, gateway is an entity that can join VoIP to PSTN lines allowing us to made call from Internet to a classic telephone. So, in addition, we need a card that could manage PSTN lines: Quicknet LineJack does it.
From OpenH323 web site we download:
If executable doesn't work you need to download source code and openh323 library, then install all in a home user directory.
After that you only need to launch PSTNGw to start your H323 gateway.