아무리 생각해도 해외IP 등록 모니터링 후 API 호출을 통한 발신번호 변경은 실시간으로 변경하기 어려워 국제전화 식별번호 표시를 100% 성공하기도 어렵거니와 1개 번호로 여러 단말을 사용하는 추가단말 서비스(Shared Call Appearance) 사용자 중에는 한국과 해외에 동시에 단말을 사용하는 사용자도 있을텐데 이런 경우는 어떻게 처리해야 할지 난감했습니다.
많은 해결방법을 고민을 하였지만 단순하게 생각했습니다.
국내-해외 구별은 어떻게 하는가?
- 단말기의 소스IP를 기반으로 구별 한다.
국제전화 식별번호 표시를 어떻게 할 것인가?
- 해외에서 들어온 발신호에 대해서만 조치를 취한다.
다음 각 구간 별로 확인 할 수 있는 정보(국내호? 해외호?)와 어디서 발신번호를 변경해야하는지 생각했습니다.
우선, 발신단말 → 교환기로 전달되는 INVITE에서 발신번호를 뜻하는 From 헤더를 변경한다면, SBC(session border controller)나 단말에서 없는 가입자로 판단, 403 Forbidden 을 응답하고 호는 실패 할 것 입니다.
그래서 발신단말 → 교환기 구간이 아닌, 교환기 → 착신단말 구간에서 변경을 해야합니다.
그러나, 발신단말의 IP는 발신단말 → 교환기에서만 확인 가능하니, 해당 구간에서 확인해야만 했습니다. 그래서 해당 구간의 장비에서 해외 발신 호 인지 아닌지 확인 후 착신 시까지 전달해야 했습니다.
다행히 B2BUA로 동작하는 브로드웍스 교환기에서 임의로 붙인 특정 헤더만 proxy기능으로 by-pass 하는 기능이 있었습니다. (만세~)
이제 이런 동작이 가능한 장비를 생각해 보니, 운영 중인 Radware Alteon ADC가 떠올랐습니다.
해당 장비는 소스IP기반의 라우팅 혹은 특정 동작이 가능한 PBR(Policy-based routing)이 가능하고, Appshape++ 라는 Tcl(Tool Command Language)기반의 스크립트를 통해 SIP 헤더의 변경이 가능한 장비 였습니다.
대략적인 구성은 아래와 같이 하였습니다.
1. 한국 IP 대역 확보
- 아래 KISA의 정보를 참고해서, 해당 대역이 아니면, 국제전화로 간주
https://한국인터넷정보센터.한국/jsp/statboard/IPAS/inter/sec/currentV4Addr.jsp
2. ADC에서 발신 단말 IP에 따라 해외IP일 경우 헤더 추가
- ADC에서 해외 IP일 경우 x-oversea-call: true 와 같은 헤더를 추가, Alteon ADC에서 Filter 기능 사용
3. 브로드웍스 SIP Server는 x-oversea-call 헤더 By-Pass
4. 착신 시 SBC에서 해당 헤더 값 유무에 따라 From 헤더와 Remote-Party-ID 변경
위 4단계만 두고 보면 어려울 것 없어보이지만, 하나하나의 컨피그를 생각하고 짜내는 과정이 쉽지 않았습니다.
특히 국내 IP 대역을 Filter로 만드니 대략 1,000줄 가량되어, ADC에 이를 밀어 넣는 것도 엄청 난 일이었습니다.
(터미널로 밀어 넣으니 끊기고 잘 안들어가 python ssh 구현체인 paramiko 를 활용해 넣었습니다.)
시간이 지난 지금 보니 별거 아니지만, 결론은
나 혼자 아키텍쳐 설계하고, 장비 주워다가 검증하고, 모르는거 ADC 벤더에 물어보면 SIP에서 appshape++쓰는거 처음 봅니다라고 하고, 어찌어찌 구현해서 상용망에 올리고
고정비 외 투자금 0원 (기존 장비 재활용), 해외발신의 경우 국제전화 발신번호 표시율 100%, 과기정통부에서 요청한 기간보다 더 빠르게 적용한 점
나를 많이 칭찬 합니다.
PS. 2025년 지금, 그때도 노후화 된 ADC는 지금 빼고 PBR을 다른 장비로 구현하였지만, 기본적인 구조는 아직도 큰 차이가 없습니다.