VPN과 터널링 (1) - 터널링의 원리 - soo:bak
작성일 :
터널링은 어떻게 네트워크를 확장하는가
물리적으로 떨어진 두 네트워크를 하나처럼 연결하고 싶다면 어떻게 해야 할까요?
서울 본사와 부산 지사가 마치 같은 건물에 있는 것처럼 통신할 수 있다면 업무 효율이 크게 높아질 것입니다.
가장 확실한 방법은 전용선을 임대하는 것이지만, 비용이 만만치 않습니다.
그렇다면 이미 깔려 있는 인터넷을 활용할 수는 없을까요?
여기서 문제가 발생합니다.
두 네트워크는 사설 IP를 사용하고 있습니다 (예: 10.1.0.0/16, 10.2.0.0/16).
NAT와 방화벽에서 설명했듯이, 사설 IP 주소는 인터넷 라우터들이 인식하지 못하므로 직접 전달할 수 없습니다.
이 문제를 해결하는 기술이 바로 터널링(Tunneling)입니다.
캡슐화의 원리
터널링의 핵심은 캡슐화(Encapsulation)입니다.
원본 패킷 전체를 새로운 패킷의 페이로드로 감싸고, 새 패킷의 헤더에는 터널 양 끝점의 공인 IP 주소를 붙입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
원본 패킷:
┌──────────────────────────────────────────┐
│ IP 헤더 │ TCP 헤더 │ 데이터 │
│ 출발:10.1.0.5│ │ │
│ 도착:10.2.0.5│ │ │
└──────────────────────────────────────────┘
캡슐화 후:
┌─────────────────────────────────────────────────────────────┐
│ 새 IP 헤더 │ 터널 헤더 │ 원본 IP 헤더 │ TCP 헤더 │ 데이터 │
│ 출발:203.0.113.1│ │ 출발:10.1.0.5│ │ │
│ 도착:198.51.100.1│ │ 도착:10.2.0.5│ │ │
└─────────────────────────────────────────────────────────────┘
위 도식을 살펴보면, 원본 패킷은 사설 IP(10.1.0.5 -> 10.2.0.5)를 사용하고 있어 인터넷으로 직접 전송할 수 없습니다.
하지만 캡슐화 후에는 외부 IP 헤더에 공인 IP 주소(203.0.113.1 -> 198.51.100.1)가 붙어 인터넷 라우터들이 정상적으로 전달할 수 있게 됩니다.
원본 패킷은 페이로드 안에 고스란히 보존되어 있으므로, 목적지 터널 종료점에 도착하면 외부 헤더를 벗겨내고 원본 패킷을 꺼내어 내부 네트워크로 전달합니다.
프로토콜 위의 프로토콜
터널링은 본질적으로 프로토콜 위에 또 다른 프로토콜을 올리는 구조입니다.
1
2
3
4
5
6
7
8
9
10
┌─────────────────────────────────────────┐
│ 전송 프로토콜 (Carrier) │
│ ┌───────────────────────────────────┐ │
│ │ 캡슐화 프로토콜 (Encapsulating)│ │
│ │ ┌─────────────────────────────┐ │ │
│ │ │ 승객 프로토콜 (Passenger) │ │ │
│ │ │ (원본 패킷) │ │ │
│ │ └─────────────────────────────┘ │ │
│ └───────────────────────────────────┘ │
└─────────────────────────────────────────┘
구체적인 예시를 들어보면 다음과 같습니다.
- Passenger(승객): 전송하려는 원본 IPv4 패킷 (사설 IP)
- Encapsulating(캡슐화): GRE 헤더
- Carrier(운반): 인터넷을 통과하는 외부 IPv4 패킷 (공인 IP)
이를 “IPv4 over GRE over IPv4”라고 표현하며, 이러한 구조 덕분에 다양한 상황에서 유연하게 활용할 수 있습니다.
- 사설 IP 네트워크를 공인 인터넷 위에서 연결
- IPv6 패킷을 IPv4 전용 네트워크 위에서 전송
- 이더넷 프레임을 IP 네트워크 위에서 전송
왜 터널링이 필요한가
1. 사설 네트워크 연결
터널링의 가장 대표적인 활용 사례는 지리적으로 분산된 사설 네트워크를 연결하는 것입니다.
1
2
3
4
5
6
7
8
9
서울 본사 (10.1.0.0/16)
│
│ 터널
│
──── 인터넷 ────
│
│ 터널
│
부산 지사 (10.2.0.0/16)
터널이 설정되면 두 사설 네트워크가 하나처럼 동작하여, 본사의 10.1.0.5에서 지사의 10.2.0.5로 마치 같은 건물 안에 있는 것처럼 직접 통신할 수 있습니다.
2. 프로토콜 호환성
IPv6를 사용하고 싶지만 중간 네트워크가 IPv4만 지원하는 경우에도 터널링이 유용합니다.
1
2
IPv6 네트워크 ──► IPv6-over-IPv4 터널 ──► IPv6 네트워크
(IPv4 인터넷)
IPv6 패킷을 IPv4 패킷 안에 캡슐화하여 전송하면, IPv4 전용 구간을 문제없이 통과할 수 있습니다.
3. 보안
지금까지 설명한 터널링은 패킷을 감싸서 전달하는 것뿐이며, 내용 자체는 보호하지 않습니다.
그러나 터널에 암호화를 추가하면 강력한 보안 기능을 얻게 됩니다.
- 도청 방지: 제3자가 내용을 볼 수 없음
- 변조 방지: 데이터 위조 탐지 가능
- 인증: 통신 상대방의 신원 확인
이렇게 암호화와 인증이 결합된 터널을 VPN(Virtual Private Network)이라고 부릅니다.
터널링 계층
터널링은 OSI 모델의 여러 계층에서 구현될 수 있으며, 각 계층마다 장단점이 다릅니다.
L2 터널링
데이터 링크 계층(Layer 2) 프레임을 캡슐화하는 방식으로, 이더넷 프레임 전체를 터널을 통해 전송합니다.
대표적인 프로토콜:
- L2TP (Layer 2 Tunneling Protocol): PPP 프레임을 캡슐화하여 전송
- PPTP (Point-to-Point Tunneling Protocol): Microsoft가 개발했으나 심각한 보안 취약점이 발견되어 현재는 권장되지 않음
L2 터널링의 특징:
- 브로드캐스트 전달이 가능하여 같은 서브넷처럼 동작
- 프레임 전체를 감싸므로 오버헤드가 상대적으로 큼
L3 터널링
네트워크 계층(Layer 3) 패킷을 캡슐화하는 방식으로, IP 패킷 단위로 터널링합니다.
대표적인 프로토콜:
- GRE (Generic Routing Encapsulation): 시스코가 개발한 단순한 캡슐화 프로토콜로, 암호화 기능 없음
- IPsec 터널 모드: 암호화와 인증이 포함된 안전한 터널링
L3 터널링의 특징:
- L2보다 오버헤드가 적어 효율적
- 라우팅 기반으로 연결하므로 대규모 네트워크에 적합
- 대부분의 기업 VPN에서 채택
애플리케이션 터널링
TCP나 HTTP 같은 상위 계층 프로토콜을 이용하여 터널을 구성합니다.
대표적인 프로토콜:
- SSH 터널링: SSH 연결 위에 다른 프로토콜 트래픽을 실어 전송
- SSL/TLS VPN: HTTPS와 동일한 포트와 프로토콜을 사용하여 VPN 트래픽 전송
- SOCKS 프록시: 애플리케이션 레벨에서 동작하는 범용 터널
애플리케이션 터널링의 특징:
- 일반 웹 트래픽처럼 보이므로 방화벽 우회가 용이
- 프로토콜 오버헤드로 인해 성능이 다소 낮음
- 별도의 커널 모듈 없이 설정이 간단
GRE: 가장 단순한 터널링
GRE(Generic Routing Encapsulation)는 시스코가 1994년에 개발한 터널링 프로토콜로, RFC 2784에 정의되어 있습니다.
1
2
3
4
5
6
GRE 패킷 구조:
┌────────────────────────────────────────────────────────────┐
│ 외부 IP 헤더 │ GRE 헤더 │ 내부 IP 헤더 │ 페이로드 │
│ (20바이트) │ (4바이트) │ (20바이트) │ │
└────────────────────────────────────────────────────────────┘
GRE 헤더 구조
1
2
3
4
5
6
7
8
9
10
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|C| |K|S| Reserved0 | Ver | Protocol Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
C: Checksum Present
K: Key Present
S: Sequence Number Present
Protocol Type: 캡슐화된 프로토콜 (0x0800 = IPv4)
GRE의 특성
장점:
- 구조가 단순하여 구현과 디버깅이 쉬움
- IPv4, IPv6 등 다양한 프로토콜 캡슐화 가능
- 라우팅 프로토콜의 멀티캐스트 트래픽 지원
단점:
- 암호화 기능이 없어 데이터가 평문으로 전송됨
- 송신자 인증 기능 없음
- IP 프로토콜 번호 47을 사용하므로 NAT 환경에서 문제 발생
GRE 단독으로는 보안이 취약하므로, 실무에서는 IPsec과 함께 사용하여 암호화를 추가하는 GRE over IPsec 구성을 주로 사용합니다.
VPN의 분류
VPN(Virtual Private Network)은 공용 네트워크 위에 가상의 사설 네트워크를 구축하는 기술입니다.
앞서 설명한 터널링에 암호화와 인증을 결합하여 안전한 통신 채널을 제공합니다.
VPN은 연결 형태에 따라 크게 두 가지로 분류됩니다.
Site-to-Site VPN
두 네트워크(사이트) 전체를 연결하는 방식입니다.
1
2
3
4
5
6
7
8
9
10
서울 본사 부산 지사
┌─────────────────┐ ┌─────────────────┐
│ 내부 네트워크 │ │ 내부 네트워크 │
│ 10.1.0.0/16 │ │ 10.2.0.0/16 │
│ │ │ │
│ ┌───────────┐ │ VPN 터널 │ ┌───────────┐ │
│ │ VPN │◄─┼────────────────────┼─►│ VPN │ │
│ │ Gateway │ │ (인터넷) │ │ Gateway │ │
│ └───────────┘ │ │ └───────────┘ │
└─────────────────┘ └─────────────────┘
특징:
- VPN 장비(게이트웨이) 간에 터널을 설정하며, 개별 사용자는 VPN의 존재를 인식하지 못함
- 양쪽 네트워크가 하나의 사설 네트워크처럼 동작
- 터널이 항상 유지되므로 연결 지연이 없음
주요 사용 사례:
- 본사와 지사 간 상시 연결
- 여러 데이터센터 간 백본 연결
- 클라우드와 온프레미스 환경 연결
Remote Access VPN
개별 사용자가 외부에서 사내 네트워크에 접속하는 방식입니다.
1
2
3
4
5
6
7
8
9
10
11
12
회사 네트워크
재택 근무자 ┌─────────────────┐
┌─────────┐ VPN 터널 │ 내부 네트워크 │
│ VPN │◄────────────────────────┼►│ VPN 서버 │
│ Client │ (인터넷) │ │
└─────────┘ │ 서버, 데이터 │
└─────────────────┘
카페에서 작업 중인 개발자
┌─────────┐ VPN 터널
│ VPN │◄────────────────────────────────►
│ Client │ (인터넷)
└─────────┘
특징:
- 사용자의 장치에 VPN 클라이언트 소프트웨어를 설치하여 사용
- 필요할 때만 연결하고 사용 후 해제하는 온디맨드 방식
- 사용자 인증(아이디/비밀번호, 인증서 등)이 필수
- 사용자의 IP 주소가 바뀌어도 재연결 가능
주요 사용 사례:
- 재택 근무 시 사내 시스템 접속
- 출장 중 회사 자료 열람
- 카페 등 공용 Wi-Fi에서 안전한 업무 환경 확보
터널 내부의 라우팅
터널이 설정되면 운영체제의 라우팅 테이블이 자동으로 업데이트되어, 특정 목적지로 향하는 트래픽이 터널을 통과하도록 설정됩니다.
1
2
3
4
5
6
7
Site-to-Site VPN 후 서울 본사의 라우팅 테이블:
목적지 다음 홉 인터페이스
──────────────────────────────────────────────────
10.1.0.0/16 직접 연결 eth0
10.2.0.0/16 터널 tunnel0
0.0.0.0/0 203.0.113.1 eth1
위 라우팅 테이블에서 부산 지사 대역(10.2.0.0/16)으로 가는 패킷은 tunnel0 인터페이스로 전송됩니다.
터널 인터페이스에서는 캡슐화가 자동으로 수행되어, 패킷이 인터넷을 통해 부산 지사까지 전달됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
원본: 10.1.0.5 → 10.2.0.5
│
▼
캡슐화: 203.0.113.5 → 198.51.100.5
│
▼
인터넷 라우팅 (공인 IP 사용)
│
▼
터널 종료점에서 역캡슐화
│
▼
원본 패킷: 10.1.0.5 → 10.2.0.5 (내부 네트워크에서 전달)
터널링의 오버헤드
캡슐화는 추가 헤더만큼 오버헤드가 발생합니다.
1
2
3
4
5
6
7
일반 IP 패킷:
IP 헤더(20) + TCP 헤더(20) + 데이터(1460) = 1500바이트 (MTU)
GRE 터널:
외부 IP(20) + GRE(4) + 내부 IP(20) + TCP(20) + 데이터 = 1500바이트
데이터는 1436바이트만 가능 (24바이트 감소)
MTU 문제
터널 헤더가 추가되면서 패킷 크기가 외부 네트워크의 MTU를 초과할 수 있습니다.
이 경우 패킷 단편화가 발생하여 성능이 저하됩니다.
해결책:
- 터널 MTU 조정: 터널 내부의 MTU를 미리 낮추어 설정 (예: 1476바이트)
- 단편화 허용: 캡슐화 전 또는 후에 패킷을 분할하여 전송
- Path MTU Discovery: 경로상 최소 MTU를 자동으로 탐지하여 적용
단편화는 재조립 부담과 지연을 유발하므로, 터널 MTU를 적절히 설정하여 단편화를 방지하는 것이 성능 최적화의 핵심입니다.
정리: 터널은 가상의 전용선
터널링의 핵심 개념을 정리하면 다음과 같습니다.
- 캡슐화: 원본 패킷을 새 패킷의 페이로드로 감싸서 전송
- 투명성: 터널 양 끝의 내부 네트워크는 터널의 존재를 인식하지 못함
- 확장성: 비용이 많이 드는 전용선 없이 공용 인터넷 위에서 사설 네트워크 연결 가능
그러나 GRE와 같은 단순 터널링만으로는 데이터가 암호화되지 않아 보안에 취약합니다.
Part 2에서는 IPsec이 어떻게 암호화와 인증을 통해 안전한 터널을 구축하는지 살펴봅니다.
Part 3에서는 OpenVPN, WireGuard 등 설정이 간편하고 성능이 뛰어난 현대 VPN 기술을 다룹니다.
관련 글