[VPN] IPSec 터널 및 IKE 연결 방식

IPSec 터널은 인터넷 프로토콜 보안(IPSec, IP Security)을 이용해 두 네트워크 간에 암호화된 통신 경로(터널)를 만드는 기술입니다. 보통 VPN(Virtual Private Network)의 핵심 기술 중 하나로 사용되며, 안전하게 데이터를 송수신할 수 있도록 해줍니다.

IPSec 터널이란?

  • IPSec 터널 모드(IPSec Tunnel Mode)는 네트워크 장비(예: 라우터, 방화벽 등) 간에 암호화된 가상의 터널을 형성하여, 두 개의 네트워크 간에 안전한 통신을 가능하게 합니다.
  • 인터넷 같은 불특정 다수가 접근 가능한 네트워크 위에 안전한 통신 경로를 구축하는 것이 목적입니다.

작동 방식

  1. 터널의 양 끝단 장비(예: VPN 게이트웨이)는 서로를 인증합니다. (보통 사전 공유 키(PSK), 인증서 등을 사용)
  2. IKE(Internet Key Exchange)를 통해 보안 매개변수를 협상하고, 세션 키를 교환합니다.
  3. 실제 데이터가 오갈 때는 ESP(Encapsulating Security Payload)AH(Authentication Header) 프로토콜을 통해 데이터를 암호화하고 인증합니다.
  4. 암호화된 IP 패킷을 새로운 외부 IP 헤더로 감싸 전송합니다. (이게 ‘터널 모드’의 핵심)

IPSec 터널 연결 단계 (IKEv1 또는 IKEv2 기준)

IPSec 연결은 보통 두 단계로 나뉩니다:

  1. IKE Phase 1: 인증 및 보안 채널 수립
  2. IKE Phase 2 (IPSec Phase): 실제 데이터 통신에 사용할 세션 키 생성

Phase 1: IKE Security Association 수립

목표: 두 장비 간에 안전한 제어 채널 (IKE SA)을 먼저 수립하여, 이후 민감한 설정 정보를 안전하게 교환할 수 있게 함.

1.1. IKE 협상 시작

  • 양쪽 장비(IPSec peer)가 연결을 시작함 (Initiator와 Responder)
  • 서로 지원 가능한 암호화 알고리즘, 인증 방법 등을 교환
    • 예: AES-256, SHA-256, DH Group 14 등

1.2. Diffie-Hellman 키 교환

  • 서로 키 정보를 주고받아 공유 비밀 키 생성 (이 키는 암호화에 사용됨)
  • 이 과정은 공개키 기반이지만, 공유된 키는 외부에서 알 수 없음

1.3. 인증 수행

  • 서로의 신원을 인증 (보통 다음 중 하나 사용):
    • Pre-Shared Key (PSK): 양쪽에 같은 비밀번호 설정
    • 디지털 인증서: PKI 기반
    • EAP 방식: 사용자 인증용

1.4. IKE SA 생성 (Secure Association)

  • 위 과정이 완료되면, 양쪽 장비 간에 암호화된 안전한 제어 채널 생성됨

Phase 2: IPSec Security Association 수립

목표: 실제 데이터를 암호화하기 위한 IPSec 터널 (IPSec SA)을 만들고, 트래픽을 전송할 준비를 마침

2.1. IPSec 프로토콜/정책 협상

  • 어떤 프로토콜을 쓸지 협의
    • ESP (Encapsulating Security Payload): 암호화와 인증 제공 (일반적으로 사용)
    • AH (Authentication Header): 인증만 제공 (거의 안 씀)
  • 어떤 암호화 알고리즘을 사용할지 결정 (예: AES, 3DES, SHA 등)

2.2. 세션 키 생성

  • Phase 1에서 공유된 비밀 키를 기반으로 실제 트래픽을 암호화할 키 생성

2.3. IPSec SA 생성

  • 양쪽 장비는 서로에게 암호화된 트래픽을 보낼 수 있는 IPSec 터널을 완성

이후: 데이터 통신

  • 이제부터는 이 IPSec 터널을 통해 모든 데이터가 암호화되어 전송됨
  • 클라이언트 또는 네트워크 장비는 인터넷을 통해 전송되지만 내부처럼 안전한 연결을 경험

요약: 단계별 체크리스트

단계설명키워드
Phase 1제어 채널 설정IKE, DH 키 교환, PSK/인증서, 암호화
Phase 2터널 설정ESP, IPSec SA, 트래픽 선택자
이후암호화된 데이터 전송실제 사용자 데이터 암호화

IKE는 어떤 방식으로 연결되나요?

기본 프로토콜

  • IKE는 UDP 기반 프로토콜입니다.
  • 즉, TCP가 아닌 UDP를 사용하며, 신뢰성 있는 연결을 보장하지는 않지만 빠른 통신이 가능합니다.

IKE가 사용하는 포트

포트 번호프로토콜설명
UDP 500번 포트IKE (v1, v2 모두)IKE SA를 설정하기 위한 초기 패킷 전송에 사용됨
UDP 4500번 포트NAT-T (NAT Traversal)NAT 환경에 있는 경우 ESP 대신 이 포트를 사용하여 UDP로 터널링
ESP 프로토콜 (IP 프로토콜 번호 50)암호화된 실제 데이터IKE 설정 후 데이터 트래픽에 사용됨 (포트 X, IP 프로토콜 50)
AH 프로토콜 (IP 프로토콜 번호 51)인증 전용 (거의 안 씀)선택적 사용

연결 흐름 간단 요약

  1. UDP 500으로 IKE SA 협상 시작
  2. NAT 환경이면 → NAT-T가 감지되어 UDP 4500으로 포트 전환
  3. Phase 2까지 완료되면 → ESP(IP 프로토콜 50) 또는 AH(IP 프로토콜 51)로 암호화된 데이터 전송

NAT 환경 예시

만약 장비 뒤에 NAT가 있을 경우 (예: 공유기):

  • 일반 ESP 패킷은 NAT 장비에서 막히거나 변조됨
  • 이때 NAT-T (UDP encapsulation)이 작동하여 ESP를 UDP 4500 포트로 감싸서 전송함 → NAT 환경에서도 통신 가능

참고 예시 (방화벽 설정 시)

허용해야 할 포트/프로토콜목적
UDP 500IKE Phase 1/2
UDP 4500NAT 환경에서의 IKE 및 ESP 트래픽
ESP (IP 프로토콜 50)암호화된 데이터 (터널링된 트래픽)
AH (IP 프로토콜 51)인증용 데이터 (선택적)

주의: ESP는 TCP/UDP 포트가 아니라 IP 프로토콜 번호 50입니다. 방화벽에서는 포트가 아닌 프로토콜 번호로 허용해줘야 합니다.

[RaspberryPi] USB Port control

24시간 내내 돌리면 라즈베리 파이가 너무 뜨거울 것 같아서 USB 선풍기를 포트에 연결하고, 이걸 껐다 켰다 하려고 시도했다. 결론적으론 다른 USB 기기를 쓰지 않는다면, 전체 USB 포트를 껐다 켜는 방식으로 가능하다. 다른 USB 기기를 사용한다면, 실패. 아직 디바이스 드라이버에 커널 컴파일까진 시도하고 싶지 않다.

https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=93463 쓰레드를 참고하면, hub-ctrl을 이용하면, 전체 포트 혹은 개별 포트를 껐다 켰다 하는 것을 할 수 있다.  그러나 개별 포트를 끄는 게, 실제 VBUS 전원까지 내리는 건 아니고, 그냥 못쓰게 할 뿐이다. 그래서, 전체 포트를 끄지 않는 한, 개별 포트를 꺼도 해당 포트 VBUS는 살아있기 때문에 USB 선풍기는 계속 돈다-_-;;

다음은 usb-ctrl의 설치 및 사용 방법이다.

라즈베리 파이에서 다음을 설치한다.

# apt-get install libusb-dev

다음으로 바이너리를 만든다.

# apt-get install git gcc
# git clone https://github.com/codazoda/hub-ctrl.c
# gcc -o hub-ctrl hub-ctrl.c -lusb

만든 바이너리를 적당한 곳(예를 들면, /usr/sbin/)에 설치한다.

# cp hub-ctrl /usb/sbin/

나의 경우 한 시간에 한번 정도, 50초 정도 돌게 하고 싶었다. /etc/cron.hourly 아래에 다음과 같은 스크립트를 만들어 실행 권한을 준다.

# vi /etc/cron.hourly/coolingusbfan
#!/bin/sh
hub-ctrl -h 0 -P 2 -p 1; sleep 50; sudo hub-ctrl -h 0 -P 2 -p 0

참고로, 다음 그림과 같이 포트 번호를 붙인다면,

라즈베리 파이 3 Model B의 경우, 다음과 같다고 한다.

Hub:Port — Controlled port(s)
0:1 — Controls the Ethernet port
0:2 — Controls all four USB ports (not the Ethernet)
0:3 — Controls USB Port 4
0:4 — Controls USB Port 2
0:5 — Controls USB Port 3

NAS를 위해, 외장 하드를 붙일 거라 이제 더는 위 스크립트를 사용하지 못한다.