← Back to library
Clients Practice

v2rayTun: Setup on the Phone

v2rayTun is a flexible client, but it has one signature trap: on Android, Russian sites and IP checks tend to go through the node even when bypass is configured. Below is how to install it, import the subscription, and immediately close this problem with sniffing settings. Substitute your subscription link into the builder above.

This material is about engineering your own infrastructure and is educational in nature. You are responsible for complying with the laws of your own jurisdiction.

Installation and import

Install the app:

  • Android — Google Play, "v2rayTun."
  • iOS — App Store, "v2rayTun."

Subscription import — as everywhere:

  1. Copy the subscription link from the bot (of the form https://sub.your-domain.com/xxxxxxxx).
  2. In v2rayTun tap Import from clipboard or Add by link and paste.
  3. A profile appears with a list of servers. Pick a server → Connect.

If there are several servers — leave "Auto" / best by ping. Up to this point everything is standard. Next comes the important part.

v2rayTun's main trap: an RF site goes through the node

A typical complaint: on an iPhone the bypass for Russia works, but on Android the very same config drives a Russian site or an IP check (like 2ip.ru) through the foreign node. The client opens "where am I located" — sees a foreign country and panics.

The cause isn't in the server. By default v2rayTun on Android doesn't sniff the domain: it looks at the destination IP, and services like 2ip.ru live on foreign hosting — by IP they're "not Russian," and the app honestly routes them through the node. The "RF → direct" rule works by domain, and the app didn't make out the domain.

The fix: gVisor + sniffing

This is fixed with three settings. In v2rayTun:

  1. Traffic settings → stack → gVisor (instead of System / Auto). It's the gVisor stack specifically that can correctly parse domains.
  2. In the same place enable Sniffing (domain sniffing).
  3. Routing mode — "By rules" (not "Global").

After this — reconnect (turn the tunnel off and on again) so the settings apply.

Now the app sees the domain 2ip.ru, applies the "RF → direct" rule, and the IP check shows the client's home address. At the same time, banks and marketplaces that were also checking by IP get fixed.

Verifying it all took effect correctly

  • Open 2ip.ru through the tunnel — it should show the client's home IP, not the node's.
  • Open a resource blocked in RF — it should open (going through the node).
  • Open a bank — without the "VPN detected" banner.

If the IP check still shows the node — then sniffing or gVisor didn't apply: double-check that the stack is exactly gVisor, sniffing is on, and you reconnected after the change.

DNS and updating

  • Connects slowly — change DNS to https://8.8.8.8/dns-query (Google) or https://9.9.9.9/dns-query (Quad9). Cloudflare 1.1.1.1 is slow in RF.
  • The server "went down" — tap "Update subscription," and fresh servers get pulled in.

Kill-switch on Android

So traffic doesn't leak on a drop: Phone Settings → Network → VPN → the gear next to v2rayTun → "Always-on VPN" + "Block connections without VPN."

Bottom line

v2rayTun is a working client, but on Android you must switch it to the gVisor stack with sniffing enabled and the "by rules" mode, otherwise Russian sites and IP checks go the wrong way. This is the first thing to check if a client on v2rayTun complains about the "wrong country." The cross-platform option without this trap is Hiddify, covered in the article "Hiddify: The Cross-Platform Client."

Next guide Hiddify: The Cross-Platform Client → Article unclear or something off? Message me and I will help or fix it. @notrealvpn →
This material is educational and covers network-infrastructure engineering. You are responsible for complying with the laws of your jurisdiction.