NETWORK

Các mẹo hay khi sử dụng Cloudflare Tunnels để kết nối an toàn

Cloudflare Tunnels đã trở thành một trong những giải pháp hàng đầu giúp các lập trình viên và quản trị viên hệ thống kết nối an toàn các dịch vụ nội bộ ra internet mà không cần mở port firewall hay sử dụng IP công khai. Với mô hình kết nối outbound-only, Cloudflare Tunnels tạo ra một kênh bảo mật giữa máy chủ của bạn và mạng lưới toàn cầu của Cloudflare, giúp bảo vệ các ứng dụng khỏi các cuộc tấn công trực tiếp. Trong bài viết này, chúng ta sẽ khám phá 7 mẹo thực tế giúp bạn tận dụng tối đa sức mạnh của Cloudflare Tunnels cho dự án của mình.

Tại sao nên sử dụng Cloudflare Tunnels?

Trước khi đi vào các mẹo chi tiết, hãy hiểu rõ lý do tại sao Cloudflare Tunnels lại là lựa chọn ưu việt cho việc triển khai dịch vụ an toàn:

  • Bảo mật vượt trội: Không cần mở port trên router hay firewall, giảm thiểu nguy cơ bị tấn công DDoS và các mối đe dọa từ bên ngoài. Tất cả kết nối đều được mã hóa và đi qua mạng lưới Cloudflare trước khi đến máy chủ của bạn.
  • Dễ dàng triển khai: Chỉ cần cài đặt cloudflared daemon và cấu hình đơn giản, bạn đã có thể expose các dịch vụ localhost ra internet một cách an toàn.
  • Miễn phí và không giới hạn băng thông: Gói Free của Cloudflare đã cung cấp đầy đủ các tính năng cơ bản để triển khai tunnel, phù hợp cho cá nhân và doanh nghiệp nhỏ.
  • Tích hợp sâu với hệ sinh thái Cloudflare: Bạn có thể kết hợp với Cloudflare Access để thêm lớp xác thực, sử dụng CDN để tối ưu tốc độ, và tận dụng các tính năng bảo mật nâng cao.

Bây giờ, hãy cùng khám phá các mẹo giúp bạn sử dụng Cloudflare Tunnels hiệu quả hơn.

Mẹo 1: Thiết lập Tunnel với Systemd để đảm bảo hoạt động 24/7

Một trong những vấn đề phổ biến khi mới sử dụng Cloudflare Tunnels là tunnel bị ngắt khi đóng terminal hoặc khi máy chủ khởi động lại. Để khắc phục, bạn nên cấu hình cloudflared chạy như một systemd service trên Linux.

Các bước thực hiện:

  1. Sau khi tạo tunnel và cấu hình file config.yml, cài đặt cloudflared như một service:
sudo cloudflared service install
  1. Khởi động và kích hoạt service tự động chạy khi boot:
sudo systemctl start cloudflared
sudo systemctl enable cloudflared
  1. Kiểm tra trạng thái để đảm bảo tunnel đang hoạt động:
sudo systemctl status cloudflared
  1. Nếu cần thay đổi cấu hình, chỉnh sửa file /etc/cloudflared/config.yml (đối với service) thay vì ~/.cloudflared/config.yml, sau đó restart service:
sudo systemctl restart cloudflared

Lưu ý quan trọng: File config cho systemd service thường nằm ở /etc/cloudflared/config.yml, khác với vị trí mặc định khi chạy thủ công. Hãy đảm bảo bạn chỉnh sửa đúng file và có quyền phù hợp.

Lợi ích: Tunnel sẽ tự động khởi động sau mỗi lần reboot máy chủ, đảm bảo dịch vụ của bạn luôn sẵn sàng mà không cần can thiệp thủ công.

Mẹo 2: Tích hợp Cloudflare Tunnels với Docker để quản lý dễ dàng

Nếu bạn đang sử dụng Docker để triển khai các ứng dụng, việc chạy cloudflared trong một container riêng biệt sẽ giúp quản lý và mở rộng hệ thống dễ dàng hơn. Bạn có thể sử dụng Docker Compose để định nghĩa cả ứng dụng và cloudflared trong cùng một file.

Ví dụ docker-compose.yml:

version: '3.8'

services:
  cloudflared:
    image: cloudflare/cloudflared:latest
    container_name: cloudflared-tunnel
    command: tunnel --no-autoupdate run
    environment:
      - TUNNEL_TOKEN=${TUNNEL_TOKEN}
    restart: unless-stopped
    network_mode: bridge

  myapp:
    image: nginx:latest
    container_name: myapp
    ports:
      - "8080:80"
    restart: unless-stopped

Các bước thực hiện:

  1. Tạo tunnel trên Cloudflare Dashboard và lấy Tunnel Token.
  2. Tạo file .env trong cùng thư mục với docker-compose.yml và thêm token:
TUNNEL_TOKEN=your-tunnel-token-here
  1. Trong Cloudflare Dashboard, cấu hình Public Hostname trỏ về service Docker của bạn (ví dụ: http://myapp:80 – sử dụng tên container làm hostname).youtube​
  2. Khởi động các container:
docker-compose up -d

Lợi ích: Cloudflared và ứng dụng của bạn cùng chạy trong mạng Docker, giúp kết nối nội bộ dễ dàng qua DNS của Docker. Bạn cũng có thể dễ dàng scale hoặc di chuyển toàn bộ stack sang máy chủ khác.

Mẹo 3: Sử dụng Wildcard Domain để quản lý nhiều dịch vụ qua một Tunnel

Thay vì tạo nhiều tunnel hoặc thêm từng public hostname riêng lẻ, bạn có thể sử dụng wildcard domain (*.yourdomain.com) để route tất cả subdomain về một reverse proxy như Nginx Proxy Manager hay Traefik.

Các bước cấu hình:

  1. Tạo tunnel và cấu hình Public Hostname với subdomain là * (dấu sao):
    • Subdomain: *
    • Domain: yourdomain.com
    • Service: Trỏ về reverse proxy của bạn (ví dụ: http://nginx-proxy-manager:80)
  2. Tạo DNS record CNAME wildcard trong Cloudflare DNS:
    • Type: CNAME
    • Name: *
    • Content: <tunnel-id>.cfargotunnel.com (lấy tunnel ID từ dashboard)
    • Proxy status: Proxied
  3. Trong reverse proxy (Nginx Proxy Manager/Traefik), cấu hình các proxy host cho từng subdomain (app1.yourdomain.com, app2.yourdomain.com, …) trỏ về các container/service tương ứng.

Lưu ý: Nếu sử dụng HTTPS giữa Cloudflare Tunnel và reverse proxy, bạn cần cấu hình wildcard certificate từ Let’s Encrypt hoặc Cloudflare và bật tùy chọn Origin Server Name trong tunnel settings.

Lợi ích: Bạn chỉ cần một tunnel duy nhất để phục vụ hàng chục hoặc hàng trăm dịch vụ khác nhau, giảm thiểu độ phức tạp trong quản lý và tăng tính linh hoạt khi thêm dịch vụ mới.

Mẹo 4: Bảo mật nâng cao với Cloudflare Access

Mặc dù Cloudflare Tunnels đã cung cấp một lớp bảo mật vững chắc, bạn nên kết hợp thêm Cloudflare Access để thêm lớp xác thực người dùng. Điều này đặc biệt quan trọng khi bạn expose các dịch vụ nhạy cảm như admin panel, database management tools, hoặc internal applications.

Các bước cấu hình:

  1. Trong Cloudflare Zero Trust Dashboard, truy cập Access > Applications.
  2. Tạo một Self-Hosted Application với domain trùng với hostname bạn đã cấu hình trong tunnel (ví dụ: admin.yourdomain.com).
  3. Cấu hình Identity Provider (IdP) trong Settings > Authentication:
    • Có thể chọn Google Workspace, GitHub, Azure AD, hoặc các IdP khác.
    • Cũng có thể sử dụng One-Time PIN (OTP) qua email cho đơn giản.
  4. Tạo Access Policy để quy định ai có quyền truy cập:
    • Ví dụ: Chỉ cho phép các email thuộc domain @yourcompany.com
    • Hoặc tạo Access Group dựa trên các tiêu chí phức tạp hơn.
  5. Kích hoạt Protect with Access trong cấu hình tunnel để cloudflared tự động validate token.

Lợi ích: Ngay cả khi ai đó biết URL của dịch vụ, họ vẫn phải xác thực qua Cloudflare Access trước khi có thể truy cập. Điều này bảo vệ bạn khỏi các cuộc tấn công brute force và truy cập trái phép.

Mẹo 5: Tối ưu hiệu suất với cấu hình OriginRequest

Cloudflare Tunnels cho phép bạn tinh chỉnh các thông số kết nối giữa edge server và origin của bạn thông qua các tùy chọn originRequest trong file config.yml. Điều này giúp cải thiện hiệu suất, đặc biệt với các ứng dụng có lưu lượng truy cập cao.

Các tham số quan trọng cần tối ưu:

tunnel: your-tunnel-id
credentials-file: /path/to/credentials.json

ingress:
  - hostname: app.yourdomain.com
    service: http://localhost:8080
    originRequest:
      # Thời gian timeout khi kết nối đến origin
      connectTimeout: 10s
      
      # Thời gian timeout cho TLS handshake
      tlsTimeout: 10s
      
      # Gửi TCP keepalive packets mỗi 30 giây
      tcpKeepAlive: 30s
      
      # Giữ kết nối sống trong 90 giây sau request cuối
      keepAliveTimeout: 90s
      
      # Số kết nối tối đa giữ trong pool
      keepAliveConnections: 100
      
      # Sử dụng HTTP/2 để kết nối với origin (nếu origin hỗ trợ)
      http2Origin: true
      
      # Disable TLS verification nếu dùng self-signed cert
      noTLSVerify: false

  - service: http_status:404

Tối ưu hóa system-level (Linux):

# Tăng file descriptor limit
echo "cloudflared soft nofile 65536" | sudo tee -a /etc/security/limits.conf
echo "cloudflared hard nofile 65536" | sudo tee -a /etc/security/limits.conf

# Tối ưu network kernel parameters
sudo tee /etc/sysctl.d/99-cloudflared.conf <<EOF
net.core.somaxconn = 32768
net.ipv4.tcp_max_syn_backlog = 32768
net.ipv4.tcp_keepalive_time = 600
EOF

sudo sysctl -p /etc/sysctl.d/99-cloudflared.conf

Lợi ích: Cải thiện độ trễ, giảm connection drops, và tăng throughput cho các ứng dụng có lưu lượng cao. Đặc biệt hiệu quả với các ứng dụng real-time như video streaming hay game servers.

Mẹo 6: Giám sát và theo dõi Logs để phát hiện sự cố sớm

Để đảm bảo tunnel hoạt động ổn định và phát hiện các vấn đề kịp thời, bạn nên thường xuyên kiểm tra logs và trạng thái tunnel. Cloudflare cung cấp nhiều cách để theo dõi logs.

Các phương pháp giám sát:

  1. Xem logs trực tiếp trên server (khi chạy tunnel):
# Bật logging level debug
cloudflared tunnel --loglevel debug run your-tunnel

# Lưu logs vào file
cloudflared tunnel --loglevel debug --logfile /var/log/cloudflared.log run your-tunnel
  1. Stream logs từ xa bằng CLI (không cần SSH vào server):
# Authenticate cloudflared trên máy local
cloudflared tunnel login

# Stream logs của tunnel
cloudflared tail <tunnel-uuid>

# Filter logs theo level và event type
cloudflared tail <tunnel-uuid> --level info --event http --sampling 0.5
  1. Xem logs qua Dashboard (cho remotely-managed tunnels):
    • Truy cập Cloudflare One > Networks > Tunnels
    • Chọn tunnel và connector ID muốn xem
    • Click Begin log stream
  2. Kiểm tra trạng thái tunnel:
# Liệt kê tất cả tunnels và trạng thái
cloudflared tunnel list

# Xem thông tin chi tiết về tunnel và các connector
cloudflared tunnel info <tunnel-name>

Các trạng thái quan trọng cần biết:

  • Healthy: Tunnel hoạt động bình thường với 4 kết nối đến Cloudflare.
  • Degraded: Một số kết nối bị lỗi, cần kiểm tra logs và firewall.
  • Down: Tunnel không hoạt động, kiểm tra xem cloudflared service có đang chạy không.
  • Inactive: Tunnel đã được tạo nhưng chưa được run.

Lợi ích: Phát hiện sớm các vấn đề như connection failures, high latency, hoặc authentication errors giúp bạn xử lý kịp thời trước khi ảnh hưởng đến người dùng.

Mẹo 7: Triển khai nhiều Replicas để đảm bảo High Availability

Để tăng tính sẵn sàng và khả năng chịu lỗi, bạn nên chạy nhiều cloudflared instances (replicas) cho cùng một tunnel trên các máy chủ khác nhau. Cloudflare sẽ tự động cân bằng tải giữa các replicas.

Các bước triển khai:

  1. Tạo tunnel một lần và lấy credentials file:
cloudflared tunnel create my-ha-tunnel
  1. Copy file credentials (<tunnel-id>.json) và config.yml đến các máy chủ khác.
  2. Trên mỗi máy chủ, cài đặt cloudflared và chạy cùng tunnel:
# Máy chủ 1
cloudflared tunnel run my-ha-tunnel

# Máy chủ 2 (chạy cùng lệnh)
cloudflared tunnel run my-ha-tunnel

# Máy chủ 3
cloudflared tunnel run my-ha-tunnel
  1. Kiểm tra tất cả replicas đang hoạt động:
cloudflared tunnel info my-ha-tunnel

Best practice cho High Availability:

  • Chạy ít nhất 2 replicas trên các máy chủ vật lý khác nhau tại cùng location.
  • Mỗi host nên có tối thiểu 4GB RAM và 4 CPU cores.
  • Phân bổ 50,000 ports cho cloudflared process trên mỗi host (đủ cho ~4,000 users).
  • Nếu cần scale hơn nữa, có thể tạo nhiều tunnels và phân chia IP space.

Xử lý khi cần xóa một replica:

# Lấy connector ID của replica muốn xóa
cloudflared tunnel info my-ha-tunnel

# Xóa replica cụ thể
cloudflared tunnel cleanup --connector-id <CONNECTOR-ID> my-ha-tunnel

Lợi ích: Nếu một máy chủ gặp sự cố hoặc cần bảo trì, các replicas khác sẽ tiếp tục xử lý traffic mà không gây gián đoạn dịch vụ. Cloudflare tự động route traffic đến replica gần nhất và khỏe mạnh nhất.


Cloudflare Tunnels là một công cụ mạnh mẽ giúp bạn kết nối an toàn các dịch vụ nội bộ ra internet mà không cần lo lắng về bảo mật hay quản lý infrastructure phức tạp. Bằng cách áp dụng 7 mẹo trong bài viết này, bạn có thể:

  • Đảm bảo tunnel hoạt động 24/7 với systemd service
  • Quản lý dễ dàng với Docker integration
  • Tiết kiệm thời gian với wildcard domains
  • Tăng cường bảo mật với Cloudflare Access
  • Tối ưu hiệu suất cho ứng dụng của bạn
  • Giám sát và phát hiện sự cố kịp thời qua logs
  • Đảm bảo high availability với multiple replicas

Cloudflare Tunnels không chỉ miễn phí mà còn cung cấp hiệu suất và độ tin cậy tương đương các giải pháp enterprise. Đặc biệt, nó tích hợp sâu với hệ sinh thái Cloudflare giúp bạn tận dụng CDN, DDoS protection, và các tính năng bảo mật nâng cao.

Bây giờ là lúc để bạn thử nghiệm! Hãy bắt đầu với một tunnel đơn giản cho một ứng dụng test, sau đó dần dần áp dụng các mẹo nâng cao khi bạn cảm thấy tự tin hơn. Đừng quên theo dõi logs và điều chỉnh cấu hình để phù hợp với nhu cầu cụ thể của dự án.

Duy Nghiện
Hãy làm khán giả, đừng làm nhân vật chính :)

You may also like

Nhận thông báo qua email
Nhận thông báo cho
guest

0 Bình luận
Mới nhất
Cũ nhất Nhiều like nhất
Phản hồi nội tuyến
Xem tất cả bình luận