Happ: Install and Subscription Import
Happ is my primary client for the mass user: one button, clear import, RF bypass out of the box. Below is the very instruction I drop into clients' bots. Copy it, substitute your own subscription link of the form https://sub.your-domain.com/xxxxxxxx, and hand it out.
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
Install the app from the store or via the direct link you give the client:
- iOS / iPadOS — App Store, the "Happ" app.
- Android / Android TV — Google Play or the APK from Happ's official site.
Happ is free, lightweight, and looks the same on all platforms — the client won't have to relearn when switching phones.
Subscription import in three steps
The whole point of connecting is pasting the subscription link. The client does this:
- Copy the subscription link the bot issued (of the form
https://sub.your-domain.com/xxxxxxxx). - In Happ tap + (plus) → Add from clipboard — if the link is already copied, or Import by link and paste it manually.
- The profile appears with a list of servers. Pick a server and tap Connect.
If there are several servers — leave "Auto" / "Best by ping", and the app picks a working one itself. In a well-designed service the client sees just one tile, "Connect" — behind it is a balancer, and there's nothing for them to choose.
QR instead of a link
If it's inconvenient for the client to copy a long link — give a QR. In Happ: + → Scan QR, point the camera at the code with the subscription link. The result is the same — a profile with a list of servers. A QR is convenient to drop right into the bot as an image.
Bypass for Russia (important)
Without this the client will lose access to banks and marketplaces that cut VPNs. We enable the split tunnel: Russian sites go direct, everything else through the node.
In Happ: Settings → Routing → enable the "Bypass for Russia" / Russia bypass preset, if it's present in your version. Ideally the rules arrive together with the subscription — if you set them in the template on the panel, the client has nothing to enable at all.
Verification: open a Russian site (bank, government portal) — it should open fast and without "VPN detected." Open a blocked resource — it should open through the node.
Kill-switch: so traffic doesn't leak
So that on a tunnel drop traffic doesn't go past the VPN, we enable always-on VPN. On Android this is done in the system, not in the app:
Phone Settings → Network → VPN → the gear next to the Happ profile → enable "Always-on VPN" and "Block connections without VPN."
On iOS, Happ keeps the connection alive itself through the system VPN profile — there's no separate "block without VPN" toggle there, but on a drop the app reconnects automatically.
Updating the subscription
If a server "went down" (say, you changed the IP on your side) — the client doesn't need to reinstall the profile. It's enough to tap "Update subscription" in Happ — fresh servers get pulled in. This is worth explaining to the client right away, so they don't panic at the very first outage.
If it doesn't work — a short checklist
Hand this list to the client along with the instruction:
- Switch the server in the app (a different one from the list).
- Tap "Update subscription."
- Change DNS to
https://8.8.8.8/dns-query(Google) orhttps://9.9.9.9/dns-query(Quad9). Cloudflare1.1.1.1is slow in RF — don't use it. - Toggle "Bypass for Russia" on/off (sometimes an RF site goes the wrong way).
- Delete and re-add the profile from the link.
- Didn't help — write to support: carrier, city, app, what exactly won't open.
One nuance that saves tickets: if you have a json subscription and on Android a Russian site still goes through the node — delete and re-add the subscription in Happ, this rebuilds the routing. On how to nicely present tiles and labels in Happ — in the article "Server Description: Hints to the Client in Happ/INCY."
Next guide v2rayTun: Setup on the Phone → ↗ Article unclear or something off? Message me and I will help or fix it. @notrealvpn →