개요
Cloudflare 터널링은 별도의 공인 IP나 포트포워딩 없이도 로컬에서 실행 중인 서비스를 외부 도메인으로 노출할 수 있게 해주는 기능이다. 로컬에서 띄운 개발 서버를 본인이 보유한 도메인으로 외부에 공개하는 과정을 정리한다.
0. 도메인 준비
가장 먼저 도메인이 필요하다. 본인은 가비아에서 도메인을 구매했지만, 다른 도메인 등록업체를 사용해도 무방하다.
1. cloudflared 설치
cloudflared는 Cloudflare 터널링을 위한 클라이언트 프로그램이다. 아래 명령어로 패키지를 받아 설치한다.
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb
sudo dpkg -i cloudflared.deb
설치를 진행하면 다음과 같이 출력된다.
user@localhost:~/project$ sudo dpkg -i cloudflared.deb
[sudo] password for user:
Selecting previously unselected package cloudflared.
(Reading database ... 118584 files and directories currently installed.)
Preparing to unpack cloudflared.deb ...
Unpacking cloudflared (2026.3.0) ...
Setting up cloudflared (2026.3.0) ...
Processing triggers for man-db (2.10.2-1) ...
설치가 정상적으로 되었는지는 버전 확인 명령어로 검증할 수 있다.
user@localhost:~/project$ cloudflared --version
cloudflared version 2026.3.0 (built 2026-03-09-14:08 UTC)
2. Cloudflare 대시보드에 도메인 등록
Cloudflare 대시보드에 접속하여 Domains → Overview → Add domain 메뉴로 이동한다. 구매한 도메인을 입력한 뒤, 나머지는 기본 설정으로 두고 등록을 완료한다.
이후 Cloudflare에서 두 개의 네임서버를 부여한다. 이 네임서버를 도메인 구매처(본인의 경우 가비아)에 등록해야 한다. 도메인 구매처의 네임서버 설정 메뉴에 들어가 기존 네임서버를 지우고, Cloudflare에서 받은 네임서버 두 개를 등록한다.
네임서버 변경이 전파되기까지 일정 시간이 소요되며, 적용이 완료되면 Cloudflare에 도메인이 정상적으로 등록된다.
3. 터널링 설정
도메인 등록이 완료되었다면 cloudflared로 로그인을 진행한다.
user@localhost:~/project$ cloudflared tunnel login
Please open the following URL and log in with your Cloudflare account:
https://dash.cloudflare.com/argotunnel?aud=&callback=https%3A%2F%2Flogin.cloudflareaccess.org%2F<token>%3D
Leave cloudflared running to download the cert automatically.
2026-04-22T15:29:22Z INF You have successfully logged in.
If you wish to copy your credentials to a server, they have been saved to:
/home/user/.cloudflared/cert.pem
출력된 URL에 접속하여 로그인하면 설정 페이지가 나오고, 도메인을 선택할 수 있다. 도메인을 선택하면 cert.pem이라는 인증서가 생성된다.
다음으로 터널을 생성한다.
user@localhost:~/project$ cloudflared tunnel create ch4nsec
Tunnel credentials written to /home/user/.cloudflared/<id>.json. cloudflared chose this file based on where your origin certificate was found. Keep this file secret. To revoke these credentials, delete the tunnel.
Created tunnel ch4nsec with id <id>
이때 임의의 ID가 발급되는데, 이는 이후 설정에서 사용된다. 별도로 외울 필요는 없는 것이, ~/.cloudflared/<id>.json 파일이 생성되기 때문에 이 파일명을 통해 확인할 수 있다.
이후 ~/.cloudflared/config.yml 파일을 생성한다.
tunnel: <id>
credentials-file: /home/user/.cloudflared/<id>.json
ingress:
- hostname: ch4nsec.kr
service: http://localhost:4321
- service: http_status:404
발급받은 터널 ID는 여기서 사용된다. ingress 항목에 외부에서 접속할 호스트명과, 해당 요청을 어디로 포워딩할지 지정한다. 위 예시에서는 ch4nsec.kr로 들어오는 요청을 로컬의 4321번 포트로 전달하도록 설정했다.
4. 실행
설정이 완료되었다면 다음 명령어로 터널을 실행한다.
user@localhost:~/project$ cloudflared tunnel run ch4nsec
2026-04-22T15:35:13Z INF Starting tunnel tunnelID=<id>
2026-04-22T15:35:13Z INF Version 2026.3.0 (Checksum 4a9e50e6d6d798e90fcd01933151a90bf7edd99a0a55c28ad18f2e16263a5c30)
2026-04-22T15:35:13Z INF GOOS: linux, GOVersion: go1.24.13, GoArch: amd64
2026-04-22T15:35:13Z INF Settings: map[cred-file:/home/user/.cloudflared/<id>.json credentials-file:/home/user/.cloudflared/<id>.json]
이렇게 하면 터널이 열린다. 포워딩해둔 포트에 서비스를 실행하면 도메인을 통해 외부에서 해당 서비스로 접근할 수 있다.
5. 설정 변경 (필요한 경우)
서비스의 종류에 따라, 도메인을 통한 접근을 허용하기 위한 별도의 설정이 필요한 경우가 있다. 예를 들어 Astro의 경우 astro.config.mjs에 다음과 같이 allowedHosts 옵션을 추가해주어야 한다.
export default defineConfig({
site: 'https://ch4nsec.kr',
vite: {
server: {
allowedHosts: ['ch4nsec.kr'],
},
},
integrations: [
mdx(),
tailwind({
// ...
}),
],
});
도메인으로 접근했을 때 호스트가 허용되지 않았다는 에러가 발생한다면, 사용 중인 프레임워크의 호스트 허용 설정을 확인해보면 된다.