ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 드디어 해결! Cloudflare Tunnel + NPM + Authelia
    HomeLAB/홈랩 잡담 2025. 2. 10. 03:46

    이런 방식으로 연결된다.

     

    한 3일간 삽질한 것 같다.. 해결하고 나니 왜 이 방법을 먼저 시도하지 않았던 건지 스스로가 한심해진다. 설정 자체는 생각보다 간단해서 놀랍기도 하고 김새는 느낌이기도 하고.. 복잡 미묘하다.

    여하튼 대부분의 Cloudflare Tunnel + NPM의 가이드 글과 ChatGPT가 찾아내서 정리해 주는 글의 경우, Cloudflare Tunnel을 서비스에 직접 연결하는 느낌이 강했다. 그런데 직접 연결할 거면 NPM은 왜 쓰나? Cloudflare Tunnel이 알아서 리버스 프록시까지 해주는데; 자원 낭비라고 볼 수 있다. 근데 그걸 Cloudflare Tunnel과 NPM을 같이 쓰는 가이드라고 글을 적어놨으니 아무리 봐도 이해를 못 했다.

     

     

    그래서 계속 의심했다. 그리고 원하는 답이 나올 때까지 삽질하기로 마음먹었다. 마치 도자기를 만드는 장인의 마음으로 제대로 된 Cloudflare Tunnel과 NPM의 완전한 결합을 원했다.

     

    그렇게 삽질 3일 차에 문득 NPM에 Cloudflare Tunnel을 연결하면 되는 거 아닌가?라는 생각이 스쳐 지나갔다. 물론 이 부분을 처음에도 생각했으나 제대로 설정을 안 해놓는 바람에 안 되는 줄 알았다. 하지만 NPM에 기존처럼 리버스 프록시 설정을 해주고 cloudflared의 config.yml 파일에 모든 주소를 NPM 80 포트로 연결해 주니 모든 게 잘 작동하기 시작했다. 로그도 잘 찍힌다. 443 포트를 쓰면 400 에러가 뜨면서 제대로 안되던데 SSL이 두 번 적용돼서 그런 것으로 추측된다. 아마 쓸 일 없겠지.

     

    그런데 왜 이 삽질을 했느냐고 물어보면..(물어볼 사람도 없겠지만) 오라클 무료 A1 서버를 사용하는지라 과금을 최대한 막기 위해서 네트워크 보안이 필요했다. 거기에 서버라면 로그인 없이도 이것저것 공개되어 있는 서비스가 있다.

     

    간단한 서버 모니터링 대시보드인 Dash. 클릭 시 깃허브 레포로 이동한다.

     

    내가 쓰는 서비스 중에서 Dash. 이 있는데 로그인 없이 그냥 막 들어갈 수 있다. 이런 부분을 Authelia의 인증 서버를 거치게 하면서 이중 보안을 챙기기 위함이다. 하지만 Authelia를 처음 구축할 때 썼던 방식 그대로 했더니 인증 후 원 URL로 돌아가야 하는데 무한 리다이렉트 되는 오류가 있어서 NPM의 Advanced 부분을 ChatGPT를 이용해 적절히 수정하니까 이 부분도 멀쩡히 잘 돌아간다. 이제 2차 인증도 무사히 잘 되는 것을 확인했다.

     

    오늘은 기분 좋게 잠들 수 있을 것 같다.

     

    TMI)

    내가 구축한 오라클 서버에는 모든 도커 컨테이너가 docker compose로 실행되는데, docker-compose.yaml 파일 구성을 보면 모든 컨테이너에 ports로 포트를 오픈해 놓은 것이 아닌 expose를 사용해서 컨테이너-호스트조차 포트를 오픈해놓지 않고 있다. 그 부분을 뒤늦게 깨닫고 cloudflared의 도커 이미지도 공식 배포되고 있으니 컨테이너화 시켰다. 새로운 서비스 배포 할 때는 config.yml 파일 수정하고 docker compose restart만 하면 되니까 나름 편리한 것 같은데 그냥 서비스에 등록하고 쓰는 게 훨씬 낫지 않았나 싶기도 하다. 이게 초기 설정하는 게 좀 귀찮은데 그리 어렵지 않은 방법을 곧 찾지 않을까 싶다.

Designed by Tistory.