MTProto (Mobile Transport Protocol) là một giao thức truyền tải dữ liệu được Telegram phát triển, tập trung vào tốc độ, bảo mật và khả năng hoạt động trên các kết nối kém ổn định. Nó được thiết kế để tối ưu hóa việc giao tiếp giữa ứng dụng Telegram trên thiết bị di động và máy chủ của Telegram.
Các đặc điểm chính của MTProto:
- Tốc độ: Ưu tiên tốc độ truyền tải dữ liệu.
- Bảo mật: Sử dụng các thuật toán mã hóa mạnh mẽ (AES-256, RSA-2048, Diffie-Hellman key exchange).
- Độ tin cậy: Được thiết kế để hoạt động tốt ngay cả trên các kết nối internet không ổn định.
- Khả năng mở rộng: Dễ dàng xử lý lượng lớn người dùng và dữ liệu.
MTProto thường được biết đến và sử dụng trong bối cảnh:
- Ứng dụng Telegram: Là giao thức cốt lõi cho các ứng dụng Telegram chính thức và không chính thức để giao tiếp với máy chủ Telegram.
- MTProto Proxy: Một tính năng cho phép người dùng Telegram kết nối thông qua các máy chủ proxy do cộng đồng hoặc chính Telegram cung cấp, giúp vượt qua các chặn hoặc hạn chế truy cập.
Yêu cầu
- Máy chủ Ubuntu đã được cài đặt Docker + Môi trường ảo Virtual Environment
- Kết nối internet và quyền truy cập vào Docker Hub.
- Cổng 443 (hoặc cổng tùy chỉnh) mở trên máy chủ để kết nối.
Hướng dẫn cài đặt
Bước 1: Tải Docker Image
Trước tiên, bạn cần tải image mtproxy từ github. Mở terminal và chạy lệnh sau:
git clone https://github.com/TelegramMessenger/MTProxy.git
Lệnh này sẽ tải phiên bản mới nhất của MTProxy về máy chủ của bạn.
Bước 2: Cài thư viện cho ENV (môi trường ảo) để chạy MTProxy
Kích hoạt môi trường ảo:
source venv/bin/activate
Chuyển đến Folder MTProxy
cd MTProxy
Cài đặt thư viện cần thiết để chạy MTProxy
pip install pycryptodome pyaes
Bước 3: Chạy MTProxy để kiểm tra
Để thử nghiệm nhanh, bạn có thể chạy container MTProxy mà không cần lưu trữ cấu hình lâu dài. Sử dụng lệnh sau:
docker run -it --rm -p 443:443 mtproxy/mtproxy
Chú thích:
- -it: Chạy container ở chế độ tương tác.
- –rm: Xóa container sau khi thoát.
- -p 443:443: Ánh xạ cổng 443 của máy chủ đến cổng 443 của container.
Sau khi chạy, container sẽ tự động tạo một secret ngẫu nhiên (mã bí mật) và hiển thị trong log. Log sẽ chứa các thông tin quan trọng như:
- Secret: Mã bí mật để cấu hình proxy.
- tg:// link: Liên kết để cấu hình proxy trực tiếp trong ứng dụng Telegram.
- t.me link: Liên kết để chia sẻ proxy qua Telegram.
- External IP: Địa chỉ IP công cộng của máy chủ.
Lưu ý: Nếu bạn sử dụng cổng khác 443, bạn cần chỉnh sửa liên kết tg:// hoặc t.me để phản ánh đúng cổng đã chọn.
Ví dụ output log:
#### Telegram MTProxy
####
[+] No secret passed. Will generate 1 random ones.
[*] Final configuration:
[*] Secret 1: e0559918e...xxx
[*] tg:// link for secret 1 auto configuration: tg://proxy?server=103.x.x.x&port=443&secret=dde05...xxx
[*] t.me link for secret 1: https://t.me/proxy?server=103.x.x.x&port=443&secret=dde05...xxx
[*] Tag: no tag
[*] External IP: 103.x.x.x
[*] Make sure to fix the links in case you run the proxy on a different port.
[+] Starting proxy...
Sao chép liên kết tg://
hoặc t.me
và dán vào ứng dụng Telegram để cấu hình proxy.
Bước 4: Chạy MTProxy ở chế độ Daemon
Để triển khai MTProxy lâu dài và tự động khởi động lại khi máy chủ hoặc Docker khởi động lại, sử dụng lệnh sau:
docker run -d -p 443:443 --name=mtproxy --restart=always -v mtproxy:/data mtproxy/mtproxy
Giải thích:
- -d: Chạy container ở chế độ nền (daemon).
- –name=mtproxy: Đặt tên cho container là mtproxy.
- –restart=always: Tự động khởi động lại container khi máy chủ hoặc Docker restart.
- -v mtproxy:/data: Lưu trữ secret và cấu hình trong volume mtproxy để đảm bảo dữ liệu không bị mất khi container khởi động lại.
Sau khi chạy, kiểm tra log để lấy liên kết cấu hình Telegram:
docker logs -f mtproxy
Sao chép liên kết tg://
hoặc t.me từ log và sử dụng trong ứng dụng Telegram.
Hướng dẫn tạo cron job để tự động cập nhật danh sách IP của Telegram Core Server
Telegram khuyến nghị khởi động lại container mỗi ngày để cập nhật danh sách IP của Telegram core servers. Bạn có thể thiết lập cron job để tự động hóa theo hướng dẫn sau:
1. Xác định múi giờ của hệ thống:
Đảm bảo rằng hệ thống mà bạn đang chạy Docker có múi giờ được đặt đúng là giờ Việt Nam (Asia/Ho_Chi_Minh hoặc GMT+7). Bạn có thể kiểm tra bằng lệnh sau:
timedatectl
Nếu múi giờ không đúng, bạn có thể thay đổi nó (cần quyền sudo):
sudo timedatectl set-timezone Asia/Ho_Chi_Minh
2. Mở crontab để chỉnh sửa:
Sử dụng lệnh sau để mở trình soạn thảo crontab cho người dùng hiện tại:
crontab -e
Nếu đây là lần đầu tiên bạn chỉnh sửa crontab, hệ thống có thể hỏi bạn muốn sử dụng trình soạn thảo nào (ví dụ: nano, vim). Chọn một trình soạn thảo mà bạn quen thuộc.
3. Thêm cron job:
Trong trình soạn thảo, thêm dòng sau vào cuối file để lên lịch chạy lệnh docker restart mtproxy
vào lúc 3h sáng hàng ngày:
0 3 * * * docker restart mtproxy
Giải thích các trường trong dòng cron job:
0
: Phút (0-59). Ở đây là phút thứ 0 của giờ.3
: Giờ (0-23). Ở đây là 3 giờ sáng (bạn có thể thay đổi thời gian cần restart theo nhu cầu của cá nhân).*
: Ngày trong tháng (1-31). Dấu*
có nghĩa là mọi ngày.*
: Tháng (1-12). Dấu*
có nghĩa là mọi tháng.*
: Ngày trong tuần (0-6, Chủ nhật=0 hoặc 7). Dấu*
có nghĩa là mọi ngày trong tuần.docker restart mtproxy
: Lệnh sẽ được thực thi.
4. Lưu và đóng file crontab:
Sau khi thêm dòng trên, hãy lưu và đóng file crontab. Các bước lưu và đóng tùy thuộc vào trình soạn thảo bạn đang sử dụng:
- nano: Nhấn
Ctrl + X
, sau đó nhấnY
để xác nhận lưu vàEnter
. - vim: Nhấn
Esc
, sau đó gõ:wq
và nhấnEnter
.
5. Kiểm tra cron job (tùy chọn):
Bạn có thể kiểm tra xem cron job đã được thêm vào hay chưa bằng lệnh:
crontab -l
Lệnh này sẽ hiển thị danh sách các cron job đã được lên lịch cho người dùng hiện tại. Bạn sẽ thấy dòng 0 3 * * * docker restart mtproxy
trong danh sách.
Lưu ý quan trọng:
-
Quyền: Đảm bảo rằng người dùng mà bạn đang thiết lập cron job có quyền thực thi lệnh
docker
. Nếu không, bạn có thể cần sử dụngsudo docker restart mtproxy
trong cron job, nhưng điều này thường không được khuyến khích vì lý do bảo mật. Thay vào đó, hãy đảm bảo người dùng thuộc nhómdocker
. -
Đường dẫn đầy đủ (tùy chọn nhưng khuyến khích): Mặc dù trong hầu hết các trường hợp,
docker
đã nằm trong biến$PATH
của cron, để đảm bảo chắc chắn, bạn có thể sử dụng đường dẫn đầy đủ đến lệnhdocker
. Bạn có thể tìm đường dẫn bằng lệnhwhich docker
. Ví dụ, nếu đường dẫn là/usr/bin/docker
, thì dòng cron job sẽ là:
0 3 * * * /usr/bin/docker restart mtproxy
Bài viết có sử dụng 1 phần tư liệu từ blog dotrungquan.info