Hướng dẫn tạo cloudflared tunnel để phục vụ web cho home server trong trường hợp không mở port public
- 30-10-2025
- Toanngo92
- 0 Comments
Mục lục
1. Thêm tên miền và chuyển DNS cho Cloudflare
- Đăng nhập vào tài khoản Cloudflare.
- Thêm tên miền của bạn vào Cloudflare (Add Site) → chọn gói (bản Free đã đủ cho nhiều trường hợp). crosstalksolutions.com+1
- Cloudflare sẽ yêu cầu bạn thay đổi nameservers của tên miền về nameservers của Cloudflare (do nhà đăng ký tên miền của bạn cung cấp). crosstalksolutions.com+1
- Chờ cho việc chuyển nameservers được xác nhận, tên miền kích hoạt qua Cloudflare.
2. Cài đặt phần mềm cloudflared trên máy chủ tại nhà
- Truy cập vào máy chủ của bạn (ví dụ Linux) và tải
cloudflared. Ví dụ trên Linux:
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared-linux-amd64.deb sudo dpkg -i cloudflared-linux-amd64.deb
- Sau khi cài, kiểm tra phiên bản:
cloudflared --version
Xác thực với cloudflared:
cloudflared tunnel login
Lệnh này sẽ mở trình duyệt, bạn đăng nhập vào tài khoản Cloudflare và chọn tên miền để xác thực.
Lệnh này sinh ra chứng chỉ (cert.pem hoặc tương đương) dùng để kết nối.

Tạo một Tunnel
cloudflared tunnel create <TÊN_TUNNEL>

Lệnh này tạo 1 tunnel, sinh file credentials (file JSON của tunnel). Cloudflare Docs
Lưu lại Tunnel UUID và đường dẫn tới tập tin credentials.
5. Tạo file cấu hình (config.yml)
- Tạo thư mục
.cloudflared(hoặc vị trí phù hợp) và trong đó tạoconfig.yml. Ví dụ cấu hình:
tunnel: <Tunnel-UUID>
credentials-file: /home/youruser/.cloudflared/<Tunnel-UUID>.json
ingress:
- hostname: subdomain.yourdomain.com
service: http://localhost:8080
- service: http_status:404
Trong đó, Tunnel-UUID chính là Tunnel-UUID vừa nhận được sau khi chạy ở lệnh trước
hostname: tên miền phụ bạn muốn dùng để truy cập dịch vụ nhà (ví dụ nas.yourdomain.com).
service: địa chỉ nội bộ của dịch vụ bạn muốn xuất ra (ví dụ máy chủ ở localhost:8080).
6. Trỏ DNS hoặc route hostname qua Tunnel
- Trong dashboard Cloudflare → Zero Trust → Access → Tunnels → chọn tunnel của bạn. crosstalksolutions.com+1
- Thêm Public Hostname: subdomain + domain + chọn kiểu service (HTTP, TCP, etc) → Service URL: nội bộ (ví dụ
http://192.168.1.100:5000). crosstalksolutions.com - Hoặc sử dụng CLI:
cloudflared tunnel route dns <UUID_or_NAME> <hostname>
Ví dụ:
cloudflared tunnel route dns home_server_tunnel abc.com
Kiểm tra xem route thành công chưa, gõ lệnh:
cloudflared tunnel route ip show
7. Chạy Tunnel
- Từ máy chủ, chạy:
cloudflared tunnel run <UUID_or_NAME>
Nếu có config, chạy:
cloudflared --config /home/youruser/.cloudflared/config.yml tunnel run <NAME>
Lưu ý, nếu server sử dụng CSF, cần allow UDP 7844 trong csf.conf nếu có, hoặc bất kỳ firewall nào
OUT_UDP = "20,21,53,113,123,7844"
8. Chuyển thành service
1. Tạo user riêng và di chuyển cấu hình
# tạo user không đăng nhập
useradd -r -s /usr/sbin/nologin cloudflared
# tạo thư mục cấu hình chuẩn
mkdir -p /etc/cloudflared
# di chuyển/copy file cấu hình & credentials (giữ nguyên đường dẫn trong config nếu đã đúng)
cp /root/.cloudflared/config.yml /etc/cloudflared/config.yml
cp /root/.cloudflared/*.json /etc/cloudflared/
cp /root/.cloudflared/pem.cert /etc/cloudflared/pem.cert
# phân quyền an toàn
chown -R cloudflared:cloudflared /etc/cloudflared
chmod 640 /etc/cloudflared/config.yml
chmod 640 /etc/cloudflared/*.json
chmod 640 /etc/cloudflared/pem.cert
Tạo Unit file
nano /etc/systemd/system/cloudflared.service
Nội dung unit
[Unit]
Description=Cloudflare Tunnel
After=network-online.target
Wants=network-online.target
[Service]
# nếu bạn đã copy binary vào /usr/local/bin
ExecStart=/usr/local/bin/cloudflared --no-autoupdate \
--config /etc/cloudflared/config.yml \
tunnel run home_server_tunnel
# CHỌN 1 trong 2 dòng User dưới đây:
# 1) nếu đã di chuyển cấu hình/credentials sang /etc/cloudflared (khuyên dùng):
User=cloudflared
# 2) nếu vẫn để config/credentials ở /root/.cloudflared thì dùng root:
#User=root
Restart=always
RestartSec=3
# Hạn mức file descriptor hợp lý
LimitNOFILE=65536
# Nếu bản cloudflared của bạn hỗ trợ systemd notify thì có thể thay Type=notify
Type=simple
[Install]
WantedBy=multi-user.target
3. Nạp, bật và chạy service
systemctl daemon-reload
systemctl enable cloudflared
systemctl start cloudflared
4. Kiểm tra log/trạng thái
systemctl status cloudflared
journalctl -u cloudflared -f





