For macOS users who have downloaded v2rayN but are stuck at a “cannot verify the developer” alert or a network permission prompt. First allow the app in System Settings, then handle permissions for changing the proxy, accessing the local network, and using TUN. Finally, verify each layer through client logs, system proxy status, and local ports.
Identify where the block occurs and check the current state
“Cannot verify the developer” appears before the app actually starts, as part of macOS’s app launch check. The v2rayN main window usually has not appeared yet, so subscriptions, nodes, and proxy ports are not active. Repeatedly double-clicking or re-importing a subscription will not fix this stage. First allow the current app to open in System Settings.
If the main window is already open but macOS asks for an administrator password when you enable the system proxy, the app launch check has passed and the issue is now system network configuration permissions. If a node appears active but websites still do not load, check the proxy mode, ports, and routing rules instead of blaming Gatekeeper.
- Window never appears: first allow the app under “Privacy & Security.”
- Window appears but the core does not start: open the logs and check configuration fields, port conflicts, and the core type.
- Core starts but websites do not load: confirm that the system proxy is enabled and that the browser follows the system proxy.
- Only terminal traffic fails: terminal tools may not read the system proxy, so specify an HTTP or SOCKS port explicitly.
Allow the first launch using the standard app path
Move the extracted v2rayN app to the “Applications” folder before opening it for the first time. If it stays in Downloads, later updates or cleanup may change its path, making the saved launch permission harder to verify. After moving it, open it once normally so macOS records the block.
After the first blocked launch, do not keep clicking the same icon. Open “System Settings” → “Privacy & Security,” scroll to the “Security” section, find the notice for v2rayN, and choose “Open Anyway.” macOS may ask for your account password or biometric authentication.
Move to Applications
After extracting the app, move v2rayN to the “Applications” folder. Do not run it directly from a compressed-file preview window or temporary folder.
Trigger the block
In “Applications,” double-click v2rayN. When macOS says it cannot verify the developer or has blocked the app, close the alert.
Find the permission
Open “System Settings” → “Privacy & Security,” scroll to “Security,” and confirm that the page lists the v2rayN launch that was just blocked.
Confirm the launch
Click “Open Anyway” and complete account verification. When the confirmation dialog appears again, choose “Open” and wait for the main window.
Keep the launch location consistent
After the app starts successfully, keep it in the same folder. When updating, quit the old process before replacing the app to avoid running two versions at once.
If “Open Anyway” does not appear, the block record may not have been created yet, or too much time may have passed since the last attempt. Return to “Applications,” open v2rayN again, and go straight to “Privacy & Security” after the block alert appears. You can also Control-click the app in Finder, choose “Open,” and continue through the system confirmation dialog.
Do not disable the entire app verification system to handle one application. Allow this app explicitly once; this leaves checks for other apps unchanged and makes it easier to determine whether the issue is launch permission, core startup, or proxy configuration.
Handle network, proxy, and TUN permissions
After v2rayN starts successfully, macOS may show several different permission requests. Each covers a different capability: changing the system proxy lets apps that follow system network settings use the local port; local network access is needed for addresses on the same network; firewall alerts concern inbound connections; and TUN mode may require additional system authorization.
For basic use, enable the system proxy first rather than starting with TUN. The system proxy has a shorter permission chain and is better for verifying that the subscription, node, and core work correctly. Once HTTP and HTTPS traffic passes through the proxy reliably, decide whether to switch modes based on which apps need coverage.
Basic system proxy
- Menu path
- Settings → Parameter Settings
- Listen address
- 127.0.0.1
- SOCKS example
- 10808
- HTTP example
- 10809
- System action
- Enable system proxy
Complete this configuration first to test browsers and desktop apps that follow the system proxy.
Core and TUN checks
- Menu path
- Settings → Parameter Settings → Core Type
- Common cores
- Xray
- TUN status
- Keep disabled during initial troubleshooting
- When to authorize
- Confirm when enabling TUN
- Troubleshooting entry point
- Core logs
For VMess, VLESS, and other nodes, follow the configuration provided by the subscription. Do not rewrite transport parameters manually.
- Requests permission to modify network settings: this is the system confirmation shown when enabling or restoring the system proxy. Verify that v2rayN initiated the request, then authorize it.
- Requests access to the local network: choose Allow when connecting to a LAN address or local service. If access was previously denied, check it again under “System Settings” → “Privacy & Security” → “Local Network.”
- Requests permission to accept inbound connections: handle this only when the relevant connections need to be listened for. For local-only use, keep the listen address set to 127.0.0.1 whenever possible.
- TUN fails to start: turn TUN off first, confirm that system proxy mode works, then check system authorization and logs. Avoid troubleshooting nodes and the virtual network interface at the same time.
Import a subscription and choose a proxy mode
Allowing permissions only means the client can run; it does not mean a usable node is available. In v2rayN, add a subscription group, paste the complete subscription URL, and run an update. Once nodes appear, select one as the active server and check the core startup log for successful listening.
The key to importing a subscription is preserving its fields exactly. The address, port, transport, TLS, and Reality settings for VMess and VLESS are determined by the service configuration. If an update produces zero nodes, first check whether the subscription URL is complete or expired and whether the log reports an update error. Do not guess missing fields manually.
System proxy mode
RecommendedConnect browsers and desktop apps that follow macOS system proxy settings to v2rayN’s local HTTP or SOCKS port. This requires fewer permissions and gives you a clearer troubleshooting boundary.
Best for: first-time setup, subscription testing, browser access
TUN mode
Use a virtual network interface to capture a broader range of traffic, including traffic from apps that ignore system proxy settings. This adds more steps for system authorization, routing, and DNS troubleshooting.
Best for: after system proxy verification, when broader traffic coverage is needed
- Open subscription group management from the main screen, add a group, and paste the complete subscription URL.
- Run Update All Subscriptions and wait for the node list to refresh. Do not quit the app during the update.
- Select a node as the active server, start the core, and wait for the logs to show a local listening address.
- Enable the system proxy first, open a site in your browser, and confirm that basic connectivity works.
- Then test the routing rules to confirm that direct and proxied domains use the expected exits.
Routing takes place after traffic enters the core. If the system proxy was never written to macOS network settings, changing domain rules will have no effect; if the core is not running, no local port will be listening. Follow this order: “core running → port listening → system proxy → route match” to locate the break quickly.
After switching nodes, wait a few seconds before testing. Rapid switching can mix old connections, DNS cache entries, and logs from the new core. If only one node fails while others connect normally, focus on that node’s subscription status and protocol parameters instead of repeatedly changing macOS permissions.
Verify that the system proxy is actually working
First check the v2rayN status bar and core logs. Normally, after the core starts, they should show a local listen address and port without errors such as “address already in use.” If the log shows repeated restarts, quit other processes that may be using the same port or choose an unused port in Parameter Settings.
Next check the current macOS proxy status. Open “System Settings” → “Network” → current network connection → “Details” → “Proxies,” and see whether the web proxy and secure web proxy are enabled. The server should usually be 127.0.0.1, with a port matching v2rayN’s Parameter Settings. Button labels may vary slightly across macOS versions, but these options are in the current connection’s detailed settings.
scutil --proxy
Run the command above in Terminal to view the system proxy configuration. Check HTTPEnable, HTTPProxy, HTTPPort, HTTPSEnable, HTTPSProxy, and HTTPSPort. Enable values should be 1, and the proxy address should match the client’s listen address. If the status bar says the proxy is enabled but the command still returns 0, disable the system proxy, enable it again, and complete the system authorization.
curl --proxy http://127.0.0.1:10809 https://v2raylink.com/
The second command avoids uncertainty about whether Terminal reads the system proxy by sending the request directly through the example HTTP port. If the actual HTTP port is not 10809, replace it with the value shown in v2rayN. If the command returns page content, the local HTTP entry point, active node, and remote connection are at least working end to end.
- Browser works, Terminal does not: if the terminal program does not inherit the system proxy, use explicit proxy arguments or set the appropriate environment variables for the current terminal session.
- Explicit proxy also fails: check the core logs for incoming connections and look for node handshake, DNS, or routing errors.
- Websites fail after closing v2rayN: reopen the client and disable the system proxy, making sure macOS is not still pointing to a stopped port.
- Only some domains fail: check route matches, DNS resolution, and the node’s protocol parameters instead of resetting all system network settings.
Common alerts and fixes
The same Mac may show app launch, network settings, local network, and TUN authorization prompts in sequence. Handle only the current step and verify the result immediately afterward. Changing multiple permissions, ports, and routing rules at once makes the logs difficult to correlate with a specific action.
Can’t find the “Open Anyway” button?
Double-click v2rayN in “Applications,” wait for the block alert, close it, then immediately open “System Settings” → “Privacy & Security” and scroll to “Security.” If the app is still inside a compressed file or temporary folder, extract and move it first.
Does enabling the system proxy require verification every time?
Confirm that the app path has not changed repeatedly and that two v2rayN instances are not running. Fully quit the old process, keep only the version in “Applications,” and then toggle the system proxy once.
Does the main window open but the core fail to start?
Go to “Settings” → “Parameter Settings” → “Core Type” and confirm the selected core, then open the core logs. For a port conflict, check 10808, 10809, or the actual port shown in the interface. For a configuration parsing error, update the subscription again instead of adding protocol fields manually.
Is the node connected but the browser cannot open websites?
Go to “System Settings” → “Network” → current connection → “Details” → “Proxies” and check 127.0.0.1 and the HTTP port, then run scutil --proxy. If the browser uses its own proxy settings, restore it to follow the system configuration and try again.
Does the network stop working after enabling TUN?
Turn off TUN and restore system proxy mode first, then confirm that the node and subscription work. Next check the TUN startup log, system authorization, and routing conflicts before restarting TUN separately. Do not change the core, node, and DNS settings at the same time.
After troubleshooting, keep a clear baseline configuration: the app stays in “Applications,” the core starts reliably, the local listen address is 127.0.0.1, the port matches the system proxy, and at least one subscription node has been tested in practice. When upgrading or switching networks, compare each item against this baseline.
If the issue began after a system update, first check whether the network service changed. For example, switching from Ethernet to Wi-Fi may require the system proxy to be written again for the current service. If it began after replacing v2rayN, confirm that the old process has exited and the app path is not duplicated, then check the launch permission and core logs.