cloudflare(d)를 이용한 역방향 프록시
커뮤니티 첫글이네요
시놀로지 내장 역방향 프록시 -> NPM -> traefik 순으로 쓰다, 뭔가 전체적으로 세련되지 못된거같아 이리저리 찾던중 발견한 cloudflared=argo tunnel(?) 입니다
구체적으로는,
-> 시놀로지 : 망분리 불가, 설정이 1차원적
-> NPM : 뭔가 불안정, 보안 이슈가 있다는 검색 결과 존재
-> traefik: 도커&쿠버네티스를 주력으로 쓴다면 매우 좋으나, 서비스를 독립적으로 돌리는 입장에서는 설정도 복잡하고 직관성이 떨어짐
-> 다른 역방향 프록시 사용시에는 포트를 열어줘야하나, cloudflared 사용시, 클플 에지서버에 직결되므로 포트를 열필요가 없음
-> zero trust 인가 하는 서비스를 사용하면 2FA/ SSO 비스무리한것도 사용가능합니다
각설하고, 아래 글을 참고해 일주일정도 삽질해서 알아낸 결과물입니다
-> https://ineed.coffee/post/reverse-proxy-self-hosted-services-with-cloudflare-tunnel
-> https://www.reddit.com/r/selfhosted/comments/q60jk8/cloudflare_argo_tunnel_and_reverse_proxy/
-> https://www.reddit.com/r/selfhosted/comments/orzdcc/cloudflared_argo_tunnel_swag_nginx_in_docker_help/
-> https://blog.cloudflare.com/argo-tunnels-that-live-forever/
작업순서
→ cloudflared 설치
→ 키 임포트
→ 터널 생성
→ 설정 생성
→ dns 연결
→ 터널 가동
→ 테스트
준비물 : 클라우드 플레어 계정, 연동된 도메인, 인터넷이 연결된 서버(여기서는 우분투 사용)
아래부터 튜토리얼입니다.
1. cloudflared 설치 - https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation/
sudo apt-get install wget curl nano --yes
cd && sudo wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb
이상의 과정을 통해 설치후,
cloudflared -v 를 통해 출력이 잘 된다면 설치가 된것입니다.'
2. cloudflare 로그인, 인증서 들고오기
cloudflared tunnel login -> cert.pem을 다운받아, /etc/cloudflared 경로로 복사
cd /etc/cloudflared && ls -la cd /etc/cloudflared
를 쳤을때 cert.pem 이 있으면 정상입니다.
3. 터널 생성
cloudflared tunnel create {tunnel} 명령어를 치면 터널이 생성됩니다. {tunnel} 부분은 원하는 이름으로 하시면 됩니다.
확장자가 .json인 파일이 생길텐데, 파일명= {tunnelUUID} 을 잘 복사해두세요
4. 설정 생성
touch /etc/cloudflared/config.yml && nano /etc/cloudflared/config.yml
후
아래 내용을 복사합니다.
tunnel: {tunnelname}
credentials-file: /etc/cloudflared/{tunnelname}.json
ingress:
- hostname: app.yourdomain.com
service: http://localhost:80
- service: http_status:404
위 항목에서 적절히 수정한 예시
tunnel: 12345678-asdfqwer
credentials-file: /etc/cloudflared/12345678-asdfqwer.json
ingress:
- hostname: server.mydomain.com
service: http://192.168.0.254:8099
- hostname: home.mydomain.com
service: http://172.168.0.2:80
- service: http_status:404
이런식으로 수정하시면 되겠습니다
5. 터널 가동
cloudflared tunnel run {tunnel} 를 통해 터널을 실행하시고, 이제 dash.clouflare.com에서 설정을 합니다.
website -> DNS 설정에서
1번 부분에는 server.mydomain.com 에서 server 부분을, 2번 부분에는 {tunnelUUID}.cfargotunnel.com 를 넣어주시면 됩니다
이렇게 해서 접속이 되셨으면 이제 서비스로 등록해서 자동으로 실행되게 해줍니다.
cloudflared service install 로 등록
systemctl start cloudflared 로 실행
systemctl status cloudflared 로 상태확인 / 뭔가 상태 이상하면 들어가보기
systemctl restart cloudflared 로 재실행 / 설정 수정하고 나서 매번 하기
이렇게 완료입니다.
저도 방금 처음 성공해봐서 완전하지가 않은데,
한국어 글은 눈을 씻고 찾아봐도 없어서 나중에 잊어먹었을때 다시 보기 위한 목적으로 작성하는거라 차차 수정해가도록 해야겠네요.
혹시 안되는게 있다면 댓글 달아주세요.
헤놀로지/nginx/etherpad 현재 연결된 상태인데, 잘 작동합니다
+ 2022.04.02 추가
-> 상태 모니터링하다 우연히 발견한건데, 신기하게 엣지서버 (NRT,ICN) / 도쿄, 서울 을 지나가네요. 제가 알기로는 서울 리전은 기업등급 플랜에서만 사용 가능한것 같은데, 이쪽으로 터널 뚫어주기도 하나봅니다.
cmt alert