For anyone installing v2rayN on a Mac for the first time, or who has opened the app but is stuck on proxy permissions or connectivity checks. First confirm your Mac’s processor and where the app is installed, then handle the Gatekeeper alert. Finally, check the core, system proxy, and TUN separately. Permission to launch an app, permission to change network settings, and approval for a network extension are separate steps—allowing one does not replace the others.
1. macOS installers and processor architecture
The macOS version of v2rayN uses a cross-platform desktop interface. The WPF version is for Windows and does not run on Mac. Before downloading, open the Apple menu and select About This Mac to see whether your Mac lists a “Chip” or “Processor.” Choose the macOS arm64 package for Apple silicon or the macOS x64 package for an Intel Mac. Don’t assume a file will run just because its name includes v2rayN.
-
Check your Mac
Open Apple menu → About This Mac and note the chip type and macOS version. Then compare them with the system requirements shown on the download page. A matching architecture does not guarantee that an older macOS version is supported.
-
Choose an installer
Go to the macOS download options on our client page and choose the arm64 or x64 file that matches your Mac. Prefer the build for your processor to avoid introducing translation-related issues into your initial troubleshooting.
-
Extract the download
Extract the entire archive, or mount the disk image if one is provided. Move the app bundle to Applications. Don’t extract only an executable from inside the bundle.
-
Launch for the first time
Open v2rayN from Finder → Applications. If a security alert appears, read it carefully and follow the next section. Re-downloading the same file won’t replace the required permission approval.
Before updating, quit the old version, then replace the app. Keep a backup of your existing configuration, and avoid changing subscriptions, routing, and core settings during your first upgrade. If something goes wrong, you’ll be able to tell whether the cause was the app update or a configuration change.
2. Allow an app blocked by Gatekeeper
Before an app launches, Gatekeeper checks its source and signature status. “Apple could not verify the developer” and “Apple cannot check it for malicious software” are launch security alerts—not connection failures or missing system proxy permissions. Once you’ve confirmed the file is trustworthy and matches your platform, you can allow this app specifically.
- Try opening v2rayN once from Applications so macOS records the blocked launch.
- Go to Apple menu → System Settings → Privacy & Security, then scroll down to the Security section.
- If v2rayN appears as recently blocked, confirm the app name and click Open Anyway. This button may only appear for a limited time after the app is blocked.
- Authenticate with your account password or Touch ID if prompted. If a second alert appears, choose Open.
- Return to the app and check that its main window appears. Once it opens, continue with importing your configuration. The security settings page is not where you configure connectivity.
Alert wording varies across macOS versions. On some older versions, you can Control-click the app in Finder and choose Open to bring up the approval flow. Newer versions may still require approval in Privacy & Security. Follow the instructions shown by your current macOS version.
3. Import a subscription, then check the local listener
Opening the main window only confirms that the app passed its launch check. Traffic forwarding depends on the core, while subscriptions provide server configurations. Go to Subscription Groups → Subscription Group Settings to add a group and subscription URL. Save, return to Subscription Groups, and update it. Use the option that updates all subscriptions to fetch configurations for every group. Menu wording varies by version; some versions let you choose whether to update through a proxy. If you’re not connected yet, start with the option that doesn’t use a proxy.
Once configurations appear, select one and set it as the active server. Then check the logs for a successful core startup. VMess and VLESS are protocol types, not system permission names. Leave existing transport, TLS, and server name parameters unchanged. You don’t need to change VLESS to VMess or disable TLS just to get macOS permissions approved.
The commands below use 127.0.0.1 and port 10808 as examples. Check the local listening port under Settings → Parameter Settings, then compare it with the startup log. If your version offers a mixed port, the same listener accepts both HTTP and SOCKS. If the interface lists separate ports, use each for its intended protocol instead of reusing one number.
- Core not running: Check the startup error in the logs first. Even if the system proxy is configured, there’s no local endpoint to forward traffic through.
- Port already in use: Quit the old process or other app using the port, or change the listening port. If you change it, update the system proxy to match.
- No subscription entries: Check whether the subscription URL has expired, requires a login, or returned an error in the update log. This is unrelated to allowing the app through Gatekeeper.
4. Approve system proxy changes and check network settings
For everyday browsing, start with system proxy mode. In the v2rayN main window, open System Proxy and select Set System Proxy. If macOS asks to change network settings or install a helper tool, check which app initiated the request, what it will do, and where it came from before approving it. You don’t need to run the entire client as an administrator just to launch it.
Client checks
- System proxy
- Set system proxy
- Active configuration
- Entry selected as the active server
- Local address
127.0.0.1- Example port
10808; check the actual listening port
Make sure the core is running before setting the system proxy; check each status separately.
macOS checks
- Settings path
- System Settings → Network
- Current service
- The Wi-Fi or Ethernet connection you’re using
- Details page
- Details → Proxies
- What to check
- Enabled proxy address and port
Recheck after switching network services. Don’t rely on the proxy settings for an interface you aren’t using.
Check what was actually configured on the Proxies page in macOS. Web Proxy (HTTP) is for HTTP traffic; Secure Web Proxy (HTTPS) is the proxy endpoint used for HTTPS requests. “Secure” in the name doesn’t mean the local proxy itself necessarily uses TLS. Check only the settings managed by the client. Don’t enable automatic proxy discovery, automatic proxy configuration, and multiple manually configured proxies just to fill every checkbox.
A system proxy is a setting that apps can read; it does not route all traffic automatically. Some command-line tools, browsers with their own proxy settings, and apps that create their own connections may ignore it. If a browser works but a terminal command fails, first check how that program handles proxies instead of assuming permission has been revoked.
5. TUN, network extensions, and standard proxies
TUN routes traffic through a virtual network interface and involves interfaces, routes, and DNS, so it generally needs more permissions than a standard local proxy. It isn’t required for the initial setup. First confirm that your configuration works with the system proxy. Then decide whether to enable TUN based on which apps need coverage. This makes it easier to troubleshoot without changing several variables at once.
Choose an approach: test the standard proxy before considering TUN
System proxy mode
- For browsers and desktop apps that use the system proxy.
- Check the local listener, active server, and proxy settings for the current network service.
- Enabling a standard proxy does not necessarily require network extension approval.
TUN mode
- For scenarios that need a virtual interface and are supported by your current build.
- Install or approve the required helper components as prompted by the client.
- After enabling it, check for conflicts with interfaces, routes, DNS, and other tunneling software.
How TUN works depends on the client version and its components. A virtual interface, helper service, and network extension are not interchangeable.
Look for an approval prompt only if a component actually requests network extension permission. On macOS 15, for example, check System Settings → General → Login Items & Extensions → Network Extensions. Other versions may show an approval prompt in Privacy & Security. If no relevant item appears in the list, that doesn’t mean the standard system proxy setup failed—and it’s not a reason to install an extension that isn’t there.
- Network extensions: Approve only an item whose name and developer match the component you just installed. Don’t enable unrelated items to fix a v2rayN issue.
- Local Network permission: On macOS versions that offer it, check Privacy & Security → Local Network. This permission mainly controls access to your local network; it is not a master switch for all internet connections.
- Firewall: Network → Firewall mainly controls incoming connections. If your browser can’t connect to a remote server, turning off the entire firewall should not be your first move.
- Managed device policies: School- or work-managed Macs may restrict extensions, helper services, or network settings. Your personal account password may not override these restrictions.
6. Diagnose issues using system status and explicit proxies
When troubleshooting, check “the proxy settings were applied” separately from “the request was forwarded successfully.” Start with system status, check the port, then explicitly route a request through the local proxy. Run these commands in Terminal. They only read status or make a standard web request; they do not change macOS security settings.
# Check the current system proxy settings
scutil --proxy
# Check whether the example port is listening for TCP connections
lsof -nP -iTCP:10808 -sTCP:LISTEN
# Use an HTTP proxy explicitly; only if this port supports HTTP
curl --proxy http://127.0.0.1:10808 --connect-timeout 10 -I https://example.com
# Use SOCKS explicitly and resolve the target domain through the proxy
curl --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 -I https://example.com
In scutil --proxy, fields such as HTTPEnable, HTTPProxy, and HTTPPort show the system’s actual proxy settings. If you’re using SOCKS, check the corresponding SOCKS fields. If lsof returns nothing, first check that the port is correct and the core is still running instead of repeating the permission steps.
| What you see | Check first | Next step |
|---|---|---|
| Local connection refused | Listening port and core process | Check the port and startup logs, then restore the listener. |
| Explicit proxy works; browser fails | System proxy and browser-specific settings | Check the proxy for the current network service and whether the browser overrides it. |
| Local listener works; request times out | Server, DNS, routing, and upstream connection | Check the client logs and test another configuration known to work. |
| Only TUN mode fails | Helper service, interfaces, DNS, and route conflicts | Turn off TUN and switch back to the system proxy to confirm the basic connection still works. |
An HTTP response from the destination only confirms that this request received a response; it doesn’t prove that all domains are routed through the proxy. Routing rules may still send some requests directly. Check the core logs to see which outbound was selected for each test. Don’t confuse “system proxy enabled globally” with “all destinations use a proxy outbound.”
7. Installation and permissions FAQ
Can’t find “Open Anyway”?
Try opening the app again from Applications, then go to System Settings → Privacy & Security and check the latest blocked-app entry. If the alert is actually about an incompatible macOS version, a damaged app, or malware, address that specific issue. On a managed device, contact your administrator rather than trying to bypass policy.
Why am I being asked for my password after allowing the app to launch?
Allowing an app to launch and changing network settings are separate actions. Check whether the prompt appeared after you changed the system proxy or installed a helper service. Confirm its name and purpose before approving. If the prompt keeps appearing, check the app’s location, old processes, and helper component status. Don’t repeatedly click through without checking.
Why can’t my browser connect after I quit v2rayN?
Open the client again, choose System Proxy → Clear System Proxy, then quit. If the app won’t open, go to System Settings → Network → your current network service → Details → Proxies and remove any leftover local proxy settings. Keep a record of your existing work proxy or automatic configuration URL so you don’t delete it by mistake.
What should I check after each update?
First confirm that you replaced the app with one built for the same architecture. After launch, check the active configuration, listening port, and system proxy status. Respond to a permission prompt only if macOS blocks the launch again or requests access. Updating the main app doesn’t mean you need to recreate your subscription or re-enable every network permission.
After configuration, follow the same checks in order: the app opens, the subscription loads, the core is listening, the system proxy points to the right port, and the destination responds. Enable TUN only if needed, then verify its additional permissions and network changes separately. This sequence gives installation, permission, and server issues a clear place to investigate.