현성데이터랩 고객 안내서
시놀로지 NAS로 회사 홈페이지 운영하기
Cloudflare 무료 요금제와 R2 사용법
1Cloudflare가 하는 일
사무실 NAS에 만든 홈페이지를 인터넷에 공개하려면 보통 공유기 포트를 열어야 합니다. 포트를 열면 NAS가 인터넷에 그대로 드러나 공격을 받기 쉽습니다.
Cloudflare Tunnel을 쓰면 NAS 안의 작은 프로그램(cloudflared)이 Cloudflare 쪽으로 먼저 연결을 맺습니다. 방문자는 Cloudflare를 거쳐 이 연결로만 들어옵니다. 그래서 공유기 포트를 하나도 열지 않고 홈페이지를 공개할 수 있고, 보안 인증서(https)도 Cloudflare가 자동으로 붙여 줍니다.
영상이나 큰 파일은 같은 Cloudflare 계정의 R2(인터넷 파일 보관함)에 두고 내보냅니다. 이유는 다음 장에서 설명합니다.
2무료 요금제로 되는 것과 안 되는 것
| 항목 | 무료 요금제 | 설명 |
|---|---|---|
| 도메인 연결(DNS), 보안 인증서(https) | 됩니다 | 자동 발급·자동 갱신 |
| 디도스 방어, 캐시(CDN) | 됩니다 | 기본 제공 |
| Cloudflare Tunnel | 됩니다 | 포트 개방 없이 홈페이지 공개 |
| 일반 회사 홈페이지(글·사진) | 됩니다 | 트래픽 요금 없음 |
| 동영상·대용량 파일을 주로 내보내는 용도 | 약관상 제한 | Cloudflare 저장 서비스(R2 등)에 두고 내보내면 허용 |
| 터널로 파일 올리기(업로드) | 한 번에 100MB까지 | 큰 파일은 R2로 직접 올립니다 |
무료 요금제는 트래픽 요금을 받지 않는 대신 웹페이지 전송용으로 쓰도록 약관에서 정하고 있습니다. 영상은 한 사람만 봐도 전송량이 매우 크기 때문에, Cloudflare의 저장 서비스(R2·Stream)를 통해 내보낼 때만 허용합니다. 간단한 소개 영상은 유튜브에 올려 홈페이지에 넣는 방법도 있습니다.
3준비물
- 시놀로지 NAS (Container Manager 지원 모델, DSM 7.2 이상 권장)
- 회사 도메인 (예:
우리회사.kr). 가비아·후이즈 등 도메인 업체 로그인 정보가 필요합니다. - 이메일 주소 (Cloudflare 가입용)
- 신용카드 또는 페이팔: R2를 쓸 때만 필요합니다. 무료 한도 안에서는 청구되지 않습니다.
- UPS(무정전 전원장치): 권장. 정전 때 NAS와 홈페이지가 함께 꺼지는 것을 막습니다.
4Cloudflare 계정 만들기
dash.cloudflare.com에 접속해 Sign up을 누르고 이메일과 비밀번호를 입력합니다.- 받은 메일의 인증 링크를 누릅니다.
- 로그인 후 오른쪽 위 프로필 → 계정 설정에서 2단계 인증을 켭니다. 이 계정이 홈페이지 전체를 좌우하므로 꼭 켜 두세요.
5도메인을 Cloudflare에 연결하기
- 대시보드에서 도메인 추가(Add a domain)를 누르고 회사 도메인을 입력합니다.
- 요금제는 Free를 고릅니다.
- Cloudflare가 기존 DNS 기록을 자동으로 읽어 옵니다. 이 목록을 반드시 확인하세요.
- 화면에 나온 네임서버 2개(예:
xxx.ns.cloudflare.com)를 복사합니다. - 도메인 업체 관리 화면에서 네임서버를 위 2개로 바꿉니다.
- 반영되면 Cloudflare에서 도메인 상태가 Active로 바뀌고 메일이 옵니다. 보통 몇 시간, 길면 하루가 걸립니다.
회사 도메인으로 메일을 쓰고 있다면(다음·네이버웍스·구글 워크스페이스 등) 3번 목록에 MX와 TXT(SPF 등) 기록이 기존과 똑같이 들어 있는지 확인해야 합니다. 빠진 채로 네임서버를 바꾸면 메일 수신이 끊깁니다. 기존 기록은 바꾸기 전에 도메인 업체 화면을 캡처해 두세요.
6NAS에 홈페이지 올리기
홈페이지 파일(index.html과 사진 등)이 이미 있다고 가정합니다. 아래는 가장 단순한 정적 홈페이지 예시입니다.
- DSM 패키지 센터에서 Container Manager를 설치합니다.
- File Station에서
docker/homepage/site폴더를 만들고 홈페이지 파일을 넣습니다. - Container Manager → 프로젝트 → 생성을 누르고, 이름은
homepage, 경로는docker/homepage로 정한 뒤 아래 내용을 붙여 넣습니다.
services:
web:
image: nginx:1.27-alpine
restart: unless-stopped
read_only: true
tmpfs: [/var/cache/nginx, /var/run, /tmp]
volumes:
- ./site:/usr/share/nginx/html:ro
# NAS 안에서만 열립니다. 바깥에서는 터널로만 들어옵니다.
ports:
- "127.0.0.1:8088:80"이렇게 하면 같은 사무실 안 PC에서도 이 웹서버에 직접 접속할 수 없고, 터널만 접근합니다. 홈페이지 컨테이너는 site 폴더만 읽을 수 있어 NAS의 다른 자료에는 손대지 못합니다.
7터널 만들기
- Cloudflare 대시보드 왼쪽 메뉴 Networking → Tunnels → Create a tunnel을 누릅니다.
- 이름을 정합니다(예:
office-nas). - 설치 환경으로 Docker를 고르면 설치 명령이 나옵니다. 명령 맨 끝의 긴 문자열이 토큰입니다. 이 토큰만 복사합니다.
- Container Manager에서 새 프로젝트(
tunnel, 경로docker/tunnel)를 만들고 아래 내용을 붙여 넣은 뒤,여기에_토큰자리에 3번 토큰을 넣습니다.
services:
cloudflared:
image: cloudflare/cloudflared:latest
restart: unless-stopped
# NAS 방화벽을 켜 둔 경우에도 바깥 연결이 되도록 NAS 네트워크를 그대로 씁니다.
network_mode: host
command: tunnel --no-autoupdate run
environment:
- TUNNEL_TOKEN=여기에_토큰- 프로젝트를 실행하고 1~2분 기다리면 Cloudflare의 Tunnels 화면에서 상태가 Healthy로 바뀝니다.
토큰을 아는 사람은 누구나 이 터널을 쓸 수 있습니다. 메신저나 메일로 보내지 마세요. 유출됐다면 Tunnels 화면에서 해당 터널을 삭제하고 새로 만드세요.
8주소 연결하고 확인하기
- Tunnels 화면에서 만든 터널을 누르고 Routes 탭 → Add route → Published application을 고릅니다.
- Subdomain에
www(또는 비워 두기), Domain에 회사 도메인을 고릅니다. - Service URL에
http://127.0.0.1:8088을 넣고 Add route를 누릅니다. - 휴대폰 데이터(와이파이 끄고)로
https://www.우리회사.kr에 접속해 보세요. 홈페이지가 열리면 끝입니다.
Service URL에 DSM 관리 주소(5000, 5001 포트)를 넣으면 NAS 관리 화면이 인터넷에 공개됩니다. 홈페이지(8088)만 연결하세요.
9R2로 영상·대용량 파일 공유하기
R2는 Cloudflare의 인터넷 파일 보관함입니다. 내려받는 트래픽 요금이 0원이라 영상이나 카탈로그 파일을 여러 사람에게 보여 주기에 알맞습니다.
9-1. R2 켜고 버킷 만들기
- 대시보드 왼쪽 메뉴에서 R2를 누릅니다. 처음 쓸 때 결제수단(카드·페이팔) 등록을 요구합니다. 무료 한도 안에서는 청구되지 않습니다.
- Create bucket을 누르고 이름을 정합니다(영문 소문자와 숫자, 예:
company-media).
9-2. 공개 주소 연결하기
- 버킷 → Settings → Custom Domains → Connect Domain에서
media.우리회사.kr처럼 입력합니다. - 몇 분 뒤
https://media.우리회사.kr/파일이름으로 파일이 열립니다.
설정 화면에 보이는 r2.dev 기본 주소는 속도 제한이 걸린 개발용입니다. 고객에게 보여 줄 때는 위처럼 회사 도메인을 연결하세요.
9-3. 파일 올리기
몇 개만 올릴 때: 버킷 화면에서 Upload를 누르고 파일을 끌어다 놓습니다. 대시보드 업로드에는 크기 제한이 있으니 큰 영상은 아래 방법을 쓰세요.
NAS 폴더를 자동으로 올릴 때: NAS에 rclone 컨테이너를 두고 특정 폴더를 주기적으로 R2에 복사합니다.
- R2 화면 → Manage API tokens → Create API token에서 권한은 Object Read & Write, 대상은 만든 버킷 하나만 고릅니다.
- 나오는 Access Key ID, Secret Access Key, 계정 ID가 들어간 S3 주소를 안전한 곳에 적어 둡니다. Secret은 이때 한 번만 보입니다.
- File Station에서
docker/r2sync/config/rclone.conf파일을 만들고 아래 내용을 넣습니다.
[r2] type = s3 provider = Cloudflare access_key_id = 여기에_Access_Key_ID secret_access_key = 여기에_Secret_Access_Key endpoint = https://여기에_계정ID.r2.cloudflarestorage.com acl = private
- Container Manager에서 새 프로젝트(
r2sync, 경로docker/r2sync)를 만들고 아래 내용을 넣습니다. NAS의공유영상폴더를 1시간마다 R2에 복사하는 예시입니다.
services:
rclone:
image: rclone/rclone:latest
restart: unless-stopped
network_mode: host
volumes:
- ./config:/config/rclone
- /volume1/공유영상:/data:ro
entrypoint: ["/bin/sh", "-c"]
command:
- while true; do rclone copy /data r2:company-media --transfers 4; sleep 3600; done예시는 copy를 씁니다. NAS에서 지운 파일은 R2에 그대로 남습니다. sync로 바꾸면 NAS와 똑같이 맞추느라 R2 쪽 파일도 지워지니, 처음에는 copy로 쓰세요. NAS 폴더는 :ro(읽기 전용)로 연결해 R2 쪽 문제로 NAS 자료가 지워지는 일을 막습니다.
9-4. 홈페이지에 영상 넣기
<video controls preload="metadata" width="100%"
src="https://media.우리회사.kr/회사소개.mp4"></video>9-5. 특정 고객에게만 기간 한정으로 보내기
버킷을 공개하지 않은 파일도 만료 시간이 있는 링크를 만들어 보낼 수 있습니다. rclone 컨테이너가 있다면 Container Manager에서 해당 컨테이너의 터미널을 열고 아래처럼 입력합니다. 24시간 동안만 열리는 링크가 만들어집니다.
rclone link r2:company-media/견적자료.pdf --expire 24h
9-6. R2 없이 영상을 넣는 다른 방법
NAS에 있는 영상을 홈페이지에서 바로 재생하는 것도 기술적으로는 됩니다. 다만 지금 쓰는 터널로 영상을 그대로 내보내는 것은 Cloudflare 약관 위반입니다. 일반 요금제는 R2·Stream처럼 Cloudflare에 보관한 영상만 내보낼 수 있고, NAS처럼 외부에 있는 영상은 계정 사용이 제한될 수 있습니다. R2를 쓰지 않으려면 아래 두 방법 중 하나를 고르세요.
| 방법 | 장점 | 주의할 점 |
|---|---|---|
| B. 영상 전용 주소만 NAS에 직접 연결 | 영상이 NAS 밖으로 나가지 않습니다. 약관 문제가 없습니다(Cloudflare는 주소 안내만 담당) | 공유기 443 포트 개방 필요. 시청자가 몰리면 사무실 인터넷 업로드가 그만큼 줄어듭니다 |
| D. 유튜브(일부 공개)에 올려 넣기 | 비용·회선·약관 부담이 없습니다. 가장 간단합니다 | 유튜브 로고와 추천 영상이 함께 보입니다 |
B. 영상 전용 주소 만들기
- DSM 제어판 → 외부 액세스 → DDNS에서
우리회사.synology.me같은 주소를 만듭니다. 사무실 공인 IP가 바뀌어도 NAS가 자동으로 갱신합니다. - 공유기에서 443 포트 하나만 NAS로 연결(포트포워딩)합니다. DSM 관리 포트(5000·5001)는 열지 마세요.
- Cloudflare DNS 화면에서
video기록을 추가합니다. 종류 CNAME, 대상우리회사.synology.me, 그리고 주황 구름(프록시)을 꺼서 회색(DNS only)으로 둡니다. 회색이어야 영상이 Cloudflare를 거치지 않습니다. - DSM 로그인 포털 → 고급 → 역방향 프록시에서
https://video.우리회사.kr(443)을 영상 전용 컨테이너(예:http://127.0.0.1:8089)로 연결하고, 보안 인증서는 Let’s Encrypt로 발급합니다. - 영상 전용 컨테이너는 6장 홈페이지 예시와 같은 방식으로 만들되, 영상 폴더만 읽기 전용으로 연결합니다.
services:
video:
image: nginx:1.27-alpine
restart: unless-stopped
read_only: true
tmpfs: [/var/cache/nginx, /var/run, /tmp]
volumes:
- /volume1/공유영상:/usr/share/nginx/html:ro
ports:
- "127.0.0.1:8089:80"홈페이지에는 9-4와 같은 방식으로 넣습니다. 주소만 https://video.우리회사.kr/회사소개.mp4로 바꾸면 됩니다.
포트를 열면 그 주소로 인터넷 전체에서 접속 시도가 들어옵니다. 영상 컨테이너가 영상 폴더 외에는 아무것도 볼 수 없게 해 두는 것이 중요합니다. 또 1080p 영상은 시청자 1명당 약 5Mbps를 씁니다. 업로드 100Mbps 회선이면 동시에 20명 정도, 1Gbps면 200명 정도가 한계이고, 그동안 사무실 인터넷도 함께 느려집니다. 건물 공용망처럼 공유기 설정을 바꿀 수 없는 곳에서는 B를 쓸 수 없습니다.
영상 편집 프로그램에서 내보낼 때 웹 최적화(빠른 시작) 옵션을 켜면 다 내려받기 전에 바로 재생이 시작됩니다. 코덱은 대부분의 브라우저가 재생하는 H.264가 안전합니다.
D. 유튜브로 넣기
- 유튜브에 영상을 올릴 때 공개 범위를 일부 공개로 고르면 검색에는 나오지 않고 링크로만 볼 수 있습니다.
- 영상 아래 공유 → 퍼가기를 누르고 나오는 코드를 홈페이지에 붙여 넣습니다.
<iframe width="100%" style="aspect-ratio:16/9;border:0"
src="https://www.youtube-nocookie.com/embed/영상ID"
title="회사 소개 영상" allowfullscreen></iframe>주소에 youtube-nocookie.com을 쓰면 방문자가 영상을 재생하기 전까지 유튜브 추적 쿠키가 붙지 않습니다.
File Station 공유 링크는 다운로드 화면이라 홈페이지 안에서 재생되지 않고, Video Station은 DSM 7.2.2부터 제공되지 않습니다.
10요금과 사용량 알림
| R2 항목 (표준 보관) | 무료 한도 (매월) | 초과 시 |
|---|---|---|
| 보관 용량 | 10 GB | GB당 월 $0.015 |
| 올리기·목록 등 쓰기 요청 | 100만 회 | 100만 회당 $4.50 |
| 열람·내려받기 요청 | 1,000만 회 | 100만 회당 $0.36 |
| 내려받는 트래픽 | 무제한 무료 | $0 |
예를 들어 영상 100GB를 보관하면 무료 10GB를 뺀 90GB × $0.015 = 월 약 $1.35입니다. 오래 보관만 할 자료는 저빈도 보관(GB당 $0.01)이 더 싸지만, 최소 30일 요금과 꺼낼 때 GB당 $0.01이 붙습니다.
영상이 갑자기 널리 퍼지면 그만큼 요청 수가 늘어 청구될 수 있습니다. 대시보드의 Notifications(알림)에서 사용량·청구 알림을 추가해 두세요. Tunnel과 무료 요금제 자체는 사용량과 관계없이 무료입니다.
11보안 점검표
- Cloudflare 계정 2단계 인증을 켰다.
- 공유기 포트포워딩은 하나도 열지 않았다(터널만 사용).
- 터널 Service URL에는 홈페이지(
8088)만 있고 DSM 관리 화면은 없다. - 홈페이지 컨테이너는
site폴더만 읽기 전용으로 연결했다. - R2 API 토큰은 버킷 하나에만 권한을 줬고, Secret을 메신저로 보내지 않았다.
- DSM과 Container Manager, 컨테이너 이미지를 주기적으로 업데이트한다.
- NAS 자료는 별도 백업(외장 디스크·다른 NAS·클라우드)이 있다.
12문제 해결
Tunnels 화면에서 Healthy가 안 뜹니다
Container Manager에서 cloudflared 컨테이너 로그를 엽니다. lookup ... server misbehaving이나 시간 초과가 보이면 NAS 방화벽이 컨테이너의 바깥 연결을 막고 있는 경우가 많습니다. 7장 예시처럼 network_mode: host가 들어 있는지 확인하세요. 토큰을 잘못 붙여 넣은 경우에도 연결되지 않습니다.
주소를 열면 502 오류가 납니다
터널은 연결됐지만 홈페이지 컨테이너가 꺼져 있거나 Service URL이 틀린 경우입니다. homepage 프로젝트가 실행 중인지, Service URL이 http://127.0.0.1:8088인지 확인하세요.
도메인이 계속 Pending 상태입니다
도메인 업체의 네임서버가 아직 바뀌지 않았습니다. 업체 화면에서 Cloudflare 네임서버 2개가 정확히 들어갔는지 확인하고, 최대 하루 정도 기다리세요.
R2에 올렸는데 주소를 열면 404가 나옵니다
파일을 올리기 전에 그 주소를 한 번 열어 본 경우, Cloudflare가 “파일 없음” 응답을 잠시 기억(캐시)해 둡니다. 시간이 지나면 풀리지만, 바로 확인하려면 주소 끝에 ?v=2처럼 아무 표시나 붙여 열어 보세요. 홈페이지에 넣는 주소도 같은 방법으로 바꾸면 됩니다.
Container Manager가 “must be a string” 오류를 냅니다
설정 내용 안에 콜론+띄어쓰기(: )가 들어간 줄이 있으면 생깁니다. 그 줄 전체를 작은따옴표('...')로 감싸 주세요.
정전·인터넷 장애 후 홈페이지가 안 열립니다
NAS가 다시 켜지면 컨테이너는 자동으로 다시 실행됩니다(restart: unless-stopped). 그래도 안 되면 Container Manager에서 두 프로젝트가 실행 중인지 확인하세요.
직접 구성이 어려우신가요?
이 안내서대로 직접 구성하실 수 있습니다. 필요하시면 현성데이터랩에서 구성을 유상으로 도와드립니다. 범위와 비용은 사무실 환경을 확인한 뒤 견적으로 안내합니다. NAS·UPS·디스크 구매 상담도 함께 받으실 수 있습니다.
근거 자료(2026-10-02 확인): Cloudflare Tunnel 만들기 · R2 요금 · R2 공개 버킷 · Cloudflare 약관 개정 안내 · rclone R2 설정 · Cloudflare 서비스별 약관 · DSM 7.2.2 Video Station 종료
