WireGuard
WireGuard는 암호화 된 가상 사설망을 구현하는 통신 프로토콜 및 무료 오픈 소스 소프트웨어이며 사용 편의성, 고속 성능 및 낮은 공격 표면을 목표로 설계되었습니다. IPsec 및 OpenVPN 터널링 프로토콜보다 더 나은 성능과 전력 절약을 목표로합니다.
기반이 P2P인듯
WireGuardNT
윈도우 커널용 고성능 WireGuard 구현체
- Windows NT 커널과 NDIS(윈도우 네트워킹 스택) API를 이용하도록 리눅스용 WireGuard를 포팅
- Windows 7,9,8.1,10 및 AMD64,x86,ARM64 지원
- 기존 Wintun 기반으로 실행되는 wireguard-go 는 userspace 에서 실행되지만, WireGuardNT 는 리눅스/BSD 에서 실행되는 것처럼 네트워킹 스택과 깊숙이 연동되어 실행
- 작은 테스트 기기에서도 ~7.5Gbps TX 달성. 하지만 더 최적화 가능할 것
- 윈도우 사용자들의 이더넷 연결은 1Gbps 까지 가지도 않기 때문에 기존의 느린 wireguard-go 로도 큰 문제가 없었지만, WiFi 에서는 성능이 안좋았음
- ~600Mbps without WireGuard,
- ~600Mbps with wireguard-go/Wintun over Ethernet,
- ~95Mbps with wireguard-go/Wintun over WiFi,
- ~600Mbps with WireGuardNT over WiFi
- 윈도우 사용자들의 이더넷 연결은 1Gbps 까지 가지도 않기 때문에 기존의 느린 wireguard-go 로도 큰 문제가 없었지만, WiFi 에서는 성능이 안좋았음
WireGuard Endpoint Discovery and NAT Traversal using DNS-SD
서버 구축
ASUS 공유기로 설정하기
IpTime 공유기로 설정하기
- 아이피타임 공유기의 WireGuard VPN 이용 : 네이버 블로그
- ipTIME 공유기 WireGuard 서버 설정 및 사용 방법 – Windows | 고객지원-자주묻는질문 | EFM - ipTIME
Client Install
핵심 포인트:
기본 설치 후 디렉토리 구조
설정 파일 생성 및 배치
# wg0.conf 파일을 /etc/wireguard/ 디렉토리에 배치
sudo cp your-config.conf /etc/wireguard/wg0.conf
# 올바른 권한 설정 (매우 중요)
sudo chmod 600 /etc/wireguard/wg0.conf
sudo chown root:root /etc/wireguard/wg0.conf
WireGuard 인터페이스 활성화
# 방법 1: wg-quick 사용 (권장)
sudo wg-quick up wg0
# 방법 2: systemd 서비스로 관리
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
# 상태 확인
sudo wg show
설정 적용 및 확인
# WireGuard 인터페이스 상태 확인
ip addr show wg0
# WireGuard 상세 정보 확인
sudo wg show wg0
# 네트워크 라우팅 확인
ip route show
설정 수정 후 재적용
# conf 파일 수정 후
sudo nano /etc/wireguard/wg0.conf
# 인터페이스 재시작
sudo wg-quick down wg0
sudo wg-quick up wg0
# 또는 systemd 재시작
sudo systemctl restart wg-quick@wg0
트러블슈팅
# 서비스 로그 확인
sudo journalctl -u wg-quick@wg0 -f
# systemd-networkd 사용 시
sudo systemctl status systemd-networkd
# iptables 규칙 확인 (필요시)
sudo iptables -L -n
resolvconf: command not found
그냥 resolvconf를 설치하자:
conf file example
[Interface]
# 로컬 private key 설정
PrivateKey = <your-private-key>
# WireGuard 인터페이스 IP 주소
Address = 10.0.0.1/24
# 필요시 DNS 설정
DNS = 8.8.8.8
# 리슨 포트
ListenPort = 51820
[Peer]
# 상대방 public key
PublicKey = <peer-public-key>
# 상대방 IP 범위
AllowedIPs = 10.0.0.2/32
# 상대방 엔드포인트 (선택사항)
Endpoint = example.com:51820
IpTime 에서 추출한 conf 예제
[Interface]
PrivateKey = ~~~~~
Address = 10.10.100.3/24
DNS = 210.220.163.82
[Peer]
PublicKey = ~~~~~
AllowedIps = 0.0.0.0/0
Endpoint = name.iptime.org:65430
PresharedKey = ~~~~~
wg-quick
자세한 내용은 Wg-quick 항목 참조.
See also
- VPN
- IPsec
- OpenVPN
- FireZone - WireGuard 기반의 VPN 서버 & 방화벽
- tailscale
- nebula
- Wintun - Layer 3 TUN Driver for Windows
Favorite site
- WireGuard: fast, modern, secure VPN tunnel
- Wikipedia (en) WireGuard
- WireGuard - 나무위키
- 우분투 서버에 Docker로 WireGuard 설치
- 아이피타임 공유기의 WireGuard VPN 이용, 내부망 NAS 접속하는 방법 : 네이버 블로그
- WireGuard VPN 서버란? : 네이버 블로그
- WireGuard로 멋진 VPN 서버 구축하기 - 1
- 간단하게 Wireguard VPN 세팅하기
- 와이어가드 프로토콜 재미있는 설명 - 속도, 성능 장점
- WireGuard vs OpenVPN vs I.. : 네이버블로그