VPNSmith
tunneling-obfuscationINFO

v2rayN with the sing-box Core (2026): What Changes, and the DNS Trap

Switching v2rayN from the Xray core to sing-box: which protocols actually need it (TUIC, AnyTLS, Naive - not Hysteria2), how the DNS fields change meaning, why Bootstrap DNS must be an IP, and where the files live.

By Eric Gerard · Founder · VPNSmith - Self-host VPN & GDPR VPS specialist7 min readImage: Pexels

Affiliate disclosure - this article contains a Contabo affiliate link. If you order a VPS through it we earn a commission at no extra cost to you. Everything below is taken from the v2rayN source code, its official wiki and the projects' release pages, checked on 2026-08-09. Version numbers and config field names change often; check them against the current docs before you rely on them.

Short answer: switch v2rayN to the sing-box core only if you need TUIC, AnyTLS or Naive - those are the three protocols the Xray core does not handle. Hysteria2 is not one of them, and Vision and REALITY work fine under sing-box. The switch is one setting, but it silently changes what the DNS fields mean, which is where most broken setups come from. If you are still choosing between the two engines rather than switching, start with our sing-box vs Xray comparison.

Which cores v2rayN can actually drive

The wiki lists eleven supported cores across four families: the V2Ray family (Xray, v2fly), the Clash family (mihomo), the sing_box family, and standalone ones such as hysteria2, naiveproxy, tuic, juicity, brook, overtls and shadowquic.

That list is easy to misread. In the code, only two cores act as the main core that v2rayN generates a configuration for: Xray and sing_box. The wiki's DNS page says the same thing in as many words. The rest are used through a custom configuration file - you supply the config, v2rayN runs the binary.

Windows packages already ship with the Xray, sing-box and mihomo binaries inside the zip. The other cores you download yourself and drop into bin.

Making the switch

Settings → Core Type Settings.

The resolution order matters more than the setting itself. On start, v2rayN first reads the core type recorded on the current server profile; only if that is empty does it fall back to the global core type. In practice that means you can leave your whole list on Xray and flip a single TUIC node to sing-box, without touching anything else.

Two cream-coloured RJ45 wall sockets mounted on a dark panel, with four white Ethernet cables plugged in through blue and purple connector boots; a red LED glows on the upper socket, and the floor behind is pale grey.
Two cream-coloured RJ45 wall sockets mounted on a dark panel, with four white Ethernet cables plugged in through blue and purple connector boots; a red LED glows on the upper socket, and the floor behind is pale grey.

What genuinely requires sing-box: three protocols

This one does not need to be argued, because v2rayN computes it. The code defines the protocols each core supports and then derives the sing-box-only set as the difference between the two:

CoreSupported protocols
XrayVMess, VLESS, Shadowsocks, Trojan, Hysteria2, WireGuard, SOCKS, HTTP
sing-boxVMess, VLESS, Shadowsocks, Trojan, Hysteria2, TUIC, AnyTLS, Naive, WireGuard, SOCKS, HTTP

So the answer is TUIC, AnyTLS and Naive. Nothing else.

Two beliefs you will meet in forum threads are worth correcting, because both are contradicted by the source:

  • "Hysteria2 needs sing-box." It does not - Hysteria2 is in both lists, so the Xray core handles it. There are issues in the tracker reporting practical trouble with Hysteria2 under Xray, but a reported bug is not a missing capability.
  • "sing-box can't do Vision or REALITY in v2rayN." It can. The sing-box outbound builder emits the Vision flow for VLESS and writes the REALITY block (public key, short ID) plus the uTLS fingerprint. The xtls-rprx-vision-udp443 variant is normalised to plain xtls-rprx-vision.

There is a documented chaining limitation, but it lands on the other core: with proxy chains, nodes using Xray cannot use TUIC or AnyTLS as the front or landing proxy.

The DNS trap - the part that actually breaks setups

If something worked on Xray and stopped working the moment you switched, this is almost certainly why. The two DNS fields do not have the same job under the two cores.

FieldUnder XrayUnder sing-box
Direct DNSby default, only resolves targets to IPs for routing-rule matching - not your real outbound queriesdoes the real work: routing matches, your node's own domain, and direct targets
Remote DNSsame, routing matching onlyrouting matches and resolution of proxied targets

Under Xray these fields are a routing detail. Under sing-box they are your resolver. Copying a working Xray DNS configuration across is exactly how you end up with a node that will not even resolve its own hostname.

Bootstrap DNS must be an IP address

The rule is stated plainly in the documentation: if direct DNS or remote DNS is written as a domain, you must set a Bootstrap DNS, as an IP address. It is the resolver that resolves your resolver. Enter https://dns.google/dns-query as your remote DNS with no bootstrap and there is nothing left to look up dns.google with.

The related "add common DNS hosts" option hard-codes mappings for dns.google and cloudflare-dns.com, so a bootstrap failure does not take everything down with it.

Options that exist on only one core

Do not spend an evening looking for a checkbox that cannot be there:

  • sing-box only, and only in TUN mode: FakeIP, and blocking SVCB/HTTPS queries. That second one also switches off ECH and HTTP/3 - the docs note ECH can interfere with per-domain split routing.
  • Xray only: parallel DNS queries, and the optimistic cache.

For resolution strategy, UseIPv4 and UseIPv4v6 map to sing-box's prefer_ipv4, and UseIPv6/UseIPv6v4 to prefer_ipv6; ipv4_only and ipv6_only are also available. DNS hosts are written one per line as domain IP1 IP2. Unless you have a specific reason, the wiki's own advice is to import the default DNS configuration and leave it alone.

Two smaller behaviour changes

  • routeOnly is forced on. Under the sing-box core it is enabled and cannot be turned off.
  • Mux needs a protocol. Enabling multiplexing is not enough under sing-box; you also have to pick the multiplexing protocol - h2mux, smux or yamux.

Where the files live

Everything is relative to the application folder:

WhatWhere
Core binariesbin\<coreType> - so bin\sing_box
Config generated for the corebinConfigs (config.json)
GUI settingsguiConfigs (guiNConfig.json)
LogsguiLogs

The zip builds are portable: everything stays inside the folder you extracted it to, so you can keep several independent copies side by side. If you set the environment variable V2RAYN_LOCAL_APPLICATION_DATA_V2 to 1, the base folder moves to %LOCALAPPDATA%\v2rayN instead.

A desk in front of a bright multi-pane window: a large monitor showing a dark mountain-and-night-sky wallpaper with a sign-in prompt, an open laptop below it, a speckled grey mug, a small jar of pink flowers and a pair of glasses.
A desk in front of a bright multi-pane window: a large monitor showing a dark mountain-and-night-sky wallpaper with a sign-in prompt, an open laptop below it, a speckled grey mug, a small jar of pink flowers and a pair of glasses.

Update before you troubleshoot anything

The current release at the time of writing is v2rayN 7.24.4, published on 30 July 2026, and its release notes flag it as an urgent security update: the built-in downloader in older versions could be exploited for a man-in-the-middle attack that served malicious files. The project tells every user to upgrade immediately. If you are on an older build, do that before you start debugging a proxy problem.

Windows assets ship as six zips - WPF (v2rayN-windows-64.zip) and Avalonia (v2rayN-windows-64-desktop.zip) builds, in x64, x86 and arm64 - alongside a public key file for verifying the signatures. Windows 10 or newer is required.

On the other side, sing-box's current stable release is v1.13.16, published 3 August 2026. One honest gap: neither the wiki nor the 7.24.4 release notes publish a compatibility matrix between v2rayN and sing-box versions, and the exact sing-box build bundled in the zip is not documented - you would have to inspect the binary to know it.

Should you switch?

Only for a reason. If your nodes are VLESS or VMess with REALITY, the Xray core is the most documented path and there is nothing to gain. Switch when you have a TUIC, AnyTLS or Naive node to run, or when you want FakeIP in TUN mode - and when you do, re-do your DNS settings from scratch rather than assuming your Xray ones carry over.

Running your own endpoint rather than a public node is a separate decision; if that is where you are heading, our anti-DPI and censorship-bypass guide covers what actually survives deep packet inspection.

★ Nuremberg GDPR datacenter · ✓ Dedicated IPv4 included · 200+ Mbps guaranteed

A VPS you fully control for tunneling & obfuscation → ContaboRoot access · open any port · run your own stack

Frequently asked questions

How do I switch v2rayN to the sing-box core?
Open Settings and use 'Core Type Settings'. v2rayN resolves the core in two steps: it first reads the core type set on the current server profile, and only if that is empty does it fall back to the core type set globally. So a single server can run on sing-box while the rest of your list stays on Xray. Note that in the code only two cores generate a configuration as the main core, Xray and sing_box; the other supported cores are driven through a custom configuration file.
Which protocols really require the sing-box core in v2rayN?
Three: TUIC, AnyTLS and Naive. This is not a matter of opinion - v2rayN computes the list itself, as the set of protocols sing-box supports minus those Xray supports. Everything else in the common list (VMess, VLESS, Shadowsocks, Trojan, WireGuard, SOCKS, HTTP) runs on either core.
Does Hysteria2 need the sing-box core?
No. Hysteria2 appears in both the Xray and the sing-box supported-protocol lists in v2rayN, so the Xray core handles it too. This is a common misconception. Separately, some users have reported practical problems with Hysteria2 on Xray in the project's issue tracker, but a reported bug is not the same thing as a missing feature, and it is not a reason to state that Xray cannot do Hysteria2.
Do XTLS Vision and REALITY work under the sing-box core?
Yes, both. v2rayN's sing-box outbound builder emits the Vision flow for VLESS and generates the REALITY block (public key and short ID) client-side, along with the uTLS fingerprint. One detail worth knowing: the 'xtls-rprx-vision-udp443' variant is normalised to plain 'xtls-rprx-vision'.
Why did my DNS stop working after switching to sing-box?
Because the DNS fields do not mean the same thing under the two cores. Under Xray, the 'direct DNS' and 'remote DNS' fields are used by default only to resolve targets to IPs when matching routing rules - they are not your actual outbound DNS queries. Under sing-box, those same fields do the real resolving: direct DNS handles routing matches, your node's own domain and direct targets, while remote DNS handles proxied targets. A configuration that looked fine on Xray can therefore break the moment you switch.
What is Bootstrap DNS and when do I need it?
It is the resolver used to look up your DNS server's own domain name. The official rule is explicit: if you enter direct DNS or remote DNS as a domain (for example a DNS-over-HTTPS URL), you must set a Bootstrap DNS, and it must be given as an IP address. Otherwise nothing can resolve the resolver itself. There is also an option to add common DNS hosts, which hard-codes mappings for dns.google and cloudflare-dns.com so a Bootstrap failure is survivable.
Which DNS options are exclusive to one core?
FakeIP and the blocking of SVCB/HTTPS queries work only with the sing-box core, and only in TUN mode. Parallel DNS queries and the optimistic cache work only with the Xray core. Blocking SVCB/HTTPS also disables ECH and HTTP/3; the official documentation notes that ECH can interfere with per-domain split routing.
Where does v2rayN keep the sing-box binary and its generated config?
Relative to the application folder: core binaries live in bin\<coreType>, so bin\sing_box for this one, and the configuration generated for the core lands in binConfigs. GUI settings are in guiConfigs (guiNConfig.json), logs in guiLogs. The zip builds are portable - everything stays in the folder you extracted, so several independent copies can coexist. Setting the V2RAYN_LOCAL_APPLICATION_DATA_V2 environment variable to 1 moves the base folder to %LOCALAPPDATA%\v2rayN instead.