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.1 DNS, 피어 공개 키, 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 설정 파일을 참고.