NL-R9-1
Netherlands, Amsterdam
$3.32/mo
$0.12 for 24 hours · $0.83 for 7 days
- CPU
- 1 × vCPU Ryzen 9950x
- Memory
- 2 GB DDR5
- Disk
- 10 GB NVMe
- Port
- 10 Gbps
MTProto Proxy is installed manually: the install command is further down this page.
MTProxy is a proxy server for Telegram: the app connects through your VPS from a tg://proxy link, and FakeTLS mode makes the connection look like TLS to an ordinary website. Three ways to run your own: one command, step by step in Docker, or the official MTProxy.
Updated
MTProxy (MTProto Proxy) is a proxy that speaks Telegram’s own MTProto protocol. Only Telegram goes through it: you open a tg://proxy or t.me/proxy link in the app, and it reaches the Telegram servers through your VPS. The rest of the device traffic goes as usual.
The secret in the link is the client password. In FakeTLS mode it starts with “ee” and ends with the domain of a cover website: the connection looks like TLS to that site. If something other than a Telegram client reaches the server, mtg passes the request to the real website, and the visitor sees its response. mtg v2 runs in FakeTLS mode only.
| Aspect | SOCKS5 | VPN | MTProxy |
|---|---|---|---|
| What goes through the server | Apps that support SOCKS5, Telegram included | All device traffic | Telegram only |
| How to connect | A tg://socks link or the app settings | A separate app and a config | A tg://proxy or t.me/proxy link right in Telegram |
| Disguise | None: the handshake is in the clear | Depends on the protocol | FakeTLS: looks like TLS to a website |
| Access | No password, or a username and password | A key or config per device | One secret for everyone (mtg) |
For all device traffic you need a VPN, such as AmneziaWG or the 3x-ui panel. For Telegram alone MTProxy is simpler: nothing to install on the phone.
mtg needs very little: its author designs it for 10–20 thousand simultaneous connections. The requirements come from the MTProto Proxy card in our library.
The cheapest plans for the MTProto Proxy minimum from our library (1 vCPU, 1 GB RAM, 10 GB) in the locations that have servers right now.
Netherlands, Amsterdam
$3.32/mo
$0.12 for 24 hours · $0.83 for 7 days
MTProto Proxy is installed manually: the install command is further down this page.
Germany, Frankfurt
$3.14/mo
$0.11 for 24 hours · $0.79 for 7 days
MTProto Proxy is installed manually: the install command is further down this page.
Poland, Warsaw
$2.79/mo
$0.10 for 24 hours · $0.70 for 7 days
MTProto Proxy is installed manually: the install command is further down this page.
Estonia, Tallinn
$4.34/mo
$0.16 for 24 hours · $1.09 for 7 days
MTProto Proxy is installed manually: the install command is further down this page.
The port in Germany is 25 Gbps, in Poland 5 Gbps; the minimum plan there costs $0.35 more a month. Traffic is unlimited by volume everywhere.
Our bot has no MTProxy script: you order the server in the bot and install the proxy with one command over SSH. It is the command of the MTProto Proxy card in our library: it installs Docker if it is missing, creates a FakeTLS secret for google.com, writes the config /etc/mtg.toml and starts the nineseconds/mtg:2 container on port 443 with automatic restart.
The button on this page opens the bot with the cheapest matching plan. Choose Ubuntu 22.04, 24.04 or Debian 12 and pay for the server; the IP address and root password arrive in the chat.
ssh root@SERVER_IPPort 443 must be free. If the server already hosts a website, read the port 443 section below first.
command -v docker >/dev/null || curl -fsSL https://get.docker.com | sh; S=$(docker run --rm nineseconds/mtg:2 generate-secret --hex google.com) && printf 'secret = "%s"\nbind-to = "0.0.0.0:3128"\n' "$S" > /etc/mtg.toml && docker run -d -v /etc/mtg.toml:/config.toml -p 443:3128 --name mtg-proxy --restart=unless-stopped nineseconds/mtg:2The command prints JSON with the tg_url and tme_url links and their QR codes. The -p 443 flag is required: inside the container mtg listens on port 3128 and puts that port into the link without the flag.
docker exec mtg-proxy /mtg access -p 443 /config.tomlgoogle.com is the example from the mtg documentation. The author advises a domain related to your server’s IP: how to choose and change it is in the domain section below.
mtg is a lightweight Go proxy with no user management: one secret for everyone. Only two settings are required, secret and bind-to; the rest have sensible defaults, listed in full in example.config.toml in the repository. Run the commands as root.
The get.docker.com script installs Docker Engine with one command. Docker itself calls it a quick-install option and recommends the apt repository for production.
curl -fsSL https://get.docker.com | shThe secret is the client password; keep it private. In hex it starts with ee, followed by the key and the FakeTLS domain. Replace DOMAIN with a domain; how to choose one is below.
docker run --rm nineseconds/mtg:2 generate-secret --hex DOMAINSave it as /etc/mtg.toml. Inside the container mtg listens on port 3128, and Docker publishes it outside. bind-to takes an IP address only: mtg rejects host names and *.
secret = "SECRET"
bind-to = "0.0.0.0:3128"443 is the port clients connect to, 3128 is the port from bind-to. The 2 tag is the current major version: the author advises against latest and stable.
docker run -d -v /etc/mtg.toml:/config.toml -p 443:3128 --name mtg-proxy --restart=unless-stopped nineseconds/mtg:2mtg doctor checks clock drift, connectivity to the Telegram data centres, the cover website and whether the domain’s DNS matches the server IP (SNI-DNS). With someone else’s domain the last check fails, as expected.
docker exec mtg-proxy /mtg doctor /config.toml-p is the port published outside: without it mtg puts 3128 from bind-to into the link. mtg learns the public IP from ifconfig.co; if the address is wrong, add it to the config as public-ipv4.
docker exec mtg-proxy /mtg access -p 443 /config.tomlmtg v2 has no ad tag: the author removed it on purpose. The promoted-channel tag comes from the @MTProxybot bot, and the official MTProxy by Telegram supports it. It is built from source: according to the README, the official Docker image is outdated.
The binary lands in objs/bin/mtproto-proxy. If the build fails, run make clean before trying again.
apt install git curl build-essential libssl-dev zlib1g-dev
git clone https://github.com/TelegramMessenger/MTProxy
cd MTProxy
make && cd objs/binThe Telegram server config changes now and then; the README advises updating it once a day. The third command creates the secret for clients.
curl -s https://core.telegram.org/getProxySecret -o proxy-secret
curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf
head -c 16 /dev/urandom | xxd -ps-H 443 is the client port, -p 8888 the local statistics port (wget localhost:8888/stats, from the server itself only), -M 1 the number of workers. For permanent operation the README gives an example systemd unit.
./mtproto-proxy -u nobody -p 8888 -H 443 -S USER_SECRET --aes-pwd proxy-secret proxy-multi.conf -M 1The bot issues a tag; add it to the start command as -P PROXY_TAG. The client link is tg://proxy?server=SERVER_IP&port=443&secret=USER_SECRET, and the bot can generate it too. With the dd prefix on the secret, the client turns on random packet padding.
The link from mtg access opens in any Telegram app. It is the same for everyone: mtg has no user management, so the only way to revoke access is a new secret.
tg://proxy?… opens straight in the app, https://t.me/proxy?… goes through the browser and is handy to forward in chats. Telegram offers to add the proxy.
The output has tg_qrcode and tme_qrcode, links to a QR code image. The third-party service api.qrserver.com draws it, and the secret goes to it in the URL. If that matters, make the QR code from the link yourself.
In Telegram’s proxy settings choose MTProto and enter the server (IP or domain), the port and the secret: the same three parameters as in the link.
The mtg author advises sharing the proxy with family and friends and never announcing it publicly: public proxies are the first to get blocked by IP. If the link went to the wrong place, change the secret and the old link stops working.
The official MTProxy takes several secrets (-S more than once). For mtg with several secrets, the author points to the mtg-multi fork.
The domain is built into the secret: the client disguises the TLS handshake as one with that site, and mtg passes stray requests to it. google.com in the docs is only an example: according to the mtg author, providers easily see that the server IP does not belong to Google.
The mtg README advises a domain related to the server IP. The most robust option, per the author’s recommendations, is your own domain: its A record points at the VPS, a website with a Let’s Encrypt certificate runs there, and mtg sits in front of the web server. Then DNS and SNI match, which is what mtg doctor checks. The [domain-fronting] section (host and port) sets the address of the site behind mtg.
docker run --rm nineseconds/mtg:2 generate-secret --hex DOMAINPut the new secret into /etc/mtg.toml. Old links stop working, so send out new ones from mtg access.
docker restart mtg-proxy
docker exec mtg-proxy /mtg access -p 443 /config.tomlOne port, one program. If nginx or another web server already listens on 443, Docker cannot publish the proxy there: give the proxy another port or put mtg in front of the website.
The command shows the process listening on TCP port 443.
ss -tlnp | grep ':443 'For example 8443: -p 8443:3128 when starting the container and -p 8443 in mtg access, so that this port goes into the link.
docker rm -f mtg-proxy
docker run -d -v /etc/mtg.toml:/config.toml -p 8443:3128 --name mtg-proxy --restart=unless-stopped nineseconds/mtg:2
docker exec mtg-proxy /mtg access -p 8443 /config.tomlmtg takes 443 and the website moves to another port; set its address and port in [domain-fronting], and mtg hands stray requests to the site. This is the own-domain setup from the section above.
The config stays on the server in /etc/mtg.toml, so the container can be recreated without losing the secret: the links stay the same.
docker pull nineseconds/mtg:2
docker rm -f mtg-proxy
docker run -d -v /etc/mtg.toml:/config.toml -p 443:3128 --name mtg-proxy --restart=unless-stopped nineseconds/mtg:2Since 2.3.0 (3 November 2026) the domain-fronting-ip and [domain-fronting].ip options are ignored; replace them with [domain-fronting].host. The secret stays. At startup mtg now checks DNS/SNI and the public IP itself: the warnings do not stop it.
A web server or another proxy already listens on 443. Find it with ss -tlnp | grep ':443 ' and publish mtg on another port or put mtg in front of the website.
Check the port in the link: without -p mtg uses 3128 from bind-to, while Docker publishes another one. Run mtg access with the published port, for example -p 443.
mtg learns the public IP from ifconfig.co. If the service is unreachable or returns the wrong address, add public-ipv4 to /etc/mtg.toml or pass the address to mtg access with -i.
Run mtg doctor: it shows clock drift beyond tolerate-time-skewness, unreachable Telegram data centres and the cover website. Check the external firewall too: the proxy’s TCP port must be open.
The secret changed, which happens after a FakeTLS domain change. Send out the new link from mtg access.
The domain in the secret does not point at the server IP. With someone else’s domain this is expected and does not stop the proxy; for DNS and SNI to match you need your own domain with an A record on the VPS.
Since 2.3.0 the option has no effect. Replace domain-fronting-ip or [domain-fronting].ip with [domain-fronting].host, which takes a name or an IP.
mtg v2 has no tag. Install the official MTProxy and register it with @MTProxybot; for a proxy with a tag the mtg author also suggests the telemt project.
No answer here? Message @ExpressHost_SupportBot.
MTProxy is a proxy for Telegram only: the app reaches its servers through your VPS from a tg://proxy link. A VPN sends all device traffic through the server and needs a separate app. For Telegram alone MTProxy is simpler: nothing to install on the phone.
Open the tg://proxy or t.me/proxy link on a device with Telegram, or scan the QR code, and the app offers to add the proxy. By hand: in the proxy settings choose MTProto and enter the server, port and secret.
Telegram supports both. The SOCKS5 handshake is in the clear, while MTProxy in FakeTLS mode looks like TLS to an ordinary website and connects from one link with no username or password. SOCKS5 helps when other apps need the same proxy.
Yes, there is one link for everyone: mtg has no user management. The mtg author advises sharing the proxy with a small circle and never announcing it publicly, since public proxies are the first to get blocked by IP. The only way to revoke access is a new secret.
Not with mtg v2: the author removed it. The ad tag comes from the @MTProxybot bot for Telegram’s official MTProxy; for a proxy with a tag the mtg author also suggests the telemt project.
The minimum in our library is 1 vCPU, 1 GB RAM and 10 GB of disk: the mtg author designs it for 10–20 thousand simultaneous connections. All our VPS run on KVM; the cheapest matching plan is 1 vCPU, 2 GB RAM and 10 GB NVMe for $2.79 a month in Poland.
Yes, as long as they do not share a port: publish the proxy on 8443, for example, or put mtg on 443 in front of the website, and it passes stray requests to the web server through the [domain-fronting] section.
Traffic is unlimited by volume, and DDoS protection is included. Speed is capped by the location port: in the Netherlands 10 Gbps, in Germany 25 Gbps, in Poland 5 Gbps, in Estonia 10 Gbps.
Commands and steps were checked against the mtg README and source code, the official MTProxy and the Telegram documentation on November 3, 2026. The one-command install is the MTProto Proxy card of our library.
Your own MTProxy — one command on a VPS.