TL;DR
- DNS 설정과 ProtonVPN으로 해결되지 않는 인터넷 차단·필터링에 대응해 AWS EC2에서 WireGuard VPN 서버를 필요할 때 생성하고 사용 후 삭제하는 방식을 제시함.
just apply한 번으로 OpenTofu가 EC2 인스턴스와 보안 그룹 등 4개 리소스를 만들고 WireGuard 서버를 구성함.- t4g.nano 인스턴스는 지역에 따라 시간당 약 0.0042달러이며, 전체 설정에는 보통 약 5분이 걸림.
- 클라이언트 설정은 모든 네트워크 트래픽을 VPN으로 보내는 풀 터널 구성이며, 출구 지역도 선택 가능함.
just destroy로 사용 후 리소스를 삭제할 수 있어 VPN을 한 달에 몇 시간만 쓰는 경우에도 사용 시간에 맞춰 비용을 지불하는 방식임.
여행 중 인터넷 접근을 위한 우회 방법
- 자유민주주의 국가에서 익숙해진 수준의 자유를 보장하지 않는 지역을 자주 여행하며, 방문지에 따라 제한 없는 인터넷 접근이 우회 방법 없이는 어려울 수 있음.
- 비자 신청은 여전히 번거로우며, 현재 거주 중인 동남아시아에서 특히 그러함.¹
간단한 우회 방법 — DNS 리졸버
- DHCP 등이 제공하는 DNS 리졸버 대신 Cloudflare 같은 널리 알려진 무료 DNS 리졸버를 사용함.
- 미니 라우터²에 설정하면 사설 LAN에 연결된 다른 모든 기기에도 설정이 투명하게 적용됨.
- 추가 개인정보 보호 기능을 제공하는 DNS over TLS를 켜는 것을 권장함. 일반적으로 체감할 만한 지연 시간이 늘지 않음.
- 이 설정만으로 IP 주소나 포트 차단을 우회할 수는 없지만, 여러 불편을 피하는 데 유용하며 한 번 설정해 두면 별도 관리가 거의 필요 없음.
다음 단계 — ProtonVPN
- 수년간 Proton 서비스를 이용해 왔으며, 광고가 많은 Google 서비스를 대체하고 개인정보 보호를 강화하는 간편하고 비용 효율적인 선택지로 추천함.
- 무료 플랜으로 시작할 수 있으며, 필요해지면 유료 서비스로 전환할 수 있음.
- 현재 Mail Plus 구독자³로서 Proton의 무료 VPN 서비스⁴도 이용할 수 있음.
brew install protonvpn으로 클라이언트를 설치할 수 있고 사용법도 간단함. - 무료 VPN 클라이언트는 VPN 출구 국가를 선택할 수 없음. 무료 서비스로서는 합리적이지만, 출구 국가에서도 필터링을 적용하면 차단 문제를 해결하지 못할 수 있음.
- 서버 과부하로 서비스 품질이 낮아질 수도 있어 안정적인 해결책으로 의존하기 어려움.
- 출구 지역 선택은 출발지 IP의 지리적 위치에 따라 콘텐츠를 제한하거나 다르게 제공하는 스트리밍 플랫폼 등에서도 유용함.
- ProtonVPN 유료 플랜이나 다른 VPN 서비스를 구독할 수 있지만, VPN을 한 달에 최악의 경우에도 몇 시간만 간헐적으로 사용하므로 비용 낭비에 가까움.
- 필요할 때만 유료 VPN 서버를 켜고 사용한 시간만 지불하며, 서버가 실행될 지역도 선택하는 방법을 찾음.
마지막 단계 — EC2 사용
- 사용자 지정 DNS와 ProtonVPN으로 해결되지 않을 때 CLI 명령 하나로 WireGuard 서버를 생성하고, 클라이언트를 풀 터널로 연결한 뒤 다른 CLI 명령으로 서버를 삭제함.
aws-ec2-vpn디렉터리에서just apply를 실행하면 리소스 4개가 추가되고, SSH 접속 명령과 WireGuard 클라이언트 설정이 출력됨.- 클라이언트 설정에는 개인 키,
10.100.100.2/32주소,1.1.1.1DNS, 피어 공개 키,0.0.0.0/0및::/0전체 경로, VPN 엔드포인트와 지속 연결 유지 간격 25초가 포함됨. - 출력된 WireGuard 설정을 MacBook 등 클라이언트에 한 번 복사하고 연결을 켜면 모든 네트워크 트래픽이 새 VPN 인스턴스를 거침.
- 사용 후
just destroy를 실행하면 생성된 리소스 4개가 삭제됨.
내부 구현
- 구현은 forge에 호스팅된 저장소에서 확인할 수 있으며, OpenTofu⁵와 AWS 계정이 있으면 기본 설정 그대로 사용할 수 있음.
- 모듈이 수행하는 작업은 다음과 같음.
- 인스턴스에 SSH 및 WireGuard 트래픽의 인바운드를 허용하고 모든 아웃바운드를 허용하는 EC2 보안 그룹 생성
- 최신 arm64 Amazon Linux 2023 EC2 인스턴스를
t4g.nano유형으로 실행. 현재 선택 지역에 따라 시간당 약 0.0042달러인 가장 저렴한 옵션임. - cloud-init으로 패키지를 업그레이드하고 WireGuard를 설치한 뒤, 지정된 키와 서버 설정 및 iptables 규칙을 구성.
just apply부터 WireGuard 데몬이 연결을 받을 준비를 마칠 때까지 보통 약 5분 소요⁷ - 선택적으로 DNS 레코드를 추가해 WireGuard 클라이언트 설정을 고정적으로 사용할 수 있게 함.
- 기본 설정 대부분은 변경할 수 있으며, 자세한 내용은
variables.tf에서 확인할 수 있음. - AWS 대신 Digital Ocean 등 다른 제공업체를 사용하려면 모듈을 수정해 해당 제공업체에서 인스턴스를 실행하는 방법도 비교적 간단함.
- 선택 기능으로 Njalla에서 호스팅하는
l3x.in영역에 CNAME DNS 레코드를 만들 수 있음. 이는 구현 세부 사항이므로 다른 DNS 제공업체를 사용하거나 추가 DNS 레코드를 무시하고 EC2의 공개 DNS 호스트명을 직접 사용할 수 있음. - 저장소는 모든 상황에 맞는 단일 해법이라기보다 청사진으로 사용하는 것을 지향함.
다른 선택지는 어떨까?
- Tailscale이 제공하는 방법을 비롯해 유효한 대안이 여럿 있지만, 필요한 노력이 크지 않으므로 직접 구성하고 계정을 추가하거나 워크스테이션에 다른 소프트웨어를 설치하지 않는 방식을 선호함.
- Tailscale의 서비스를 높이 평가하면서도, WireGuard와 iptables만으로 해결할 수 있어 필요성을 느끼지 못하는 상황임.
- > 그렇지 않으면 재미가 어디에 있겠는가?
결론
- 이 글이 도움이 되기를 바라며, 의견은
/contact를 통해 전달할 수 있음. - 블로그 글 작성에 LLM의 도움을 사용하지 않으며, 이번 글도 예외가 아님.
- 자유로운 인터넷 세상에서 계속 즐겁게 지내기를 바람.
각주
- ¹ 비자 신청은 여전히 번거로우며, 특히 현재 거주 중인 동남아시아에서 그러함.
- ² 여행용 장비에 관한 이전 글을 참고.
- ³ 현재 24개월에 83.76달러, 월 약 3.5달러를 지불함.
- ⁴ 무료 요금제 구독자도 이용할 수 있는지는 현재 확실하지 않음.
- ⁵ Terraform도 가능하지만 OpenTofu 사용을 권장함.
- ⁶ 기본 지역은 이탈리아의
eu-south-1임. - ⁷ 오래된 운영체제 패키지 업그레이드를 생략하면 지연 시간을 상당히 줄일 수 있음. 자세한 내용은 cloud-init 설정 파일을 참고.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요