글싣는 순서 1. 왜 문제를 일으키는 가? 2. ALG를 이용하기
3. H.460을 이용하기
시작하며..
이 글은 처음에 2부작 연재로 작성하여 블로그에 올렸던 글을 다시 3부작으로 다시 만들어서 올립니다. 이 글을 읽어보신 많은 분들의 피드백은 어렵다는 것입니다. 결국 ALG가 필요하구나 정도로 이해를 하고, "왜 문제가 발생하고, 해결책은 무엇인가?"라는 물음에 답을 못하는 것을 보고 정말 어렵게 썼다는 생각을 하게 되었습니다. 이 글의 목적은 방화벽을 투과하여 쉽게 음성 및 영상 통화를 자유롭게 하기 위한 방안을 생각해 보도록 하는 것이였는 데 이를 간과한 듯합니다. 어쨌든, 제가 다시 3부작으로 정리하면서 원인에 대해 정확하게 알아보고, 해결책을 찾아나가 보도록 하겠습니다.
처음 VoIP라는 개념이 자리잡고 세상에 알려질 즈음에 장비를 전개하는 것이 먼저였으며, 보안은 뒷전이였습니다. 그러나, 망이 복잡해지고 웜, 바이러스 등과 같은 불량 패킷이 증가하면서 보안은 중요한 이슈가 되었으며, 대부분의 중소기업에 보안 장비로 Firewall 하나쯤은 가지고 있습니다. 대기업등과 같은 거대 네트워크에서 서버팜과 인터넷 관문지역에는 방화벽을 이중화는 당연한 것으로 인식되었으며, 현재는 IDS (침입 탐지) 와 IPS (침입 방지) 등과 같은 시스템으로 보안 분야가 발전하였습니다. 또한, 오늘날의 네트워크는 매우 복잡해지고, 다수의 망들이 연동되어 NAT/방화벽 너머에 있는 타사 또는 익스트라넷등과 연동하는 것이 필수적인 것이 되었습니다
그러나, NAT/Firewall은 VoIP와 같은 End-to-end 시스템이 연결되는 데 장애가 됩니다. NAT 및 방화벽을 사용하는 환경에서는 항상 One-way 문제가 발생하거나, 통화 중 일정 시간이 지나면 끊어지는 문제가 발생합니다. 이럴때, 음성 및 영상 담당자는 네트워크에 방화벽 문제라고 하고, 방화벽 담당자는 단말이 문제를 일으키는 것이다라며 핑퐁을 치게 되는 경우를 자주 보게 됩니다. 그래서, VoIP관련 담당자들은 방화벽을 아주 싫어하고, 우회할 수 있는 방법으로 생각하게 되고, 방화벽 담당자들도 VoIP가 서비스를 한다고 하면 IP address 및 수많은 포트번호를 개방하길 꺼려합니다. 서로 담당자가 잘 모르기 때문에 이런 문제가 발생합니다.
NAT/Firewall과 VoIP가 서로 공존을 해야만 하는 상황에서 서로를 잘 안다면, 쉽게 이를 해결할 수 있을 것입니다.
NAT/Firewall 의 개념
NAT (Network Address Translation)을 사용하는 이유는 다음과 같습니다.
IP Version 4 주소 부족
외부로 부터의 접근 차단
사설 주소(Private Address)를 사용할 때 다음의 대역을 쓰도록 되어 있습니다.
A class (10.0.0.0/8)
B class (172.16.0.0/12)
C class (192.168.0.0/16)
흔히, 인트라넷을 연동할 때 서로 같은 10.0.0.0 대역을 사용할 경우 NAT를 통해 서로 IP address를 변경하여 통신을 하도록 합니다. 즉, 같은 대역을 사용하면, 라우터가 라우팅을 할 수가 없기 때문입니다.
방화벽을 사용하는 이유는 외부로 부터의 침입 차단입니다. 즉, 기본적으로 외부로부터의 모든 접근을 차단합니다. 정해진 IP address나 Port에 대해서만 개방하여 내부망을 안전하게 보호하도록 하는 것이 기본 매커니즘입니다. 따라서, 방화벽을 사용할 경우 내부 사용자는 외부 망 (인터넷)에 대한 접근이 자유롭지만, 외부에서는 내부로 들어올 수가 없게 되고, 내부의 특정자원을 접근하기 위해서는 Static mapping을 해주어야 접근이 가능합니다.
왜 NAT/방화벽 사용시 문제를 일으키는 것인가? - Outbound Call의 경우
그럼 NAT/방화벽을 사용하게 되면 VoIP 서비스가 되지 않는 지 H.323을 기준으로 알아보겠습니다. 아래 그림과 같은 구성을 예로 들겠습니다. 내부망의 전화기 또는 화상 단말이 외부의 200.1.1.1로 전화를 거는 경우를 가정하겠습니다.
위의 그림에서 보듯이 H.225 Call Signaling이 NAT/Firewall 을 통해 정상적으로 처리되는 것을 알 수 있습니다. H.225 Call Signaling이 완료되면, H.245 Capability Negotiation이 이루어지면서 서로가 OLC (Open Logical Channel)을 협상합니다. 이 메세지는 H.245 메세지로 내부에 있으며, 이에 대한 변경을 Firewall은 하지를 못합니다. 따라서, 녹색 화살표를 보면, 200.1.1.1 (공인주소)로 RTP를 전송할 것을 요구하며, 마지막 파란색 화살표를 보면, 192.168.1.2 (사설 주소)로 RTP를 전송할 것을 요구하는 것을 알수 있습니다. 따라서, 이때 One-way가 발생하게 되며, 사설망 내부의 음성 및 영상은 외부로 전달이 되나, 외부의 음성 또는 영상이 내부망으로 전송되지 못합니다. 192.168.1.1인 사설 주소를 라우팅 할 수 없기 때문입니다.
Outbound Call에 대한 해결책 - H.323-aware NAT/Firewall
따라서, 아래 그림과 같이 마지막 OLC Ack에서 192.168.1.2를 64.1.1.1로 변경해서 전송한다면 호 소통이 원할하게 이루어질 것입니다. 이를 H.323-aware NAT/Firewall이라고 합니다. 따라서, RTP 및 RTCP가 정상적으로 망 내부로 흘러들어가는 것을 확인할 수 있습니다.
왜 NAT/방화벽 사용시 문제를 일으키는 것인가? - Inbound Call의 경우
아래 그림에서 보면, 200.1.1.1이 Call Setup을 보낼려고 하나, 192.168.1.0 대역으로는 Public Network에서 라우팅이 되지 않습니다. 설사 라우팅이 된다하더라도 NAT/Firewall은 Call Setup 패킷을 망 내부로 보내기위한 정책이 없으므로 바로 폐기합니다.
Inbound Call에 대한 해결책 - Static nat mapping
이 경우 Firewall 에서 내부의 192.168.1.4 ip address 와 외부의 64.1.1.4 ip address가 매팽되어 있다고 가정합시다. 그러면, 지금까지 살펴본 프로시져에 따라 외부에서 내부로 호가 이루어질 것입니다. RTP가 지나가는 OLC를 개방할 때 여전히 문제가 발생합니다. H.245 헤더에 있는 정보는 여전히 변경되지 않습니다. Firewall은 H.323을 인식하고 있지 못하기 때문입니다.
폴리콤의 장비의 경우 이러한 상황에서도 동작하도록 모든 코덱과 IP Phone에서 static nat mapping이 되어 있는 IP address를 입력할 수 있도록 합니다. 따라서 다음과 같이 호가 이루어집니다.
마치며.
만일 H.323-aware Firewall을 사용한다면, 이문제도 함께 해결가능합니다. 그러나, 만일 이런 내부의 단말이 40개라고 가정한다면, 모든 단말에 대해 1:1 NAT Mapping이 수행되어야합니다. 즉, 현실적으로는 불가능하다는 결론입니다. 따라서, Application Layer Gateway (ALG)가 필요할 수 밖에 없습니다. 다음장에서 ALG에 대해 자세하게 살펴보겠습니다.