CGNAT 환경에서 셀프 호스팅하기
요약
본 글은 CGNAT 환경에서 셀프 호스팅을 구현하는 기술적 방법을 논하며, VPS와 홈랩(Home Lab)의 장단점을 비교합니다. 특히 보안 강화를 위해 autossh 포트 포워딩이나 Docker 컨테이너를 활용하여 필요한 트래픽만 제한적으로 전달하는 방안을 제시하고 있습니다.
핵심 포인트
- VPS 대신 로컬 환경 사용 시 비용 효율적일 수 있음.
- 보안을 위해 특정 포트와 IP만 연결하는 것이 중요함 (autossh, Docker).
- 네트워크 DMZ 분리 및 최소 권한 원칙 적용이 필수적임.
- WireGuard나 OpenBSD의 pf/wg 같은 도구를 활용하여 통신을 엄격히 제한해야 함.
아주 저렴한 VPS는 프록시로만 쓰고, 비용이 더 많이 드는 연산과 저장 공간은 로컬에서 처리할 수 있음.
몇 년 전 같은 고민 끝에 VPS에서 Nextcloud를 직접 운영했는데, 필요한 저장 용량이 비용 면에서 합리적인 VPS 범위를 넘어버려 홈랩으로 옮겼음.
VPS에 두는 편이 나을 때도 있지만, 용도에 따라서는 홈랩의 더 강력한 장비와 훨씬 넓은 저장 공간이 유리함.
나도 비슷한 구성을 고민해 왔지만, 브리지와 홈 네트워크를 통째로 연결하는 건 마음이 놓이지 않음. 내부 서버를 인터넷에 공개하는 것과 크게 다르지 않겠지만, 브리지 설정을 잘못하면 전체 네트워크에 접근할 여지를 줄 수 있음.
최근에는 autossh 포트 포워딩으로 특정 로컬 IP와 포트만 브리지 VPS에 연결하고, SSH 키의 권한도 제한해 봤음. 이를 Docker 설정으로 묶어 컨테이너를 띄우면 원하는 트래픽만 전달하도록 하려는 구상임.
내가 쓰던 애플리케이션에서는 잘 작동했지만, 연결 방식 특성상 모든 웹 애플리케이션에서 잘 동작하지는 않을 수도 있음.
심층 방어를 적용하면 위험을 줄일 수 있음. 집 쪽 피어는 네트워크 DMZ에 두고, 가능하면 해당 용도로만 사용하는 장비로 구성하는 편이 좋음. VPS 역시 브리지 전용으로 분리하고 다른 용도로 쓰지 않는 편을 권함.
OpenBSD는 내장 도구인 pf, wg로 브리지를 구성하기 편하며, WireGuard 네트워크 안에서 사용자 지정 도메인용 DNS가 필요하면 unbound를 쓸 수 있음. 필요한 통신만 허용하는 것도 핵심임. 웹 앱만 이용한다면 집 쪽 피어는 브리지 IP에서 오는 TCP 443 포트 연결만 허용하고, 라우터에서 WireGuard를 실행한다면 전달 규칙도 똑같이 제한해야 함. 모든 구성 요소를 최신 상태로 유지하는 것도 필요함.
예전에 셀프 호스팅용 WireGuard 토폴로지를 정리한 블로그 글을 작성한 적이 있음.
Oracle 상시 무료 VPS로 비슷하게 구성해 쓰고 있음. 다만 아직 Tailscale 없이 운영하기에는 겁이 남.
목표가 “횡포를 부리는 클라우드 기업에 의존하지 않기”라면, 많은 구성에서 VPS가 여전히 신뢰의 핵심 지점이라는 점을 유념해야 함. TLS 처리를 집 서버까지 내려보내더라도, 해커나 제공업체 직원처럼 VPS에 접근할 수 있는 주체는 새 Let's Encrypt 인증서를 발급받아 중간자 공격이나 인증 정보 탈취를 시작할 수 있음.
가능성이 높지는 않지만, VPS 디스크를 뒤져 민감한 이메일을 찾아내는 일도 마찬가지로 가능성이 높지는 않음. 물론 연산을 집에서 더 많이 처리하려는 다른 이유가 있다면 그렇게 해도 좋음.
그렇긴 한데, 다른 방법으로 공인 고정 IPv4를 어떻게 확보할 수 있나요?
Miren을 개발하면서 사용자들이 이런 상황에 자주 부딪힐 거라 예상했고, 이것이 방화벽이나 CGNAT 뒤에서도 서비스를 호스팅할 수 있는 기능을 추가한 큰 이유임. Miren Anywhere라는 기능이며, 질문이 있다면 답변할 수 있음! https://miren.md/miren-cloud/miren-anywhere
비슷한 구성을 이전에 글로 정리했으며, 나는 Tailscale을 사용함. 내 구성 전반에서 꽤 광범위하게 활용 중임.
다만 Tailscale에서는 HTTP/HTTPS 이외의 서비스가 걸림돌임. 내가 잘못 알고 있는 게 아니라면, 예를 들어 이메일 서비스를 직접 호스팅하는 건 불가능하지 않나요?
AI 자동 생성 콘텐츠
본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기