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