Cloudflared Tunnel 설정 시 DNS 세팅 및 1033 에러 해결법
이전 글에서 이어집니다.
사담: 기숙사 인터넷의 비애
보통 기숙사에 살게 되는 경우 월세가 저렴한 대신 상당히 많은 것을 포기해야 하는데요, 그중 하나가 바로 인터넷 서비스 프로바이더(ISP)입니다. 건물 단위로 계약이 되어있는 경우가 많고, 속도나 안정성 측면에서 상당히 저열한 편이지만 타 회선을 계약하기 위해서는 건물 내/외부에 공사를 진행해야 하는 경우가 대다수라 울며 겨자 먹기로 사용하는 수밖에 없습니다.
제 경우에도, 입주 당시 매달 약 2천 엔을 내고 각 기기의 MAC 주소를 등록해서 사용하는 상당히 고전적인(?) 방식의 무선 와이파이를 사용하던가, 그 두 배인 매달 4천 엔 가량을 내고 DoCANVAS라는 학생 기숙사 전용 유선 광회선을 사용하는 두 가지 옵션밖에 없었습니다. 초기엔 몇 푼이라도 아끼고자 와이파이를 사용했지만, 도저히 써먹을 수가 없는 상태였기에 결국 광회선을 계약했습니다.
100Mbps라는 다소 낮은 속도에도, 당시 열심이던 발로란트 아시아 서버의 핑이 20ms 가까이를 유지한다는 것에 만족했지만, 문제는 공유형 회선이라 사용자가 몰리는 평일 저녁이나 주말에는 사실상 인터넷이 끊기는 수준이었다는 점입니다. 랭크 게임이라도 돌리고 있었던 날에는 그대로 대참사로 이어졌기에, 주로 새벽 2시 이후에나 큐를 잡았죠.
월 15,000엔에 욕실과 화장실이 분리된, 베란다 딸린 신축 원룸이라는 말도 안 되는 구성임에도 이사를 결심한 것은, (방 크기가 작아 답답한 점도 있었지만) 인터넷 또한 한몫을 했습니다.
LEONET의 한계와 외부 접속 문제
현재 거주 중인 레오팔레스 건물의 인터넷 옵션은 기본적으로 LEONET이라고 하는 자회사 ISP로 고정되어 있습니다. 원칙적으로는 건물에 손상을 가하지 않는 범위 내에서 타 ISP를 허용하고 있긴 하지만, 실제로 광회선을 도입하려고 하면 전신주에서 직접 광회선을 끌어오는 과정에서 나사를 박아야 하는 경우가 대다수기 때문에 (비즈 고정 등) 허가가 나지 않는다고 보시면 됩니다. 가끔 건물의 구조가 운 좋게 맞아떨어져서 에어컨 덕트를 통해 설치했다는 글도 보이기는 합니다만... 10기가 인터넷을 도입하기 위해 수많은 회사의 사전 조사를 받아보았던 경험상 사실상 불가능합니다.
그러나 사실, 인터넷상의 악명에 비하면 Fire TV Stick을 꽂아 사용하는 무선 인터넷 방식이 아닌, 랜선을 공유기에 연결해 유선으로 회선을 사용하는 경우는 평범한 광회선(100Mbps, 핑 20ms 기준) 못지않게 쓸만합니다. 실제로 발로란트와 같은 FPS, 리듬게임이나 RPG 레이드 등등은 전혀 무리 없이 플레이 가능할 정도니까요.
다만, 여기서 치명적인 문제는 LEONET의 경우 공인 IP 주소를 제공하지 않아 외부에서 내부 네트워크로 접속할 수 없다는 점입니다. 전에 살던 기숙사의 경우 월 일정 비용을 추가로 지불하면 공인 IP를 할당받을 수 있었고, 공유기에서 특정 포트를 개방하면 해당 IP 주소를 통해 외부에서 접근할 수 있었지만, 지금은 그 옵션 자체가 사라져버린 것이죠.
해결 방법: CGNAT 환경 뚫기
방법이 아예 없는 것은 아닙니다. 크게 두 가지 선택지가 있습니다.
- GCP와 같은 중계 서버 이용: 로컬 환경의 NAS와 Tailscale로 P2P 연결 진행하기
- Cloudflare Tunnel 이용: 아웃바운드 연결을 생성하여 외부에서 도메인 접속이 가능하게 하기
1번의 경우, LEONET과 같은 CGNAT(Carrier-Grade NAT) 환경에서는 외부에서 직접 접속하는 것이 불가능하기 때문에, 반드시 GCP와 같은 외부 중계 서버를 이용해야 합니다. 포트폴리오 사이트나 토이 프로젝트 정도라면 큰 부담 없이 사용 가능하겠지만, 그래도 트래픽과 매달 나가는 비용을 신경 써야 한다는 점은 상당히 불편합니다.
그래서 저는 **2번 방법(Cloudflare Tunnel)**을 채택했습니다.
Cloudflare Tunnel의 원리
일반적으로 NAT이나 방화벽은 외부에서 내부로 들어오는 인바운드(Inbound) 트래픽을 차단하는 경우가 많지만, 반대로 내부에서 외부로 나가는 아웃바운드(Outbound) 트래픽은 대부분 허용됩니다.
이를 이용하여, 공인 IP가 없어 외부로부터의 인바운드 트래픽을 받는 것이 불가능하다면, 내부에서 아웃바운드 트래픽을 생성해 Cloudflare 서버와의 연결을 지속적으로 유지함으로써, 사실상 Cloudflare 서버가 역방향 프록시(Reverse Proxy) 역할을 수행하게 만드는 것이 Cloudflare Tunnel의 원리입니다.
Cloudflare 1033 에러와 해결
현재 상황은 Squarespace(구 Google Domain)에서 구매한 도메인을 Cloudflare 네임서버로 연결한 후, NAS 내부에는 Cloudflare Tunnel을 설치하여 터널을 통한 역방향 프록시를 구축한 상태입니다.
NAS 내부의 nginx 서버(localhost:80)와 터널 연결 자체는 정상적이었지만, 도메인으로 접속을 시도하면 Cloudflare 1033 오류가 발생하는 상황이었습니다.
원인 분석
처음에는 루트 경로에 설치되어 있는 cloudflared 패키지의 권한 문제인가 싶어서 여러 설정을 건드려 보았습니다. 해당 이슈에 대해 ChatGPT에게 물어보았을 때 돌아온 답변은 대략 "설정 파일을 확인하라" 정도의 일반적인 내용뿐이었습니다.
결국 원인은 DNS 레코드 설정에 있었습니다.
CNAME의 레코드 타겟(Target)을 설정할 때, 단순히 **터널의 이름(Name)**을 적는 것이 아니라 <UUID>.cfargotunnel.com 형식으로 적어야 했던 것입니다.
어찌 보면 Cloudflare 설정 문제 또는 Tunnel 라우팅 문제인 것은 맞았지만, 말 그대로 공식 문서(Documentation)를 단 한 줄이라도 제대로 읽어봤다면 바로 고쳐졌을 오류였습니다.
사용하는 사람보다 만든 사람(공식 문서)을 믿자고 다시금 다짐하게 된 하루였습니다.
부록: Cloudflared 설치 방법
각 OS별 cloudflared 설치 명령어는 다음과 같습니다.