IT Knowledge/Security/images/26-vpn-고급-설계-diagram.svg

VPN 고급 설계 (Advanced VPN Design)

VPN의 고급 구성과 보안 최적화 방법을 학습합니다.

📌 학습 목표

  • VPN 프로토콜 이해 (IPsec, OpenVPN, WireGuard)
  • Site-to-Site VPN 설계
  • Remote Access VPN 구성
  • VPN 보안 최적화
  • VPN 고가용성 구성

1. VPN 개요

정의

Virtual Private Network - 공용 네트워크를 통해 안전한 사설 네트워크 연결

VPN 유형

유형설명사용 사례
Site-to-Site오피스 간 안전한 연결본사-지사 연결
Remote Access원격 직원 접속재택근무
SSL VPN웹 브라우저 기반클라이언트 설치 불필요
Layer 2 VPNL2 터널링VLAN 확장

2. IPsec VPN

IPsec 프로토콜 스텍

IPsec Stack:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
IKE (Internet Key Exchange)
- IKE Phase 1: 인증 및 키 교환
- IKE Phase 2: SA (Security Association) 설정

IPsec Protocols:
- AH (Authentication Header): 인증만
- ESP (Encapsulating Security Payload): 인증 + 암호화

Modes:
- Transport Mode: 페이로드만 암호화
- Tunnel Mode: 전체 패킷 암호화 (헤더 포함)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━

IKE Phase 1

모드

모드설명
Main Mode6단계 핸드셰이크 (안전)
Aggressive Mode3단계 핸드셰이크 (빠름)

핸드셰이크 (Main Mode)

1. SA 제안 (Initiator → Responder)
2. SA 승인 (Responder → Initiator)
3. Diffie-Hellman 교환 (Initiator → Responder)
4. Diffie-Hellman 응답 (Responder → Initiator)
5. 인증 (Initiator → Responder)
6. 인증 승인 (Responder → Initiator)

IKE Phase 2

1. Quick Mode SA 제안 (Initiator → Responder)
2. Quick Mode SA 승인 (Responder → Initiator)
3. IPsec SA 설정 완료

IPsec 구성 예시 (Cisco ASA)

! Site-to-Site VPN
crypto ipsec transform-set TRANSFORM-A esp-aes 256 esp-sha-hmac
 mode tunnel
 
access-list VPN-ACL extended permit ip 192.168.1.0 0.0.0.255 10.0.0.0 0.0.0.255
 
crypto map CMAP-A 10 match address VPN-ACL
crypto map CMAP-A 10 set peer 203.0.113.1
crypto map CMAP-A 10 set transform-set TRANSFORM-A
crypto map CMAP-A interface outside
 
crypto isakmp enable
crypto isakmp key SecretKey123 address 203.0.113.1
crypto isakmp policy 10
encryption aes 256
hash sha
authentication pre-share
group 14
lifetime 86400

3. OpenVPN

특징

  • 오픈 소스
  • SSL/TLS 기반
  • 유연한 설정
  • 크로스 플랫폼

구성 요소

컴포넌트설명
CA (Certificate Authority)인증서 발급
Server Certificate서버 인증서
Client Certificate클라이언트 인증서
TLS Auth KeyDoS 공격 방지

서버 구성

# /etc/openvpn/server.conf
port 1194
proto udp
dev tun
 
ca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-auth ta.key 0
 
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
 
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
 
keepalive 10 120
 
cipher AES-256-CBC
auth SHA256
 
user nobody
group nogroup
persist-key
persist-tun
 
status openvpn-status.log
verb 3

클라이언트 구성

# client.ovpn
client
dev tun
proto udp
remote vpn.example.com 1194
 
resolv-retry infinite
nobind
 
user nobody
group nogroup
persist-key
persist-tun
 
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
tls-auth ta.key 1
 
cipher AES-256-CBC
auth SHA256
 
verb 3

4. WireGuard

특징

  • 가벼움 (~4,000 코드 라인)
  • 빠름 (커널 레벨)
  • 현대적 암호화
  • 단순한 설정

WireGuard vs OpenVPN

항목WireGuardOpenVPN
코드 라인~4,000~100,000+
속도더 빠름느림
설치쉬움복잡
유연성낮음높음

서버 구성

# /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
 
[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.0.0.2/32

클라이언트 구성

# client.conf
[Interface]
Address = 10.0.0.2/24
PrivateKey = CLIENT_PRIVATE_KEY
DNS = 8.8.8.8
 
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = vpn.example.com:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

WireGuard 시작

# 서버
sudo wg-quick up wg0
 
# 클라이언트
sudo wg-quick up client.conf

5. Site-to-Site VPN 설계

토폴로지

┌─────────────────┐                ┌─────────────────┐
│   Site A       │                │   Site B       │
│ 192.168.1.0/24│                │ 192.168.2.0/24 │
│                │                │                │
│  [Router A]    │                │  [Router B]    │
│ 203.0.113.1   │───────┬────────│ 198.51.100.1  │
└────────┬────────┘       │ Internet│ └───────┬────────┘
         │                 │              │
         └─────────────────┴──────────────┘
                    Public IP

IPsec Site-to-Site 구성 (StrongSwan)

# /etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no
 
conn site-to-site
    keyexchange=ikev2
    ike=aes256-sha256-modp2048!
    esp=aes256-sha256!
    left=203.0.113.1
    leftsubnet=192.168.1.0/24
    leftid=@sitea.example.com
    leftauth=pubkey
    leftcert=sitea.crt
    leftfirewall=yes
 
    right=198.51.100.1
    rightsubnet=192.168.2.0/24
    rightid=@siteb.example.com
    rightauth=pubkey
    rightcert=siteb.crt
 
    auto=add
 
# /etc/ipsec.secrets
: RSA sitea.key

6. Remote Access VPN

RADIUS 인증 통합

VPN Client → RADIUS Server → AD/LDAP
           (인증)

RADIUS 구성 (FreeRADIUS)

# /etc/freeradius/3.0/clients.conf
client vpn_server {
    ipaddr = 10.8.0.1
    secret = RadiusSecret123
    shortname = vpn
}
 
# /etc/freeradius/3.0/users
bob Cleartext-Password := "BobPassword123"
    Framed-IP-Address = 10.8.0.10

OpenVPN RADIUS 통합

# /etc/openvpn/server.conf
plugin /usr/lib/openvpn/radiusplugin.so /etc/openvpn/radiusplugin.cnf
# /etc/openvpn/radiusplugin.cnf
NAS-Identifier=OpenVPN
Service-Type=5
Framed-Protocol=1
NAS-IP-Address=10.0.0.1
NAS-Port=1194
Secret=RadiusSecret123
Server=10.0.0.2
timeout=10

7. VPN 보안 최적화

암호화 설정

암호화키 길이상태
AES-256-CBC256비트권장
AES-256-GCM256비트권장 (더 빠름)
ChaCha20-Poly1305256비트권장 (모바일)

인증 방식

방식설명보안성
PSK (Pre-Shared Key)공유 키중간
CertificateX.509 인증서높음
MFA2단계 인증매우 높음

보안 설정 예시

# OpenVPN 보안 강화
cipher AES-256-GCM
auth SHA256
tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384
tls-version-min 1.3
remote-cert-tls server
tls-auth ta.key 0

IKEv2 설정 (StrongSwan)

# /etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1"
 
conn ikev2
    keyexchange=ikev2
    ike=aes256gcm16-prfsha384-modp2048!
    esp=aes256gcm16-prfsha384!
    left=%any
    leftsubnet=0.0.0.0/0
    leftauth=eap-radius
    leftid=%any
    leftfirewall=yes
 
    right=10.0.0.1
    rightauth=pubkey
    rightid=@vpn.example.com
    rightcert=vpn.crt
 
    auto=add
    eap_identity=%identity

8. VPN 고가용성 (HA)

Active-Active 구성

          [Load Balancer]
               /        \
           VPN-1         VPN-2
           /    \         /    \
        Subnet1  Subnet2  Subnet3  Subnet4

VRRP (Virtual Router Redundancy Protocol)

# VPN 서버 1 (Master)
sudo apt-get install keepalived
 
# /etc/keepalived/keepalived.conf
vrrp_instance VPN {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass Keepalived123
    }
    virtual_ipaddress {
        10.0.0.10
    }
}

Active-Active 구성 (DNS Round Robin)

vpn1.example.com → 10.0.0.1
vpn2.example.com → 10.0.0.2

DNS 라운드 로빈:
vpn.example.com → {10.0.0.1, 10.0.0.2}

9. VPN 모니터링

연결 상태 확인

# WireGuard
sudo wg show
 
# OpenVPN
sudo systemctl status openvpn@server
 
# IPsec
sudo ipsec status

로그 모니터링

# OpenVPN 로그
tail -f /var/log/openvpn/openvpn.log
 
# StrongSwan 로그
tail -f /var/log/syslog | grep ipsec
 
# WireGuard 로그
journalctl -u wg-quick@wg0 -f

🎯 실습 과제

1. OpenVPN Server 구성

# 1. CA 생성
./easyrsa init-pki
./easyrsa build-ca nopass
 
# 2. 서버 인증서 생성
./easyrsa build-server-full server nopass
 
# 3. 클라이언트 인증서 생성
./easyrsa build-client-full client1 nopass
 
# 4. Diffie-Hellman 파라미터 생성
./easyrsa gen-dh
 
# 5. TLS Auth 키 생성
openvpn --genkey secret ta.key
 
# 6. 서버 시작
sudo systemctl start openvpn@server

2. WireGuard Site-to-Site VPN

# 서버 A
wg genkey > privatekey_a
wg pubkey < privatekey_a > publickey_a
 
# 서버 B
wg genkey > privatekey_b
wg pubkey < privatekey_b > publickey_b
 
# 키 교환 후 구성
wg-quick up wg0

3. VPN 성능 테스트

# iperf3로 대역폭 테스트
iperf3 -c 10.8.0.1
 
# 지연 측정
ping -c 100 10.8.0.1

✅ 학습 체크리스트

  • VPN 프로토콜 이해 (IPsec, OpenVPN, WireGuard)
  • Site-to-Site VPN 설계 능력
  • Remote Access VPN 구성 능력
  • RADIUS 인증 통합 능력
  • VPN 보안 최적화 능력
  • VPN 고가용성 구성 능력

🔗 관련 노트

📚 참고 자료


다음 학습: WiFi 보안