No menu items!
No menu items!
More

    Giải pháp dùng Ubuntu Server + WARP + Proxy Squid để làm Proxy cho Telegram

    🧭 Tổng quan

    Trong thời gian gần đây, nhiều người dùng tại Việt Nam gặp tình trạng không thể truy cập được Telegram, ngay cả khi kết nối Internet hoạt động bình thường. Lý do có thể đến từ việc Telegram bị chặn bởi ISP hoặc giới hạn từ hệ thống mạng nội bộ.

    Là một người thường xuyên làm việc với Telegram (đặc biệt là Telegram Bot API), mình đã thử nghiệm nhiều giải pháp và cuối cùng tìm ra một phương án ổn định – đơn giản – hiệu quả:

    Dựng một server Ubuntu 22.04 dùng Cloudflare WARP để “thoát chặn”, sau đó cài Squid Proxy để trung gian truy cập Telegram từ thiết bị khác.

    Bài viết này chia sẻ chi tiết cách triển khai mô hình trên.

    🔧 Mục tiêu và Mô hình giải pháp

    Mục tiêu: Tạo một proxy server trung gian để thiết bị của bạn có thể truy cập Telegram dù đang bị chặn, bằng cách:

    • Dùng WARP để mã hóa lưu lượng ra ngoài.
    • Cài Squid Proxy và cấu hình cho phép chỉ truy cập Telegram API.
    • NAT port proxy ra IP public nếu dùng ngoài mạng LAN.
    • Có thể cấu hình thêm xác thực người dùng (authentication) để bảo mật.

    Sơ đồ mô hình sử dụng.

    ╔══════════════╗           ╔══════════════════╗          ╔═════════════════╗
    ║ Thiết bị bạn ║─────────> ║ Proxy Server     ║─────────>║ Cloudflare WARP ║
    ║ (Telegram)   ║ 3128      ║ 192.168.100.253  ║ Internet ║ (1.1.1.1 tunnel)║
    ╚══════════════╝           ╚══════════════════╝          ╚═════════════════╝
              ▲
              │ (có thể NAT ra 113.161.201.128 nếu dùng qua public)

    ✅ Các bước triển khai chi tiết

    Bước 1 – Cài Ubuntu Server 22.04

    Bạn có thể cài trên máy ảo (VM), máy vật lý, VPS hoặc cloud.

    Ví dụ IP nội bộ: 192.168.100.253

    Bước 2 – Cài đặt Cloudflare WARP

    Áp dụng như hướng dẫn ở bài trước https://stacklab.vn/cai-dat-va-ket-noi-cloudflare-warp-vpn-tren-ubuntu-debian-server/.

    # Thêm GPG key và repo
    curl https://pkg.cloudflareclient.com/pubkey.gpg | gpg --dearmor -o /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
    
    echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] http://pkg.cloudflareclient.com/ jammy main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
    
    # Cài đặt
    sudo apt update
    sudo apt install cloudflare-warp -y
    
    # Đăng ký và kết nối
    warp-cli registration new
    warp-cli connect
    warp-cli status

    Nếu trạng thái là Connected thì bạn đã sẵn sàng.

    Bước 3 – Cài đặt và cấu hình Squid Proxy

    apt install squid -y

    Chỉnh sửa file config Squid:

    vi /etc/squid/squid.conf

    Thêm hoặc sửa lại như sau:

    # Cho phép truy cập Telegram API
    acl allowed_sites dstdomain .api.telegram.org
    http_access allow allowed_sites
    http_access deny all
    
    # Cổng lắng nghe
    http_port 3128

    ⚠️ Lưu ý bảo mật: Cấu hình trên cho phép bất kỳ ai có IP truy cập Telegram, nên bạn cần giới hạn thêm bằng cách chặn IP, hoặc dùng xác thực người dùng (xem bên dưới).

    Bước 4 – (Tuỳ chọn) Cấu hình xác thực proxy

    Tạo xác thực người dùng proxy bằng basic_auth:

    apt install apache2-utils -y
    htpasswd -c /etc/squid/passwd hoanghd3

    Sau đó chỉnh sửa squid.conf:

    auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
    auth_param basic realm Proxy
    acl authenticated proxy_auth REQUIRED
    
    # Áp dụng xác thực + Telegram API
    acl allowed_sites dstdomain .api.telegram.org
    http_access allow authenticated allowed_sites
    http_access deny all

    Kết quả cho thấy file cấu hình Squid hoàn toàn hợp lệ. Không có dòng nào báo lỗi (FATAL hay ERROR) và quá trình parse đã xử lý xong toàn bộ cấu hình:

    Phân tích nhanh các dòng quan trọng:

    • auth_param basic program ... → Đã nhận diện cấu hình xác thực cơ bản với file passwd.
    • acl authenticated proxy_auth REQUIRED → Tạo ACL yêu cầu người dùng xác thực.
    • acl allowed_sites dstdomain .api.telegram.org → Giới hạn truy cập đến Telegram API.
    • http_access allow authenticated allowed_sites → Chỉ cho người dùng đã xác thực truy cập Telegram.
    • http_access deny all → Mọi truy cập khác đều bị chặn.
    • Initializing https:// proxy context → Cho biết Squid khởi tạo môi trường proxy HTTPS thành công.
    shell> squid -k parse
    2025/06/26 09:47:33| Startup: Initializing Authentication Schemes ...
    2025/06/26 09:47:33| Startup: Initialized Authentication Scheme 'basic'
    2025/06/26 09:47:33| Startup: Initialized Authentication Scheme 'digest'
    2025/06/26 09:47:33| Startup: Initialized Authentication Scheme 'negotiate'
    2025/06/26 09:47:33| Startup: Initialized Authentication Scheme 'ntlm'
    2025/06/26 09:47:33| Startup: Initialized Authentication.
    2025/06/26 09:47:33| Processing Configuration File: /etc/squid/squid.conf (depth 0)
    2025/06/26 09:47:33| Processing: auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
    2025/06/26 09:47:33| Processing: auth_param basic realm Proxy
    2025/06/26 09:47:33| Processing: acl authenticated proxy_auth REQUIRED
    2025/06/26 09:47:33| Processing: acl allowed_sites dstdomain .api.telegram.org
    2025/06/26 09:47:33| Processing: http_access allow authenticated allowed_sites
    2025/06/26 09:47:33| Processing: http_access deny all
    2025/06/26 09:47:33| Initializing https:// proxy context

    Restart dịch vụ:

    systemctl restart squid
    

    Bước 5 – Kiểm tra từ thiết bị khác

    Cấu hình proxy trong ứng dụng (Telegram, hoặc hệ điều hành) trỏ tới:

    • Proxy IP: 192.168.100.253
    • Port: 3128
    • Nếu có cấu hình xác thực: nhập hoanghd3 và mật khẩu bạn đã tạo.

    Nếu sử dụng curl để test trong terminal sử dụng cú pháp sau:

    export http_proxy="http://hoanghd3:password@192.168.100.253:3128"
    export https_proxy="http://hoanghd3:password@192.168.100.253:3128"

    Nếu không sử dụng xác thực, cú pháp là.

    export {http,https}_proxy=http://192.168.100.253:3128;

    Sau đó curl test send Telegram như bình thường

    curl -s -X POST https://api.telegram.org/bot<bot_token>/sendMessage -d chat_id=<chat_id> -d text="Hello World"
    {"ok":true,"result":{"message_id":8790,"from":{"id":7509858733,"is_bot":true,"first_name":"Alert Demo","username":"alerts_demo_bot"},"chat":{"id":-4572608076,"title":"Alert Demo","type":"group","all_members_are_administrators":true,"accepted_gift_types":{"unlimited_gifts":false,"limited_gifts":false,"unique_gifts":false,"premium_subscription":false}},"date":1750933711,"text":"Hello World"}}

    Bước 6 – NAT port nếu cần truy cập từ Internet

    Nếu bạn dùng server này trong cloud hoặc có public IP (ví dụ: 113.161.201.128), NAT port 3128 ra public IP.

    Trên router hoặc firewall:

    Forward TCP port 3128 → 192.168.100.253:3128

    Sau đó bạn có thể dùng proxy: 113.161.201.128:3128 ở bất kỳ đâu.

    Bước 7 – Enable SOCKS5 để có thể truy cập được trên App Telegram.

    shell> ssh -g -f -N -D 3129 0.0.0.0
    Enter passphrase for key '/root/.ssh/id_rsa':

    Bước 8 – NAT port nếu cần truy cập từ Internet

    Nếu bạn dùng Server này trong cloud hoặc có public IP (ví dụ: 113.161.201.128), NAT port 3129 ra public IP. Hãy chắc chắn Proxy Server 192.168.100.253 đi được đến thiết bị NAT, ví dụ thiết bị NAT của mình là 192.168.123.1.

    Hãy xem qua sơ đồ mạng tổng thể.

    [Internet]
         |
         | Public IP: 113.161.201.128 (port 3129)
         |
    [ROUTER - NAT]
      WAN: 113.161.201.128
      LAN: 192.168.123.1
         |
         | NAT đến → 192.168.100.253:3129
         |
    [CORE SWITCH]
         |
         | 192.168.123.2 <--> 192.168.100.254
         |
    [Proxy Server] 192.168.100.253 (SOCKS5 qua danted/ssh -D)
         |
         | WARP tunnel
         |
    [Cloudflare WARP: 172.16.0.2]

    Vấn đề khi dùng WARP.

    Khi bật WARP VPN ở 192.168.100.253, toàn bộ default route (default via) sẽ bị chuyển vào tunnel CloudflareWARP. Điều này khiến proxy server không thể trả ngược lại cho các kết nối đến từ Internet qua NAT, cụ thể là:

    • Gói SYN từ Telegram đến 113.161.201.128:3129 được NAT về 192.168.100.253
    • Proxy nhận gói → gửi phản hồi SYN-ACK qua WARP (sai route)
    • NAT không khớp → Telegram không kết nối được

    Trên router NAT có IP 113.161.201.128 (đầu Internet), bạn cần cấu hình như sau:

    Forward TCP port 3129 từ public IP về proxy server nội bộ:

    Forward TCP port 3129 → 192.168.100.253:3129

    Hoặc nếu là thiết bị Mikrotik/cisco:

    /ip firewall nat
    add chain=dstnat protocol=tcp dst-port=3129 action=dst-nat to-addresses=192.168.100.253 to-ports=3129

    Bạn cần đảm bảo route ngược đúng (để không chui vào WARP)

    Bạn cần thêm route ngược chỉ cho traffic từ mạng NAT (192.168.123.0/24) quay lại qua gateway cũ (192.168.100.254) – không đi vào WARP:

    ip route add 192.168.123.0/24 via 192.168.100.254

    Lệnh này giúp cho khi có ai kết nối từ ngoài Internet tới, gói trả lời từ 192.168.100.253 sẽ đi đúng qua đường router NAT (không đi WARP), tránh rớt gói.

    Bước 9 – NAT port từ router

    Trên router NAT có IP 113.161.201.128 (đầu Internet), bạn cần cấu hình như sau:

    Forward TCP port 3129 từ public IP về proxy server nội bộ:

    ip route add 192.168.123.1/32 via 192.168.100.254

    Bước 10 – Check TCP/3129 ở môi trường Internet

    Truy cập https://tools.stacklab.vn/tools/util/TCP%20Port%20Checker nhập thông tin public ip và tcp/3129.

    Kết quả Open là thành công.

    Bước 11 – Nhập SOCKS5 trên APP Telegram

    📱 Cách cấu hình proxy SOCKS5 trong Telegram trên iOS

    1. Mở Telegram
      • Vào mục Cài đặt (Settings)Data and StorageProxy.
    2. Chọn Add Proxy
      • Chọn loại SOCKS5.
    3. Nhập thông tin proxy:
      • Server: 113.161.201.128
      • Port: 3129
      • Username: hoanghd3 (nếu cần)
      • Password: (để trống nếu proxy không yêu cầu hoặc nhập nếu có)
    4. Bật nút Use Proxy

    Nếu thiết lập đúng, Telegram sẽ hiển thị trạng thái: “connected, xx ms ping” như hình.

    🛠 Nếu gặp lỗi

    • Đảm bảo port 3129 mở trong ufw hoặc iptables.
    • Kiểm tra server có đang chạy proxy (dùng ss -tlnp | grep 3129)
    • Nếu xài WARP thì nhớ route đúng UID/iptables để app proxy đi qua WARP (như bạn đã làm với UID 65534 cho nobody).

    ⚙️ Ưu điểm và Nhược điểm

    Tiêu chíƯu điểmNhược điểm
    🔒 Bảo mậtCó thể cấu hình xác thực, mã hóa WARPCần mở port nếu dùng công cộng
    🌐 Truy cập TelegramỔn định, vượt chặn ISPChỉ áp dụng Telegram API
    ⚡ Tốc độWARP tối ưu hóa mạngPhụ thuộc mạng và hạ tầng
    🔧 Dễ triển khaiChỉ cần server Ubuntu, không cần VPN truyền thốngCần kiến thức cơ bản về Linux & proxy

    📊 So sánh với VPN truyền thống

    Tiêu chíWARP + Squid ProxyVPN truyền thống
    Dễ triển khai✅ Dễ❌ Cần nhiều bước hơn
    Bypass Telegram✅ Có✅ Có
    Bảo mật✅ Có mã hóa✅ Tùy loại VPN
    Chia sẻ proxy✅ Có thể chia sẻ qua port❌ Khó chia sẻ trực tiếp
    Điều khiển quyền truy cập✅ ACL hoặc xác thực❌ Khó kiểm soát hơn

    💡 Lời khuyên

    • Nếu bạn chỉ cần dùng Telegram (không xem Netflix hay truy cập geo-block), WARP là lựa chọn nhẹ, nhanh và miễn phí.
    • Cấu hình ACL để giới hạn domain Telegram, tránh bị lợi dụng proxy.
    • Bắt buộc phải bật xác thực nếu mở proxy ra Internet để tránh bị dùng làm “proxy mở” (open proxy) gây nguy hiểm.
    • Có thể triển khai thêm Fail2Ban hoặc IPTables để bảo vệ proxy khỏi bị tấn công brute-force.

    🏁 Kết luận

    Việc Telegram bị chặn gây ảnh hưởng không nhỏ đến công việc và giao tiếp hàng ngày. Tuy nhiên, với một server Ubuntu, bạn hoàn toàn có thể triển khai giải pháp riêng, vừa bảo mật vừa chủ động.

    Cloudflare WARP + Squid Proxy là một sự kết hợp tuyệt vời, phù hợp cho lập trình viên, sysadmin, hoặc người dùng kỹ thuật cần một công cụ đơn giản mà hiệu quả.

    Nếu bạn thấy bài viết hữu ích, hãy chia sẻ với bạn bè hoặc để lại bình luận thảo luận bên dưới nhé!
    Chúc bạn kết nối an toàn và không gián đoạn 💬📶

    Bài viết gần đây

    spot_img

    Related Stories

    Leave A Reply

    Please enter your comment!
    Please enter your name here

    Đăng ký nhận thông tin bài viết qua email