본문 바로가기

Collaboration

VCS 와 Expressway에서 호 라우팅 이해하기

시작하며
CUCM을 다루던 엔지니어들에게 VCS와 Expressway는 만만한 장비가 아닙니다. "다시쓰는 Cisco Jabber 설치하기" 연재에서 VCS와 Expressway의 차이점과 Zone 개념을 정리하였지만 늘 VCS 관련 내용 포스팅은 부족합니다. 

이번 글에서는 그 동안 미루어왔지만 VCS 와 Expressway를 활용하기 위해서는 반드시 필요한 호 라우팅 부분에 대해 설명합니다. 


VCS의 개요
시스코가 텐드버그를 인수했던 초창기에 VCS (
Video Communications System)는 CUCM과 비슷한 기능을 제공하는 솔루션이라 앞 길이 어두웠지만, 현재는 Cisco Expressway와 Cisco Conductor의 모태가 되면서 새로운 인터페이스 표준으로 자리잡고 있습니다.  

VCS는 처음 어플라이언스 모델로 출시되었지만, 현재는 VMware 기반의 가상화를 지원합니다. VCS의 주요 기능은 다음과 같이 정리할 수 있습니다.
  • 단말 등록 및 호 제어
  • SIP와 H.323 Interworking
  • IPv4 와 IPv6 Gatewaying
  • NAT Traversal
  • Firewall Traversal
  • Find Me 기능 제공 (SNR 기능)

현재 VCS가 가장 많이 활용되는 분야는 폴리콤 단말과 같은 3rd 영상회의 단말 연동입니다. 시스코 CUCM은 시스코의 영상회의 단말과 새롭게 출시된 DX 시리즈를 지원하지만 폴리콤 및 3rd party 단말에 대한 호제어 서비스는 약합니다. 

엔지니어 입장에서는 VCS를 직접 만지기 보다는 같은 인터페이스를 가진 Expressway 를 주로 설정할 것입니다.   


시그널링을 위한 Dial Plan 이해
다음의 그림을 살펴보면서 VCS 및 Expressway가 어떻게 호를 처리 하는 지를 살펴보겠습니다.




  1. Transforms
    Transform은 alias 검색 전에 Pre-search Transform이 적용되어 고정적으로 alias를 변경
    - Transform은 우선 순위가 있으므로 상위 Transform이 매치되면 중단됩니다.
    - Transforms은 서버로 수신된 호가 조건에 부합할 경우 착신번호를 변경합니다. 
    - 네자리 전화번호 (\d{4}) 가 수신될 경우 CPL로 전송하여 호 정책 적용
    - 한 자리 이상의 전화번호를 포함한 1.1.1.1 IP주소 ((\d+)@1.1.1.1)는 Serch Rules로 전송

  2. Search Rules
    VCS의 Search rule은 호를 보내기 위한 Zone을 선택하거나 목적지를 변경할 때 사용
    - Serch Rule은 IP 주소를 기반으로 하거나 특정 alias를 기반으로 매칭
    Searches Rules 은 착신번호의 패턴과 존(Zone)을 일치시켜, 패턴이 매치할 경우 존을 결정
    - Zone으로 호를 보내기 전에 착신번호 변경

  3. Zones
    - Searches Rules에 의해 결정된 Zone으로 보냅니다.


VCS와 Expressway는 수신된 호를 Transforms에서 착신주소에 따른 조건이 매치되는 지를 먼저 확인합니다. 그 다음으로 착신 주소에 맞는 Search Rules을 찾아 목적지 Zone으로 호를 라우팅합니다. CUCM 기준으로 보면 Zones는 Trunk로, Search Rules는 Route Pattern으로 이해할 수 있습니다. .


Transforms와 Search rules에서 패턴에 대한 부합방식 
호가 수신될 때 착신번호가 조건에 어떻게 매치될 지를 결정할 때 다음의 방식이 있습니다만 가장많이 사용하는 것은 Regex입니다.  

  • Exact Match
    스트링이 정확히 매치되는 경우에 적용됩니다. 

    예를 들면, 555를 착신 주소로 들어오는 호를 변경한다고 할때, 555로 들어오는 호는 적용을 받지만, 556으로 들어오는 호는 적용받지 않습니다.


  • Prefix
    스트링의 시작 부분이 매치가 되는 경우에 해당합니다. 

    예를 들면, 555로 시작하는 착신 주소로 들어오는 호를  변경한다고 할때, 555438로 들어오는 호는 적용을 받지만, 9555438로 들어오는 호는 적용을 받지 않습니다.

  • Suffix
    스트링의 마지막 부분이 매치가 되는 경우에 해당합니다.

    예를 들면, 438로 끝나는 착신 주소로 들어오는 호를 변경한다고 할때, 555438로 들어오는 호는 적용을 받지만, 555111로 들어오는 호는 적용을 받지 않습니다.

  • Regex
    복잡한 환경에서 매치를 하고자 할 때 이용합니다.
혹시 자신이 설정한 변경이 의심스러울 경우에는  "Maintenace > Tools > Check Pattern"에서 테스트할 수 있습니다. 



복잡한 Regex 의 이해
VCS 및 Expressway에서 Regex를 가장 많이 사용합니다. Regex의 구문만 이해하여도 호 라우팅을 제대로 할 수 있습니다. 여기서 digit은 0-9라는 숫자를 의미하고, character는 숫자 및 글자와 기호를 모두 포함합니다. 
  • .   Any single character
    자리수 하나를 의미, 숫자 이외의 기호도 포함

  • \d  A digit = [0-9]
    자리수 하나를 의미하지만, 숫자만 포함

  • *  0 or more repetitions of previous character or expression 
    바로 앞 자리의 구문이나 글자를 반복하지 않거나 반복

  • +  1 or more repetitions of previous character or expression 
    바로 앞 자리의 구문이나 글자를 한번 반복하거나 그 이상 반복

  • ?  0 or 1 repetitions of previous character or expression
    바로 앞 자라의 구문이나 글자를 반복하지 않거나 한번 반복  

  • {n}  n repetitions of previous character or expression
    바로 앞 자리의 구문이나 글자를 n번 반복

  • [abc]  A character from this set of characters
    abc 중에 하나의 글자만을 포함

  • [1-4]  A character from this range of characters
    1,2,3,4를 의미

  • [^def]  A character NOT including these characters
    def를 제외한 나머지 글자 

  • ^  Start of line
    줄의 시작

  • $  End of line
    줄의 마지막

  • \  Literalise, e.g. \* really is *
    구문에 사용되는 글자를 글자로 표시할 경우 

  • |  ‘or’ – match (wxy|wyx)
    또는 의 의미

  • (    )  Group digits and store in store id \n.
    구문이나 글자들의 그룹을 표시

지금까지 간단하게 기본 구문을 살펴보았습니다. 기본 구문을 가지고 자주 사용되는 몇 가지 예제를 살펴보겠습니다. 
  • 전화번호 뒤에 도메인을 추가할 때
    (\d*)    -->   \1@cisco.com
    1111     --> 1111@cisco.com

    \d 는 전화번호 하나를 의미합니다. 뒤에 * 는 반복을 의미하므로 자리 수에 상관없는 전화번호를 의미합니다. 따라서 VCS로 인입된 전화번호 자체를 의미하며, (  )는 첫번째 세트를 의미합니다. 뒤에 \1은 앞의 첫번째 ( ) 를 의미하며, \2는 두 번째 ( )를 의미합니다. 

    정리하면, 전화번호 전체를 첫번째 ( ) 안에 넣어서 이것 뒤에 @cisco.com을 붙인다는 의미입니다.

  • 도메인을 제거하기
    (.*)@.+    --> \1
    1111@cisco.com --> 1111

    . 은 단 하나의 숫자 또는 글자를 의미하고, *는 자리수를 정하지 않는 것이므로 .* 은 자리수에 상관없는 반복을 의미하므로 모든 숫자 또는 글자가 됩니다. ( ) 안에 넣었으므로 @ 앞의 모든 숫자가 첫번째 세트라는 의미입니다. 이를 \1은 첫번쨰 괄호입니다.

    .+는 any character 가 한번 이상 무한 반복할 수 있으므로 글자수에 상관없는 도메인 네임입니다. 


  • 0102222 라는 prefix를 6자리 번호에 추가하기
    (\d{6})  --> 0102222\1
    444455556666  --> 0102222556666

     \d는 전화번호 하나를 뒤의 {6}은 6자리를 의미합니다. 따라서, (\d{6})는 12자리 혹은 10자리의 전화번호가 들어와도 뒤의 6자리만을 ( ) 안에 포함시킨다는 의미입니다. 

  • 3자리로 들어온 숫자의 순서를 바꾸고 사이에 . 을 추가하기
    (\d)(\d)(\d)   --> \3.\2.\1
    123      --> 3.2.1

    (\d) 는 한 자리 전화번호를 의미합니다. 


  • 123@cisco.com 이나 123@cisco.net 으로 들어온 착신 번호 매치시키기
    123@cisco\.(net|com)

    | 는 또는 이라는 의미이므로 위와 같이 적용할 수 있습니다. 


마치며
간략하게 VCS와 Expressway의 호라우팅 방식을 살펴보았습니다. Regex의 구조는 간단하게 파악해 두시고 나중에 실제 적용할 일이 있을 때 상기하시면 될 것입니다. 아래 VCS에 관련된 내용들이 흩어져 있으므로 합쳐서 하나의 내용으로 정리하긴 해야 겠습니다.  



넥스퍼트의 관련글
VCS 및 Expressway에서 Zone 개념 이해하기


라인하
트 (CCIEV #18487)
  ---------------------------------------------------
ucwana@gmail.com (라인하트의 구글 이메일) 
http://twitter.com/nexpertnet (넥스퍼트 블로그의 트위터, 최신 업데이트 정보 및 공지 사항) 
http://groups.google.com/group/cciev (시스코 UC를 공부하는 사람들의 구글 구룹스) 
http://groups.google.com/group/ucforum (벤더에 상관없이 UC를 공부하는 사람들의 구글 구룹스) 
세상을 이롭게 하는 기술을 지향합니다. ______________________________________________________