v2rayNG proxy setup (Android)
Published: 26 August 2026 · 7 min read
TL;DR: Tap + → Manual input [SOCKS], point it at gw.roamproxy.com:41080 with your dashboard username and password, tap the entry to select it, set Routing to Global, and press the V button. Do not use the HTTP entry — it leaves non-HTTP traffic and DNS outside the proxy while an IP-check page still looks correct. If your network cannot reach the gateway directly, chain Roam behind an upstream node with a custom config. Verify on ip.sb and two or three real apps before you trust it.
What you need before you start
Everything in this tutorial uses the same four values. Get them from your Roam dashboard and keep that tab open — you type them once into v2rayNG and once more if you verify from a computer.
| Field | Value |
|---|---|
| Server | gw.roamproxy.com |
| Port | 41080 |
| Username | generated in the dashboard |
| Password | generated in the dashboard |
Read this first if your network is restricted. Roam is an exit-IP layer: it changes the address the destination site sees. It is not a tunnel out of a network that blocks outbound connections. If your phone is on a carrier or Wi-Fi network that cannot reach gw.roamproxy.com:41080 directly, the connection will fail, and it will fail in a way that looks like a broken product. v2rayNG cannot stack a second tunnel on top of another VPN app — Android allows one VPN service at a time — so on such a network you need the chained configuration in Step 5, not a different set of settings.
Step 1 — Install v2rayNG
v2rayNG is a free, open-source Android client built on Xray-core. Install it from Google Play or from the releases page of the 2dust/v2rayNG project on GitHub. If you download the APK, pick the build matching your phone's CPU — arm64-v8a is correct for almost every phone sold in the last several years. Versions from the 1.8 series onward have the menus described here; if your copy looks different, update it before troubleshooting anything else.
Step 2 — Add the Roam server
- Open v2rayNG and tap + in the top right.
- Choose Manual input [SOCKS]. (Older versions label it Type manually [Socks].)
- Fill in the fields from the table below.
- Tap the ✓ in the top right to save.
| Field | Enter |
|---|---|
| Remarks | anything, e.g. Roam |
| Address | gw.roamproxy.com |
| Port | 41080 |
| User | your username |
| Password | your password |
Type the address as the hostname shown above — do not replace it with an IP address you looked up. The gateway's address can change, the hostname does not.
Why SOCKS and not the HTTP entry
Newer builds also offer Manual input [HTTP]. Use SOCKS. An HTTP outbound only carries HTTP and HTTPS; anything else your apps do — and, depending on your DNS settings, the name lookups themselves — goes out over your normal connection instead. The symptom is confusing: an IP-check page reports the new address, so the proxy looks fine, while other apps hang or time out. A SOCKS outbound carries the whole connection and removes that class of failure.
Step 3 — Select the server and connect
- On the main screen, tap the Roam entry once so it is highlighted. Adding a server does not select it; a different entry stays active until you do this.
- Tap the round V button in the bottom right.
- The first time, Android asks for permission to set up a VPN connection. Tap OK. This prompt is how Android hands all traffic to v2rayNG; nothing is tunneled anywhere except to the server you configured.
The button turns green and the notification bar shows v2rayNG as connected. That means the local service started — it does not yet prove the Roam gateway accepted your credentials. Step 4 does that.
Routing: use Global while you verify
Open the menu (☰) → Settings → Routing (older versions: Predefined rules) and make sure the mode is Global rather than one of the Bypass LAN / bypass mainland presets. The bypass presets deliberately send part of your traffic direct. That is useful once everything works; while you are still verifying, it makes a genuine misconfiguration look intermittent. Switch back after Step 4.
Step 4 — Verify (properly)
Open https://ip.sb in your browser and confirm it shows a Roam exit IP in the region you expect. You can also long-press the Roam entry and choose Test connection, or tap the latency line at the bottom of the main screen: a number in milliseconds means the gateway answered; -1 or a timeout means it did not.
Checking ip.sb alone is not enough. An IP-check page is one small HTTPS request; it succeeds under conditions where real apps do not. Open two or three apps or sites you actually use as well. If ip.sb reports the new IP but everything else stalls, the configuration is wrong — almost always the HTTP-vs-SOCKS issue from Step 2, or a bypass routing preset — and you should go straight to connected but not working.
Optional: verify the credentials from a computer
Testing outside the app tells you whether a problem is with your credentials or with v2rayNG. Note the form: -x takes the proxy address and -U passes the credentials separately.
curl -v -x socks5h://gw.roamproxy.com:41080 -U 'username:password' https://ip.sb
If curl returns a Roam IP but the phone does not, the credentials are fine and the problem is in the app. If curl fails too, re-copy the username and password from the dashboard. For a desktop walkthrough, see macOS proxy setup.
Step 5 — Chaining behind an upstream hop
Skip this step if Step 4 already works. You need it when your network cannot reach the gateway directly. Because Android runs only one VPN service, you cannot simply turn on another VPN app and then v2rayNG on top. Instead, tell Xray to send the Roam outbound through a second outbound you already have, so the path becomes: your phone → your upstream node → Roam gateway → destination. The destination still sees the Roam exit IP.
This is done with a custom configuration rather than the form fields. Xray links one outbound to another with proxySettings; the relevant part of the outbounds list looks like this, with upstream being whatever node already works for you:
"outbounds": [
{
"tag": "roam",
"protocol": "socks",
"settings": { "servers": [ { "address": "gw.roamproxy.com", "port": 41080,
"users": [ { "user": "username", "pass": "password" } ] } ] },
"proxySettings": { "tag": "upstream" }
},
{ "tag": "upstream", "protocol": "…your existing node…", "settings": { } }
]
In v2rayNG, add it with + → Custom config (or share the working upstream entry as a full config, edit it, and re-import). Whichever outbound is listed first is the one used by default, so keep roam first. If the chain fails, test the two hops separately: connect with the upstream node alone and confirm you have working internet, then add Roam back. A chain that fails at hop one looks identical to one that fails at hop two.
Per-app proxy and everyday use
Once the setup is verified, v2rayNG's Per-app proxy screen (menu → Settings → Per-app proxy) lets you choose which apps go through Roam and which use your normal connection. Two practical notes: metered residential traffic is charged per gigabyte, so keep video and app-store downloads off the proxy; and any app that already had an open connection when you turned the switch on keeps that connection until it reconnects — force-close it to be sure.
Plans and what a session costs
Rotating residential traffic is billed at $2/GB with no monthly minimum, so a phone used for testing costs cents rather than a subscription. If you need one address that stays the same across sessions — anything with a login that reacts badly to a changing IP — a static residential IP is $4/IP/month. New accounts receive 300MB of trial traffic on their first top-up (from $2), which is more than enough to complete this tutorial and confirm the exit IP behaves the way your target site expects.
FAQ
The button turns green but nothing loads.
Green only means the local VPN service started. Either the server was added but never tapped to select it — adding and selecting are separate actions — or the gateway is rejecting the credentials. Long-press the Roam entry and choose Test connection: a millisecond value means the gateway answered, so re-check routing and the SOCKS/HTTP choice; -1 means it did not, so re-copy the username and password from the dashboard, and if your network is restricted, go to Step 5.
It connects, but only some apps or sites work.
Open Settings → Routing and set the mode to Global. The bypass presets deliberately route part of your traffic direct rather than through the proxy, so anything matching those rules keeps using your normal connection. While you are verifying a new setup you want everything on the proxy; switch back to a bypass preset once you know it works.
My dashboard shows traffic being used, but pages will not load.
Billed traffic means authentication succeeded and the gateway is carrying data — your credentials are fine. The failure is in what is being carried: the outbound type or DNS. Delete the entry and re-add it with Manual input [SOCKS] as in Step 2; the HTTP entry leaves non-HTTP traffic and, depending on settings, DNS outside the proxy. If SOCKS is already set and pages still fail, see connected but not working.
Can I run v2rayNG together with another VPN app?
Not side by side — Android allows one VPN service at a time, and turning on the second one silently disconnects the first. If you need Roam behind an upstream hop because your network cannot reach the gateway directly, use the chained custom configuration in Step 5, which puts both hops inside the one v2rayNG service.
Roam is the exit-IP layer for this setup: rotating residential at $2/GB, static residential at $4/IP/month, no monthly minimum. Create an account and get 300MB of trial traffic on your first top-up — enough to finish this tutorial and confirm the exit IP behaves the way your target site expects.