점점 더 많은 사람들이 유료 VPN 서비스를 이용하는 대신 자체 VPN을 운영하고 있습니다. 비용이 저렴하고 개인 정보 보호에 더 유리하며 서버를 완벽하게 제어할 수 있기 때문입니다. 네트워크 차단이 심한 지역에서 가장 효과적인 옵션 중 하나는 Amnezia 프로젝트에서 WireGuard를 기반으로 개발한 프로토콜인 AmneziaWG입니다.
기존 WireGuard는 빠르고 안정적이지만, 패킷 구조가 고정되어 있고 핸드셰이크 과정이 예측 가능하여 DPI(심층 패킷 검사) 시스템에서 고유 식별 정보를 추출하고 차단할 수 있습니다. AmneziaWG는 이러한 문제를 해결합니다. 일반 WireGuard 연결에 불필요한 패킷을 추가하고, 헤더를 무작위화하며, 핸드셰이크 필드의 크기를 변경하여 WireGuard 고유의 특징적인 서명을 없애고 일반 UDP 트래픽과 구별되지 않도록 합니다.
이미 기존 VPN 터널을 사용 중인데 전환할 가치가 있는지 궁금하신가요? Linux에서 VPN 서버 설정 시 일반 OpenVPN/PPTP 설정과 비교해 보세요: PPTP 또는 OpenVPN?, 또는 서버에 WireGuard VPN 설정 방법 (난독화 없음)과 비교해 보세요.
이 가이드는 Docker나 웹 패널 없이 수동으로 AmneziaWG 서버를 설정하는 방법을 설명합니다. VPS 자체에 최소한의 리소스만 사용하고 모든 설정을 명령줄에서 진행하는 방식입니다. GUI, 데이터베이스, 리버스 프록시가 필요 없으므로 가장 가벼운 옵션이며 저렴한 VPS에서 사용하기에 적합합니다. 아래 예제 서버는 임시 IP 주소를 사용하고 있으므로, 해당 IP 주소를 실제 VPS의 주소로 바꿔야 합니다.
필요한 사항: Ubuntu 22.04/24.04 또는 Debian 11/12가 설치된 VPS, 루트 액세스 권한, 그리고 VPS의 IP 주소. 도메인 이름은 필요하지 않습니다. AmneziaWG는 인증서를 사용하지 않으므로 갱신해야 할 인증서도 없고, DPI에서 TLS 핸드셰이크로 인식할 항목도 없습니다.
아직 서버가 없으신가요? 서버 주문 방법을 참조하세요.
서버에 연결 중
윈도우(PuTTY)
PuTTY를 열고 호스트 이름 필드에 VPS IP 주소를 입력한 다음 포트를 22로 설정하고 VPS 제공업체에서 이메일로 보내준 비밀번호를 사용하여 root로 로그인하세요.
서버 IP 주소: 사용자의 IP 주소
로그인 계정: root
비밀번호: 비밀번호
1. PuTTY를 실행하고 호스트 이름 필드에 VPS IP 주소를 입력합니다.
2. 포트를 22로 설정하십시오.
3. 루트 계정으로 로그인하세요.
4. VPS 제공업체가 이메일로 보내준 비밀번호를 사용합니다.
결과는 다음과 같아야 합니다.
PuTTY/SSH를 통한 연결에 대한 자세한 안내는 SSH를 통해 Linux 서버에 연결하는 방법을 참조하세요.
리눅스/macOS (터미널)
ssh root@YOUR_SERVER_IP
아래의 모든 명령은 동일한 SSH 세션 내에서 서버에서 실행됩니다. 이는 2장부터 5장까지의 내용과 9장의 서버 측 검사에 해당합니다. 6장부터 8장까지의 내용(VPN 클라이언트 설치 및 구성)은 VPN이 실행되어야 하는 사용자의 Windows/macOS/Linux 장치에서 수행됩니다. 각 장에서는 서버에 접근해야 하는 명령이 있는지 여부를 명시적으로 설명합니다.
서버 준비
시스템 업데이트
무엇을 설치하기 전에 패키지 목록을 새로 고치고 설치된 패키지를 업그레이드하십시오.
apt update -y && apt upgrade -y
커널을 업그레이드하는 경우, 3절에서 AmneziaWG 커널 모듈을 빌드하기 전에 재부팅하십시오. 그렇지 않으면 DKMS가 잘못된 커널 헤더를 사용하여 빌드되어 모듈 로드가 실패할 수 있습니다. (apt 및 Linux 패키지 관리자 작동 방식에 대한 자세한 내용은 Linux 패키지 관리자를 참조하십시오 .) 다음 명령으로 확인하십시오.
cat /var/run/reboot-required
IP 포워딩을 활성화합니다.
이 설정을 사용하면 서버가 클라이언트의 패킷을 인터넷으로 전달할 수 있습니다. 이 설정이 없으면 터널은 생성되지만 트래픽이 통과하지 않습니다.
echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/00-amnezia.conf
sysctl --system
첫 번째 명령은 전용 설정 파일을 생성하고, 두 번째 명령은 서버를 재부팅하지 않고 해당 파일을 적용합니다.
방화벽(UFW)을 구성합니다.
UFW 규칙에 대한 자세한 내용은 Linux에서 방화벽 구성하기를 참조하세요.
SSH에 필요한 두 포트, 즉 22/tcp 포트(이 규칙을 건너뛰면 서버 접속 권한을 잃을 위험이 있습니다)와 AmneziaWG가 수신 대기할 42666/udp 포트를 여세요.
apt install ufw -y
ufw allow 22/tcp
ufw allow 42666/udp
ufw --force enable
ufw status
두 규칙 모두 ufw 상태 출력에서 ALLOW로 표시되어야 합니다.
AmneziaWG 설치 중
데비안은 우분투 스타일의 PPA를 직접 지원하지 않으므로, `add-apt-repository` 명령어를 사용하는 대신 수동으로 저장소를 추가해야 합니다. 우분투에서도 동일한 방식으로 작동합니다.
저장소를 수동으로 추가하세요
echo "deb [arch=amd64] https://ppa.launchpadcontent.net/amnezia/ppa/ubuntu jammy main" > /etc/apt/sources.list.d/amnezia.list
GPG 서명 키를 추가하세요
더 이상 사용되지 않는 apt-key 명령 대신 dearmored 키링 파일을 사용하고 PPA의 실제 서명 키(지문 75C9DD72C799870E310542E24166F2C257290828)를 가져오세요.
apt install -y gnupg2
gpg --keyserver keyserver.ubuntu.com --recv-keys 57290828
gpg --export 57290828 | tee /usr/share/keyrings/amnezia.gpg > /dev/null
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/amnezia.gpg] https://ppa.launchpadcontent.net/amnezia/ppa/ubuntu jammy main" > /etc/apt/sources.list.d/amnezia.list
업데이트 및 설치
apt update
apt install -y amneziawg
모듈이 로드되었는지 확인하십시오.
modprobe amneziawg
lsmod | grep amnezia
서버 및 클라이언트 구성 생성
보조 유틸리티를 설치하세요
qrcode 종속성을 설치한 다음, 전용 작업 디렉토리를 만들고 커뮤니티 구성 생성기 스크립트를 해당 디렉토리에 다운로드하십시오.
apt install -y python3-qrcode
mkdir -p ~/awg && cd ~/awg
wget -O awgcfg.py \
https://gist.githubusercontent.com/remittor/8c3d9ff293b2ba4b13c367cc1a69f9eb/raw/awgcfg.py
만약 사용하는 배포판의 저장소에 python3-qrcode가 없다면, `pip3 install qrcode --break-system-packages` 명령어를 사용하세요. (이 플래그는 기본적으로 관리되지 않는 pip 설치를 차단하는 Debian 12+/Ubuntu 24.04에서 필수입니다.) 두 가지 설치를 모두 실행하지 말고, 하나만 선택하세요.
서버 구성을 생성합니다.
/etc/amnezia/amneziawg/awg0.conf 파일을 생성합니다. 터널의 내부 서브넷과 UDP 포트는 기본값을 그대로 두거나 직접 설정할 수 있습니다.
python3 awgcfg.py --make /etc/amnezia/amneziawg/awg0.conf \
-i 10.10.8.1/24 -p 42666
-i 플래그는 터널의 내부 네트워크 주소와 마스크를 설정하고, -p는 서버의 UDP 포트(2.3단계에서 연 것과 동일한 포트)를 설정합니다.
클라이언트 구성 템플릿을 생성합니다.
python3 awgcfg.py --create
이렇게 하면 개별 클라이언트 구성이 생성되는 동일한 폴더에 템플릿이 저장됩니다. 이 템플릿에는 서버의 공개 키, IP 주소, 그리고 AmneziaWG를 일반 WireGuard와 구분하는 난독화 매개변수(Jc, Jmin, Jmax, S1, S2, H1~H4)가 이미 포함되어 있습니다.
클라이언트 추가
기기별로 항목을 하나씩 생성하세요. 이름은 기기 이름처럼 무엇이든 될 수 있습니다.
python3 awgcfg.py -a "laptop"
python3 awgcfg.py -a "phone"
클라이언트 파일 및 QR 코드 생성
python3 awgcfg.py -c -q
이제 ~/awg 폴더에는 laptop.conf 및 phone.conf와 같은 파일과 모바일 앱에서 바로 스캔할 수 있는 해당 PNG QR 코드가 포함됩니다.
이제 ~/awg 폴더에는 laptop.conf 및 phone.conf와 같은 파일과 모바일 앱에서 바로 스캔할 수 있는 해당 PNG QR 코드가 포함됩니다.
서비스 시작 및 자동 시작 활성화
awg0 인터페이스를 활성화하고 재부팅 시 자동으로 시작되도록 설정합니다.
systemctl enable --now awg-quick@awg0
systemctl restart [email protected]
systemctl status [email protected]
부팅 시 장치가 활성화되면 상태는 활성(종료됨)으로 표시되어야 합니다. 콘솔에 로그가 표시된 채 "멈춘" 것처럼 보이면 Q 키를 눌러 종료하십시오.
다음 명령어를 사용하여 활성 피어 목록과 피어별 트래픽을 확인하세요.
awg show
Windows에서 연결하기
이 섹션의 모든 작업은 SSH를 통하지 않고 Windows PC에서 수행됩니다. VPN 클라이언트는 실제로 터널을 사용할 장치에 설치해야 합니다. 서버에 접근하는 유일한 단계는 6.2절의 scp 다운로드이며, 이 명령어조차도 PC에서 직접 입력하여 서버에서 4절에서 이미 생성한 파일을 다운로드하는 것입니다.
클라이언트 설치
AmneziaWG는 전용 Windows 앱을 제공합니다. 이 앱의 인터페이스는 표준 WireGuard 클라이언트와 유사하지만 난독화 매개변수를 인식합니다. 프로젝트 공식 저장소에서 설치 프로그램을 다운로드하십시오.
https://github.com/amnezia-vpn/amneziawg-windows-client/releases
위 링크는 유지 관리되는 Windows 클라이언트 릴리스 페이지입니다. 해당 페이지에서 최신 .msi/.exe 파일을 다운로드하십시오. 이 페이지는 브라우저에서 열어야 하며, 터미널에 붙여넣는 명령어가 아닙니다.
설치 프로그램을 실행하고 설치 마법사의 단계를 따라 진행하십시오. 기본 설정은 변경할 필요가 없습니다.
구성을 가져옵니다
클라이언트 설정 파일을 서버에서 컴퓨터로 복사합니다. 가장 쉬운 방법은 scp 명령어를 사용하는 것이며, 서버가 아닌 컴퓨터의 PowerShell에서 실행하면 됩니다.
scp root@YOUR_SERVER_IP:~/awg/laptop.conf .
AmneziaWG 앱에서 "파일에서 터널 가져오기"를 클릭하고 laptop.conf를 선택한 다음 새 터널 옆의 토글을 켜십시오.
macOS에서 연결하기
지원되는 옵션은 두 가지입니다.
- AmneziaWG(Mac App Store): macOS 12 이상에서 작동하는 경량 클라이언트입니다. App Store에서 "AmneziaWG"를 검색하여 설치한 다음 "파일에서 터널 가져오기"를 사용하여 .conf 파일을 선택하세요. Windows 클라이언트와 동일한 작업 흐름입니다.
- AmneziaVPN(정식 앱, macOS 14 이상): 가벼운 AmneziaWG 전용 클라이언트 대신 모든 기능을 갖춘 Amnezia 앱을 사용하려면 github.com/amnezia-vpn/amnezia-client/releases/latest에서 .pkg 파일을 다운로드하세요.
필요한 경우 6.2단계와 마찬가지로 클라이언트 구성을 먼저 복사합니다.
scp root@YOUR_SERVER_IP:~/awg/laptop.conf .
Linux에서 연결
리눅스 데스크톱이나 노트북에서는 두 가지 옵션이 있습니다.
- GUI: github.com/amnezia-vpn/amnezia-client/releases에서 AmneziaVPN 데스크톱 클라이언트 전체 버전을 설치한 다음, Windows/macOS에서와 동일한 방식으로 .conf 파일을 가져오세요.
- 서버에서 사용하는 것과 동일한 amneziawg-tools(awg/awg-quick)를 사용하는 CLI:
apt install -y amneziawg
cp laptop.conf /etc/amnezia/amneziawg/awg0.conf
awg-quick up awg0
연결을 끊으려면 이 코드를 실행하세요.
awg-quick down awg0
로그인 시 터널이 자동으로 활성화되도록 하려면 서비스로 활성화하십시오.
systemctl enable --now awg-quick@awg0
연결 확인
6, 7 또는 8번 섹션에서 터널이 활성화되면 SSH 세션이 아닌 본인의 장치로 돌아가 브라우저에서 "내 IP 주소 확인" 앱을 엽니다. 표시되는 주소가 VPS의 IP 주소와 일치해야 합니다. SSH 세션 내부에서 확인하려면 서버에서 `awg show` 명령을 실행하고 클라이언트 측 피어에 최근 핸드셰이크 기록과 0이 아닌 트래픽이 표시되는지 확인하십시오.
참조 :
|
분야 |
가치관 |
|
주소 |
YOUR_TUNNEL_IP (터널 내부의 클라이언트 주소, 예: 10.10.8.2/32 - 4.4단계에서 클라이언트를 추가할 때 자동으로 할당됨) |
|
종점 |
YOUR_SERVER_IP:42666 (서버의 외부 IP 주소와 클라이언트가 연결하는 UDP 포트입니다.) |
|
DNS |
8.8.8.8 |
|
Jc / Jmin / Jmax |
핸드셰이크 전에 전송되는 "정크" 패킷의 수와 크기는 서버와 클라이언트 간에 다를 수 있으며, 이로 인해 연결이 끊어지지 않습니다. |
|
S1 / S2 |
핸드셰이크 패딩 필드의 크기 - 서버와 모든 클라이언트 간에 바이트 단위로 일치해야 합니다. |
|
H1–H4 |
프로토콜을 일반 트래픽처럼 위장하는 패킷 유형 헤더는 정확히 일치해야 하며, 서로 고유해야 합니다. |
터널 양쪽 끝에서 S1/S2와 H1~H4만 동일해야 합니다. Jc, Jmin, Jmax는 각 측에서 나가는 불필요한 트래픽을 어떻게 처리하는지에 대한 것이므로 위 예시에서처럼 클라이언트와 서버 값이 서로 달라도 무방합니다.
맺음말
이 가이드를 따르면 VPS에서 자체 AmneziaWG 서버가 실행됩니다. AmneziaWG는 WireGuard와 호환되는 프로토콜로, 일반 WireGuard보다 트래픽 난독화 기능을 제공하여 DPI 시스템이 일반 UDP 트래픽과 구분하기 훨씬 어렵게 만듭니다. 이 서비스는 systemd 유닛 awg-quick@awg0으로 실행되며, 서버 재부팅 후에도 별도의 조치 없이 계속 작동합니다.
~/awg에 생성된 .conf 파일과 QR 코드는 Windows 클라이언트뿐만 아니라 Android, iOS, macOS 및 Linux용 AmneziaWG 또는 Amnezia 앱, 그리고 Keenetic 및 OpenWrt 라우터에서도 사용할 수 있습니다.
4.4~4.5단계(python3 awgcfg.py -a "name", 그 다음 awgcfg.py -c -q)를 반복하고 systemctl restart [email protected] 명령으로 인터페이스를 다시 시작하면 언제든지 새 클라이언트를 추가할 수 있습니다.
서버가 가동된 후에도 꾸준히 유지하면 좋은 몇 가지 습관:
- 시스템을 최신 패치 상태로 유지하십시오. 주기적으로 `apt update -y && apt upgrade -y` 명령을 다시 실행하고, 커널 업그레이드 후에는 시스템을 재부팅하여 DKMS가 새 커널에 맞춰 amneziawg 모듈을 다시 빌드하도록 하십시오.
- ~/awg 디렉토리를 백업하세요. 이 디렉토리에는 모든 클라이언트의 개인 키와 서버 자체의 키 쌍이 awg0.conf 파일에 저장되어 있습니다. 이 디렉토리를 잃어버리면 모든 장치의 설정을 다시 생성해야 합니다.
- 분실된 장치는 즉시 해제하십시오. /etc/amnezia/amneziawg/awg0.conf 파일에서 해당 [Peer] 블록을 삭제하고 systemctl restart 명령을 실행하십시오. [이메일 보호].
연결이 되지 않으면 다음 순서대로 확인하세요.
- 서비스 상태(systemctl status) [이메일 보호])
- 방화벽 규칙(ufw status — 포트 42666/udp가 열려 있어야 함)
- 인터페이스가 아예 시작되지 않는 경우 DKMS/모듈 상태를 확인하려면 다음 명령어를 사용하십시오. (dkms status, lsmod | grep amnezia)
- 서버에서 활성화된 피어 목록 (awg show)
- 클라이언트 구성이 올바른 외부 서버 IP 주소를 가리키는지 확인합니다.
AmneziaWG를 다른 옵션과 비교해보고 싶으신가요? Linux VPN 서버 설정: PPTP 또는 OpenVPN? 및 서버에 Wireguard VPN 설정 방법을 참조하세요 . 완전한 VPN 터널이 아닌 간단한 프록시만 필요한 경우 CentOS/ArchLinux에서 3proxy를 구성하는 것이 더 간편한 대안입니다. VPN이 활성화된 후 서버 보안 강화에 대해서는 Linux 사용자: 관리 및 권한을 참조하세요.