
클라우드에 개인 VPN 설정
Algo VPN은 개인용 WireGuard 및 IPsec VPN 설정을 간소화하는 Ansible 스크립트 모음입니다. 사용 가능한 가장 안전한 기본값을 사용하며 일반적인 클라우드 제공업체에서 작동합니다.
자세한 내용은 릴리스 공지를 참조하세요.
Algo 서버를 실행하는 가장 쉬운 방법은 로컬 시스템이나 Google Cloud Shell에서 실행하고 클라우드에 새 가상 머신을 설정하도록 하는 것입니다.
클라우드 호스팅 제공업체에 계정을 설정하세요. Algo는 DigitalOcean(가장 사용자 친화적), Amazon Lightsail, Amazon EC2, Vultr, Microsoft Azure, Google Compute Engine, Scaleway, DreamCompute, Linode, 기타 OpenStack 기반 클라우드 호스팅, CloudStack 기반 클라우드 호스팅 또는 Hetzner Cloud를 지원합니다.
Algo 사본을 받으세요. Algo 스크립트는 로컬 시스템에서 실행됩니다. 사본을 얻는 방법은 두 가지입니다:
ZIP 파일을 다운로드하세요. 파일의 압축을 풀면 Algo 스크립트가 포함된 algo-master 디렉토리가 생성됩니다.
git clone을 사용하여 Algo 스크립트가 포함된 algo 디렉토리를 생성하세요:
git clone https://github.com/trailofbits/algo.git
구성 옵션을 설정하세요. 원하는 텍스트 편집기에서 config.cfg를 엽니다. users 목록에 생성하려는 사용자를 지정합니다. VPN에 연결하려는 각 기기에 대해 고유한 사용자를 만드세요. 배포 전에 다른 옵션도 검토해야 합니다. 나중에 마음을 바꾸면 새 서버를 배포해야 할 수 있습니다.
배포를 시작하세요. 터미널로 돌아갑니다. Algo 디렉토리에서 플랫폼에 맞는 스크립트를 실행합니다:
macOS/Linux:
./algo
Windows:
.\algo.ps1
스크립트를 처음 실행하면 필요한 Python 환경(Python 3.11+)이 자동으로 설치됩니다. 이후 실행 시 즉시 시작되며 모든 플랫폼(macOS, Linux, WSL을 통한 Windows)에서 작동합니다. Windows PowerShell 스크립트는 Ansible이 Unix 계열 환경을 필요로 하므로 필요할 때 자동으로 WSL을 사용합니다. 완전한 기능의 VPN 서버에는 필요하지 않은 여러 선택적 기능이 있습니다. 이러한 선택적 기능은 배포 문서에 설명되어 있습니다.
이것으로 끝입니다! 이제 클라이언트를 설정하여 VPN에 연결할 수 있습니다. 아래의 VPN 클라이언트 구성으로 진행하세요.
"# Congratulations! #"
"# Your Algo server is running. #"
"# Config files and certificates are in the ./configs/ directory. #"
"# Go to https://whoer.net/ after connecting #"
"# and ensure that all your traffic passes through the VPN. #"
"# Local DNS resolver 172.16.0.1 #"
"# The p12 and SSH keys password for new users is XXXXXXXX #"
"# The CA key password is XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX #"
"# Shell access: ssh -F configs/<server_ip>/ssh_config <hostname> #"
사용자에게 필요한 인증서 및 구성 파일은 configs 디렉토리에 있습니다. 많은 파일에 개인 키가 포함되어 있으므로 반드시 안전하게 보관하세요. 모든 파일은 새 Algo VPN 서버의 IP 주소로 명명된 하위 디렉토리에 저장됩니다.
IPsec 사용자에게 중요: 나중에 사용자를 추가하거나 삭제하려면 서버 배포 중 Do you want to retain the keys (PKI)? 프롬프트에서 yes를 선택해야 합니다. 이렇게 하면 사용자 관리에 필요한 인증 기관이 보존됩니다.
Apple 기기에서 VPN 서비스를 제공하기 위해 WireGuard가 사용됩니다. Algo는 config.cfg에 정의된 각 사용자에 대해 WireGuard 구성 파일 wireguard/<username>.conf와 QR 코드 wireguard/<username>.png를 생성합니다.
iOS에서는 iOS App Store에서 WireGuard 앱을 설치합니다. 그런 다음 WireGuard 앱을 사용하여 QR 코드를 스캔하거나 AirDrop으로 구성 파일을 기기로 전송합니다.
macOS에서는 Mac App Store에서 WireGuard 앱을 설치합니다. 앱을 실행하면 WireGuard가 메뉴 막대에 나타납니다. WireGuard 아이콘을 클릭하고 **Import tunnel(s) from file...**을 선택한 다음 적절한 WireGuard 구성 파일을 선택합니다.
iOS 또는 macOS에서 WireGuard 앱의 터널 구성을 편집하여 "Connect on Demand"를 활성화하거나 특정 신뢰할 수 있는 Wi-Fi 네트워크(예: 집 또는 직장)를 제외할 수 있습니다. (Algo는 이 작업을 자동으로 수행할 수 없습니다.)
Apple 기기에서 기본 제공 IPsec VPN을 사용하거나 "Connect on Demand" 또는 제외된 Wi-Fi 네트워크가 자동으로 구성되도록 하려면 Apple IPsec 클라이언트 설정 가이드에서 자세한 구성 지침을 참조하세요.
Android에서 VPN 서비스를 제공하기 위해 WireGuard가 사용됩니다. WireGuard VPN Client를 설치합니다. 해당 wireguard/<name>.conf 파일을 기기로 가져온 다음 새 연결을 설정합니다. 자세한 설치 및 구성 지침은 Android 설정 가이드를 참조하세요.
Windows에서 VPN 서비스를 제공하기 위해 WireGuard가 사용됩니다. Algo는 config.cfg에 정의된 각 사용자에 대해 WireGuard 구성 파일 wireguard/<username>.conf를 생성합니다.
WireGuard VPN Client를 설치합니다. 생성된 wireguard/<username>.conf 파일을 기기로 가져온 다음 새 연결을 설정합니다. 더 자세한 연습 및 문제 해결은 Windows 설정 지침을 참조하세요.
Linux 클라이언트는 WireGuard 또는 IPsec을 사용할 수 있습니다:
WireGuard: WireGuard는 Linux 클라이언트에서 잘 작동합니다. Ubuntu 및 기타 배포판에서 WireGuard를 구성하는 단계별 지침은 Linux WireGuard 설정 가이드를 참조하세요.
IPsec: strongSwan IPsec 클라이언트(OpenWrt, Ubuntu Server 및 기타 배포판 포함)의 경우 자세한 구성 지침은 Linux IPsec 설정 가이드를 참조하세요.
WireGuard를 사용하는 OpenWrt 라우터의 경우 라우터별 구성 지침은 OpenWrt WireGuard 설정 가이드를 참조하세요.
위에 포함되지 않은 기기 또는 수동 구성의 경우 특정 인증서 및 구성 파일이 필요합니다. 필요한 파일은 기기 플랫폼과 VPN 프로토콜(WireGuard 또는 IPsec)에 따라 다릅니다.
선택적 SSH 터널링 역할을 켠 경우 config.cfg의 각 사용자에 대해 로컬 사용자 계정이 생성되고 SSH authorized_key 파일이 configs 디렉토리(user.pem)에 있습니다. SSH 사용자 계정은 셸 액세스 권한이 없고, 암호로 인증할 수 없으며, 제한된 터널링 옵션만 있습니다(예: ssh -N 필요). 이렇게 하면 SSH 사용자가 터널을 설정하는 데 필요한 최소한의 액세스 권한만 가지며 Algo 서버에서 다른 작업을 수행할 수 없습니다.
아래 예제 명령을 사용하여 <user>와 <ip>를 자신의 것으로 바꾸고 SSH 터널을 시작하세요. 터널이 설정되면 브라우저나 다른 애플리케이션을 127.0.0.1:1080을 SOCKS 프록시로 사용하도록 구성하여 트래픽을 Algo 서버를 통해 라우팅할 수 있습니다:
ssh -D 127.0.0.1:1080 -f -q -C -N <user>@algo -i configs/<ip>/ssh-tunnel/<user>.pem -F configs/<ip>/ssh_config