📖 개요

셀메이트의 네트워크는 어떻게 구성이 되어 있을까요? 처음으로 진행한 사내 개발자 컨퍼런스에서, 사내 네트워크 구조 및 특징에 대한 내용을 주제로 발표를 하게 되었습니다.

발표 주제에 관해서, 어떤 내용이 개발자분들에게 도움이 될까를 많이 고민하다가, 사내 네트워크의 특징적인 부분에 대한 개론적인 발표를 진행하였는데, 교육이 끝난 후, 이런 내용이 꼭 필요했었던 거 같고 도움이 많이 되었다는 피드백을 받아서 뿌듯했던 시간이었는데요.

이번 발표 내용을 간단히 정리해보았습니다.


🏷️ IP

통신을 하기위해서는 IP가 필요하겠지요? 출발지와 목적지를 식별할 수 있어야, 데이터도 주고 받고, 요청과 응답도 주고 받을 수 있을 것입니다. IP는 외부 네트워크에서 사용되는 공인IP가 있고, 내부 네트워크에서 사용되는 사설IP가 있습니다.

네트워크 구성에 따라 다를 수 있지만, 셀메이트에서는 사무실 방화벽을 기준으로 외부 네트워크와 내부 네트워크를 구분할 수 있습니다.

  • 공인IP 외부 네트워크에서 사용하는 IP
    • 약 43억(2의 32승)개의 개수 제한을 가지는 IP이자, 중복되지 않는 고유의 IP
    • 내부에서 공인IP를 할당 받아 사용 시, 외부에서 내부로의 접근이 쉽다는 단점
  • 사설IP 내부 네트워크에서 사용하는 IP
    • 네트워크 규약에 따라 10.0.0.0 ~ 10.255.255.255 등의 사설IP 대역이 미리 약속됨
    • 약속된 사설IP 대역 내 IP를 내부에서 임의 할당하여 사용
    • 고유의 값이 아니기 때문에(우리회사 사무실에도, 다른회사 사무실에도 같은 사설IP 대역이 존재할 수 있음), 외부에서는 출발지 목적지의 특정이 불가하여, 외부 라우팅 불가 (외부 네트워크에서는 사설IP 사용 불가)
    • 위와 동일한 이유로 외부 네트워크에서는 내부 사설IP에 접근 불가
  • 결과적으로 내부 네트워크 내의 사용자들은 사설IP를 할당받아 사용하며 내부 네트워크 간에는 사설IP를 가지고 통신을 하고, 내부에서 -> 외부 인터넷 등 외부 통신 시에만 NAT(네트워크 주소 변환)를 통해 사설IP를 공인IP로 변환하여, 공인IP를 가지고 통신을 합니다.

IP 할당 예시 network1.png


⚙️ 내부 네트워크에서의 통신

내부에서 사설IP를 사용하지만, 그렇다고 아무 사설IP나 사용할 수 있는 것은 아니고, 이 사설IP도 네트워크 규약에 따라 약속된 사설IP 대역 중에서도 내부에서 직접 설정한 대역의 사설 IP만 사용할 수 있습니다.

내부에서 사용할 사설IP 대역을 할당하기 전에, 어떤 대역을 내부 영역이라고 정의할 것인지를 먼저 설정해주어야하는데요. 이 때 인터페이스라고 하는 개념이 있습니다.

아래에서 보시는 바와 같이 lan이라고 하는 인터페이스에 10.1.5.0/24의 IP를 할당하고, 이 인터페이스에 port1, port4, port10을 할당함으로서, port1에 연결된 내부 사용자의 컴퓨터는 lan 인터페이스(내부 영역)에 속하게 되고, 사용자의 컴퓨터에서 10.1.5.10과 같은 IP를 할당하여 사용할 수 있게 됩니다.

여러분들의 사무실에 있는 컴퓨터는 랜선만 연결하면 그 자체로 인터넷이나 내부 통신이 가능한 것처럼 보이겠지만, 자세히 살펴보면 인터넷을 하기위해 공인IP도 가지고 있고, 내부 인터페이스 대역도 정의 되어 있는 장비에 연결이 되어 있는 것이지요. 이렇게 사용자의 컴퓨터가 내부에 속하게 되면 같은 내부 네트워크 안에 있는 다른 사용자와, 또는 다른 서버로의 사설IP간 통신이 가능해집니다.

내부에서 사설IP간의 통신 시에는 방화벽 정책을 통해, 출발지 인터페이스, 목적지 인터페이스, 출발지IP와 목적지IP, 포트(서비스) 등과 허용/차단 여부 등을 지정하여 통신을 하게 됩니다.

* 사설IP 대역
  - 10.0.0.0 - 10.255.255.255(10.0.0.0/8)
  - 172.16.0.0 - 172.31.255.255(172.16.0.0/12)
  - 192.168.0.0 - 192.168.255.255(192.168.0.0/16) 

방화벽 정책 예시 network4.png

인터페이스 설정 예시 network5.png


⚡ DHCP

내부에서 사용자 컴퓨터나, 업무용 단말기에 IP를 할당할 때에는 수동으로 IP를 설정하기도하고, DHCP라고하는 자동 할당 프로토콜을 통해 자동으로 IP를 할당하기도 합니다.

DHCP는 모바일 등 단말기나 PC 등에서 자동으로 IP를 할당 받는 방법으로, 예를 들어 내부 사용자 PC는 내부 네트워크 구성을 넘어 방화벽에 연결이 되어있기 때문에, 방화벽의 DHCP 서버 설정을 통해, 설정된 대역의 IP를 자동으로 할당 받을 수 있습니다.

셀메이트에서는 방화벽에서 지원하는 DHCP 서버 기능과 무선AP의 SSID 설정을 통하여, 와이파이를 사용하면서 guest ssid에 접근했을 때에는 내부망 접근이 불가능한 사설IP를 할당 받고 업무망 ssid에 접근했을 때에는 내부망 접근이 가능한 사설IP를 자동으로 할당 받도록 설정하여 차등적으로 접근 권한을 부여하고 있습니다.

DHCP 설정 예시 network2.png


🚀 NAT(네트워크 주소 변환) & PortForwarding

앞에서 잠깐 설명드린 바와 같이, 사설IP로는 외부 네트워크에서의 통신이 불가능합니다. 그래서 셀메이트에서는 내부의 이용자들이 사설IP를 사용하면서, 외부로 나갈 때에 방화벽을 거치면서, 자신이 가진 사설IP를 방화벽에 할당된 공인IP로 주소 변환하여 공인IP를 가지고 외부로 나가게 되는데요. 이 과정을 NAT라고 합니다.

그래서 내부에서 사설IP를 사용하는 사용자들이 외부로 나가는 통신을 할 때에는 모두 방화벽에 설정된 하나의 공인IP로 NAT가 되기 때문에, 동일한 공인IP를 가지고 통신을 하게 됩니다.

그럼 외부에서 내부에 접근할 때는 어떨까요? 사설IP는 내부에서 임의 할당하는 IP이기 때문에, 외부 네트워크 상에서 봤을 때는 중복이 가능한 값이 됩니다. (우리 회사도 동일 사설 대역, 옆 회사도 동일 사설 대역..) 결과적으로 외부에서 내부 사설IP를 특정할 수 없기 때문에, 외부에서 내부 사설IP로의 접근은 불가능한데요.

이러한 경우에, PortForwarding이라는 방법을 통해 내부로의 접근이 가능하게 할 수 있는데요. PortForwarding과 NAT를 통해, 특정 공인IP의 특정 포트로 접근 시, 특정 사설IP의 특정 포트로 포워딩이 되도록 설정할 수 있습니다. 이런 방법을 통해, 외부에서 공인IP로 접속을 하면, 특정 사설IP를 가지는 서버에 있는 원하는 서비스(포트)에 접근할 수 있게 됩니다.

  • 예시) 외부 인터넷 통신 시 방화벽을 거치면서 NAT 되어, 10.1.5.10 사설IP 대신 1.1.1.1 공인IP를 가지고 외부로 나가게 됨
  • 예시) 외부에서 내부 접근 시 1.1.1.1 공인IP에 80번 포트(서비스)로 접근하면, 10.1.5.20 사설IP를 가지는 서버의 80번 포트(서비스)로 포워딩됨

🚩 Routing

앞서 잠깐 설명드린 바와 같이, 내부 네트워크에서는 방화벽 정책에 의해 통신을 하지만, 외부 인터넷 등 외부로 나가는 통신에는 라우팅이라고 하는 과정이 필요합니다.

방화벽을 벗어난 통신이 어디로 가야할지 지정을 해주어야, 외부 인터넷을 하기위한 통신이 방화벽을 넘어가더라도(외부로 나가더라도) 어디로 가야할지 알 수 있겠죠? 이처럼 최적의 경로를 찾기위해 그 길을 지정해주는 것입니다.

이 길을 지정해주는 방식에는 크게 정적 라우팅과 동적 라우팅이 있는데요.
셀메이트에서는 정적 라우팅 설정을 통해 외부로 나가는 길을 지정해주고 있습니다.

그래서 예를 들어 wan1이라고 하는 외부 인터페이스로 나가는 모든 통신(0.0.0.0/0)은 Gateway IP로 가라고 지정해주게 되면, 외부로 나가는 모든 통신은 Gateway로 지정해준 다른 라우터, 즉 우리 사무실 방화벽과 목적지 사이에 있는 다른 공인IP를 가지는 라우터(홉)로 전달되게 됩니다.

여기에서 말하는 라우터는 공인IP를 가지고 흘러가는 통신을 다른 장비로 보내줄 수 있는 장비라고 생각하시면 되겠습니다. 이렇게 우리 사무실 방화벽과 목적지 사이에 있는 외부 네트워크의 수 많은 라우터를 거쳐 목적지에 도달하게 되고, 이 과정에서 최적의 경로를 찾기위해, 각각의 라우팅 과정을 거치게 됩니다.

라우팅 정책 예시 network3.png


🔓 IPSecVPN

저는 3층에서 근무를 하고 있는데요. 셀메이트는 3층 외에도 여러 층에 있는 사무실을 사용하고 있습니다. 각 층에는 각각의 공인IP가 할당 되어 있고 (개별 회선이 있고) 물리적으로 연결이 되지 않기 때문에 각각 다른 내부 네트워크를 가지고 있는데요. 따라서 각 층 사무실 간의 통신은 공인IP로만 가능하고, 사설IP를 통해서는 불가능합니다.

이럴 때 사용하는 방법 중 IPSecVPN이라는 방법이 있습니다. 이 방법을 이용하면, 각각 다른 내부 네트워크를 하나의 내부 네트워크처럼 보이게 만들 수 있지요.

이렇게 IPSecVPN을 구성하여 하나의 가상 사설망을 만들면, 3층에 있는 내부망과 다른 층에 있는 내부망이 같은 내부망처럼 통신을 할 수 있게 되어, 각 층의 사설IP간의 통신이 가능해집니다. 이러한 방법을 통해 물리적으로 떨어져있는 사설망끼리의 통신도 가능합니다.

IPSecVPN 구성 예시 network6.png


🔒 SSLVPN

IPSecVPN이 Site to Site VPN이라면, SSLVPN은 Client to Site VPN이라고 볼 수 있습니다. 사무실 내부에서 다른 사무실로의 통신은 IPSecVPN을 통해 가능하지만, 사무실 외부에서는 어떨까요? 집이라든가, 원격지에서 사무실이나 내부 서버에 접근해야한다면?

아무런 인증 절차 없이, 외부에서 내부망에 접근이 가능하도록 해놓았을리는 없겠지요? 당연히 그래서도 안되겠고요. 이런 경우에 SSLVPN을 사용합니다. 예를 들면, 집에서 SSLVPN 클라이언트를 통해 인증을 수행하여 SSLVPN 접속을 하면, 내부 매커니즘을 통해 SSLVPN 기능을 제공하는 장비에 접근하여 인증을 받게 되고, 인증이 완료 되면 내부 사설IP를 할당 받아 내부망 접근이 가능해집니다.

이렇게 SSLVPN을 통해 할당 받는 IP 또한 SSLVPN 계정과 역할에 맞게 할당하여, 접근권한을 차등적으로 부여하고 있지요.

SSLVPN 구성 예시 network7.png


마치며 😄

셀메이트의 첫 개발자 컨퍼런스에 연사로 참여할 수 있어서, 저에게는 의미 있는 시간이었던거 같습니다. 여러분들이 네트워크에 대한 개념을 알아가거나, 다시 한번 상기시키는데 있어서 이 내용이 도움이 되셨기를 바랍니다. 끝까지 읽어주셔서 감사합니다. 😄