이 장에서 우리는 VoIP 시스템을 설치할 것이다. 처음에는 간단하게 시작하고 점점 더 복잡한 과정으로 진행해보자.
A (Win9x+Sound card) - - - B (Win9x+Sound card) 192.168.1.1 - - - 192.168.1.2 192.168.1.1 가 192.168.1.2 를 호출 |
A 와 B 는 아래와 같아야 한다 :
MS Netmeeting (또는 유사 소프트웨어) 이 설치되어 있고 제대로 설정되어 있을 것
네트웍 카드를 가지고 있거나 다른 종류의 TCP/IP 인터페이스로 상호간 연결되어 있을 것
이런 상황에서는 A 는 H323 호출을 B 의 IP 주소를 이용해서 B 에게 시도할 수 있다 (물론 B 가 Netmeeting 을 동작시키고 있는 상황에서). 그때 B 측에서 응답할 생각이 있다면 호출에 응하게 되고, 이후에는 VoIP 데이터 패킷이 전송되기 시작한다.
MS 윈도우 시스템을 사용한다면 랜상의 다른 사용자에게 NetBIOS 이름을 사용하여 호출할 수 있다. NetBIOS 는 저수준 프로토콜 NetBEUI 와 함께 작동할 수 있으며 또한 TCP/IP 와도 연동하 수 있다. 상대방으로의 연결을 이루기 위해 필요한 것은 오직 "컴퓨터 이름" 뿐이다.
A - - - B 192.168.1.1 - - - 192.168.1.2 John - - - Alice John 이 Alice 를 호출 |
이것은 John 이 Alice 에게 보낸 호출 요청은 NetBIOS 프로토콜에 의해 IP 주소로 바뀌기 때문이다.
위에서 설명한 두 가지 예제는 구현하기에 매우 쉽지만 확장성이 없다.
인터넷과 같이 매우 큰 규모에서는 상대방의 IP 주소를 모르는 경우가 일반적이기 때문에 직접적인 호출을 사용하는 것은 불가능하다. 게다가 NetBIOS 는 메세지를 브로드캐스팅하는 것으로 동작하는데, 이것은 통상 ISP 의 라우터를 통과하지 못하므로 NetBIOS 를 이용해 컴퓨터 이름을 호출하는 것도 불가능하다.
NetBIOS 이름을 호출하는 아이디어는 WINS 서버를 사용하여 인터넷 환경에서 구현될 수 있다 : NetBIOS 클라이언트는 컴퓨터 이름을 해독하기 위해 WINS 서버에 질의하도록 구성될 수 있다.
같은 WINS 서버를 사용하는 PC 들 간에는 상호간 이름을 통한 직접 호출이 가능하다.
A (WINS 서버는 S) - - - - - - | - - - - - B (WINS 서버는 S) | | 인 - - - - - S (WINS 서버) C (WINS 서버는 S) - - - - - - 터 넷 | - - - - - D (WINS 서버는 S) | 인터넷에서의 연결 |
A, B, C 와 D 는 서로 다른 서브넷에 존재하지만 상호간에 NetBIOS 이름을 호출하는 방법으로 동작할 수 있다. 오직 필요한 조건은 S 가 동일한 WINS 서버인 것이다.
참고 : WINS 서버는 NetBIOS 기능을 사용하며 얼마 안되는 서브넷을 통합하는데만 사용되기 때문에 아주 높은 퍼포먼스를 보이지는 않는다.
IP 가 얼마 없는 문제는 가리기 (masquering, 또는 NAT, 즉 network address translation) 를 통해 해결할 수 있다 : 공인 IP 주소 (즉 인터넷에서 직접적으로 "접근" 할 수 있는 주소) 가 하나만 있는 경우에, 모든 다른 호스트들은 이 IP 를 사용하여 "가려질 (masqueraded)" 수 있다.
A - - - B - - - NAT 기능이 있는 라우터 - - - 인터넷 C - - - 이런 방법으로는 곤란해요 |
예제에서 A, B 와 C 는 인터넷으로 웹 브라우징을 하거나, ping 을 보내거나, 메일이나 뉴스 서비스를 받을 수는 있지만 VoIP 호출을 할 수는 없다. 이것은 H323 프로토콜이 어플리케이션 레벨에서 IP 주소를 보내므로 그에 대한 응답이 사설 IP 주소를 사용하고 있는 송신자에게 도착하지 않기 때문이다.
해결책은 :
H323 패킷이 이러한 문제를 피해가도록 수정된 리눅스 모듈이 있다. 그 모듈은 이쪽에서 다운로드 받을 수 있다. 이것을 설치하기 위해 당신은 지정된 소스 디렉터리에 파일을 복사하고, Makefile 을 수정하여 컴파일한 뒤에 "modprobe ip_masq_h323" 이라는 명령으로 모듈을 올릴 수 있다. 불행히도 이 모듈은 현재 ohphone 소프트웨어에 대해서는 좀처럼 동작하지 않는다. (이유는 모르겠네요.)
A - - - NAT 기능의 라우터 B - - - + - - - 인터넷 C - - - ip_masq_h323 모듈 이렇게 하면 동작한다 |
이런 문제를 해결하는 어플리케이션이 또 하나 있는데 : 5.7절 을 보라
A - - - B - - - PhonePatch - - - 인터넷 C - - - 이렇게 해도 동작한다 |
리눅스 시스템에서의 H323 터미널은 위에서 설명한 모든 기능을 사용할 수 있다.
문법은 아래와 같다 :
"ohphone -l|--listen [options]" "ohphone [options]... address" |
"-l", 표준 포트 (1720) 로 접속을 기다린다. (listening)
"address", 호출을 기다리는 주소가 아니라 연결하고 싶은 상대 호스트의 "주소" 를 의미한다.
"-n", "--no-gatekeeper", gatekeeper 가 없다면 이 옵션을 사용한다.
"-q num", "--quicknet num", Quicknet card 를 /dev/phone(num) 장치로 작동한다.
"-s device", "--sound device", /dev/device 사운드 장치를 사용한다.
"-j delay", "--jitter delay", 지연 버퍼를 "delay" 만큼 세트한다.
또한 ohphone 을 실행했을 때 명령어 해석기에 직접 커맨드를 입력할 수도 있다. (decrease AEC 로써 에코 소거수준을 내릴 수 있다.)
당신은 gatekeeper 기능도 사용할 수 있다.
예제 (H323 터미널) A - - - \ (H323 터미널) B - - - D (Gatekeeper) / (H323 터미널) C - - - Gatekeeper 설정 |
호스트 A, B 와 C 는 D 에 gatekeeper 가 설치된 것으로 설정한다.
각각의 호스트는 처음에 D 에게 자신의 주소와 이름 (그리고 별명도) 을 알려주어 D 에 도착하는 호출자가 그 정보를 이용할 수 있도록 한다.
어떤 터미널이 호스트를 찾기 위해 D 에 요청하게되면, D 는 올바른 IP 주소를 알려줌으로써 연결을 성사시킨다.
여기서 gatekeeper 는 이름을 IP 주소로 해석하는 능력만을 가지고 있으며, 상호간 (IP 레벨에서) 접근할 수 없는 호스트들을 접속해주는 기능은 하지 않음을 유의해야한다. 다시 말하자면 gatekeeper 는 NAT 라우터처럼 기능하는 것이 아니다.
gatekeeper 코드는 이쪽에서 얻을 수 있으며 : 또한 openh323 library 가 필요하다.
프로그램은 -d (데몬으로 동작) 옵션이나 -x (실행모드로 동작) 옵션으로만 시동하면 된다.
추가적으로 설정파일 (.ini) 을 찾을 수 있는 곳은 이쪽이다.
앞에서 설명한 바와 같이 게이트웨이는 VoIP 를 PSTN 회선에 접속하여 인터넷을 통해 기존 방식의 전화가입자에게 전화를 할 수 있도록 기능한다. 따라서 추가적으로 PSTN 회선을 관리할 수 있는 카드가 필요하게 되는데 : Quicknet LineJack 이 있다.
OpenH323 web site 에서 다음을 다운로드 받으면 된다 :
Linejack 용 드라이버
게이트웨이 구축을 위한 PSTNGw 어플리케이션.
만약 실행파일이 동작하지 않는다면 소스코드와 openh323 library 를 다운로드 받은 다음, 이들을 사용자 홈 디렉터리에 설치하면 된다.
이제 H323 게이트웨이를 작동하기 위해 할 일은 PSTNGw 를 실행하는 일 뿐이다.
[1] | 역주 : 원문은 masquering 으로 되어 있으나 의미 전달상 NAT 라고 했습니다. |