wireguard 암호화 종류 설정 방법
WireGuard는 설계 상 암호화 알고리즘을 수동으로 설정할 수 없습니다. 대신, 보안성과 성능이 뛰어난 고정된 암호화 스위트를 사용하며, 구성 시 자동으로 적용됩니다. 따라서 사용자가 직접 암호화 종류를 설정할 필요도, 방법도 없습니다.
🔐 WireGuard에서 사용하는 고정 암호화 구성
WireGuard는 다음과 같은 모던 암호화 알고리즘을 사용합니다:
키 교환 | Noise_IK (Noise Protocol Framework 기반) |
대칭 암호화 | ChaCha20-Poly1305 |
해시 함수 | BLAKE2s |
키 도출 | HKDF (HMAC-based Extract-and-Expand Key Derivation Function) |
Curve | Curve25519 (공개키 기반 암호화) |
📌 요약
- WireGuard는 암호화 알고리즘을 자동으로 처리하며, 사용자가 변경하거나 선택할 수 없습니다.
- 이는 WireGuard의 보안성, 단순성, 성능을 높이는 핵심 설계 철학 중 하나입니다.
- 커널 모듈 또는 wg 사용자 공간 도구 어디에도 암호화 스위트 변경 옵션이 없습니다.
✅ 보안 관련 설정에서 가능한 것들
사용자가 설정할 수 있는 보안 관련 항목은 다음과 같습니다:
- 프라이빗 키 / 퍼블릭 키: 수동 생성 가능 (wg genkey, wg pubkey)
- PSK (Pre-shared key): 양측 키 교환시 추가 보안 계층으로 사용 가능 (wg genpsk)
- AllowedIPs: 트래픽 라우팅 범위 제어
- PersistentKeepalive: NAT 환경에서 연결 유지
필요하신 경우 PSK 설정법이나 WireGuard의 Noise 프로토콜 동작 방식도 설명해 드릴 수 있습니다.
wireguard client에서 특정 포트만 적용하게 하려면?
WireGuard는 기본적으로 레벨 3(네트워크 레이어) VPN이기 때문에 특정 포트만을 대상으로 하는 트래픽 필터링은 자체적으로 지원하지 않습니다. 하지만 클라이언트에서 특정 포트만 WireGuard 인터페이스를 통해 전달되도록 설정하고 싶다면 다음과 같은 방법들을 사용할 수 있습니다:
✅ 방법 1: iptables 또는 nftables를 사용한 트래픽 분기
WireGuard 인터페이스(wg0 등)를 통해 특정 포트 트래픽만 통과시키려면 리눅스 방화벽을 활용해야 합니다.
예시 (iptables):
# 1. 먼저 WireGuard 인터페이스를 확인 (예: wg0)
# 2. 특정 포트(예: 443)만 wg0 인터페이스로 라우팅
iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 1
# 3. 라우팅 테이블 설정
ip rule add fwmark 1 table 100
ip route add default dev wg0 table 100
이렇게 하면 TCP 443 포트로 나가는 트래픽만 WireGuard를 통해 전송됩니다.
✅ 방법 2: ip route + policy routing 사용
WireGuard의 AllowedIPs 필드는 IP 대역 기반으로만 필터링 가능하며 포트는 고려되지 않으므로, policy routing과 결합하는 것이 필요합니다.
✅ 방법 3: 특정 애플리케이션에만 WireGuard를 사용
Linux에서는 netns (network namespaces)를 사용해 특정 애플리케이션만 WireGuard를 사용하도록 만들 수 있습니다.
# 새로운 네트워크 네임스페이스 생성
ip netns add vpnspace
# wg0를 네임스페이스로 이동
ip link set wg0 netns vpnspace
# 네임스페이스 안에서 애플리케이션 실행
ip netns exec vpnspace curl https://example.com
요약
iptables + policy routing | 특정 포트만 WireGuard 사용 | 복잡한 설정 필요 |
netns | 특정 앱만 WireGuard 사용 | 앱 실행 방식 수정 필요 |
AllowedIPs | 포트 필터링 불가, IP 기반 | 제한적 제어만 가능 |
wireguard client에서 특정 IP로 가는 패킷들만 적용하게 하려면?
WireGuard 클라이언트에서 특정 IP로 향하는 트래픽만 VPN 터널을 통해 전달되도록 하려면, AllowedIPs 설정을 활용하면 됩니다. 이 필드는 클라이언트가 어떤 트래픽을 WireGuard 인터페이스를 통해 보내야 할지를 결정합니다.
✅ 예시 설정: 특정 IP만 VPN으로 전달
WireGuard 클라이언트 설정 (wg0.conf 또는 wg-quick 구성)
[Interface]
PrivateKey = <클라이언트 개인키>
Address = 10.0.0.2/32
DNS = 1.1.1.1
[Peer]
PublicKey = <서버 공개키>
Endpoint = <서버 IP>:51820
AllowedIPs = 203.0.113.5/32
🔹 여기서 AllowedIPs = 203.0.113.5/32 는 203.0.113.5 로 향하는 트래픽만 VPN 터널(wg0)을 통해 전달되도록 설정합니다.
🔹 그 외의 트래픽은 로컬 네트워크 또는 일반 인터넷 경로를 따릅니다.
✅ 여러 IP를 지정하고 싶다면?
AllowedIPs = 203.0.113.5/32, 198.51.100.25/32, 10.1.0.0/16
✅ 서버 측 라우팅도 확인
서버에서도 해당 IP 트래픽을 클라이언트에게 라우팅하도록 설정되어 있어야 합니다. 예를 들어, 203.0.113.5를 VPN을 통해 나가게 하려면 서버 측에서 포워딩 및 NAT 설정도 필요할 수 있습니다.
정리
특정 IP로만 VPN 사용 | AllowedIPs = <특정 IP>/32 |
여러 IP | 쉼표로 구분해서 여러 개 입력 |
모든 트래픽 VPN 사용 | AllowedIPs = 0.0.0.0/0 |
서버쪽 설정도
WireGuard 서버 측에서 특정 IP로 향하는 클라이언트 트래픽만 처리하도록 설정하려면 다음과 같은 구성과 네트워크 설정이 필요합니다.
✅ 1. 서버 설정 예시 (wg0.conf)
[Interface]
Address = 10.0.0.1/24
PrivateKey = <서버 개인키>
ListenPort = 51820
PostUp = iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
[Peer]
PublicKey = <클라이언트 공개키>
AllowedIPs = 10.0.0.2/32
PostUp과 PostDown은 클라이언트가 터널을 통해 인터넷으로 나갈 수 있도록 **NAT (IP 마스커레이딩)**을 설정하는 부분입니다. eth0은 외부 네트워크 인터페이스 이름이며, 실제 환경에 따라 변경해야 합니다.
✅ 2. 클라이언트에서 특정 IP로만 트래픽 전달
클라이언트 설정:
[Peer]
PublicKey = <서버 공개키>
Endpoint = <서버 공인 IP>:51820
AllowedIPs = 203.0.113.5/32
- 클라이언트는 203.0.113.5로 가는 트래픽만 서버에 전달합니다.
✅ 3. 서버에서 IP 포워딩 활성화
리눅스에서 IP 포워딩이 비활성화되어 있으면 터널이 작동하지 않음:
echo 1 > /proc/sys/net/ipv4/ip_forward
또는 /etc/sysctl.conf에 영구 적용:
net.ipv4.ip_forward = 1
✅ 4. 서버에서 라우팅 확인
서버가 203.0.113.5와 통신 가능한 경로에 있어야 하며, 일반적으로는 인터넷을 통해 NAT된 형태로 나갈 수 있게 됩니다.
✅ 전체 흐름 요약
- 클라이언트는 203.0.113.5 트래픽만 wg0를 통해 서버로 보냄.
- 서버는 해당 패킷을 받아서 NAT 적용 후 인터넷에 전달.
- 응답 패킷은 WireGuard 터널을 통해 클라이언트로 돌아감.
'프로그램... > 프로....WLAN' 카테고리의 다른 글
[암호화/인증] 802.11 Sniffer Capture Analysis - WPA/WPA2 with PSK or EAP (0) | 2015.04.13 |
---|