12. Observability and Troubleshooting#


Link1 troubleshooting principle: first confirm whether traffic enters Link1, then confirm whether the domain/IP is correct, then confirm rule matching, then confirm policy group selection, and finally confirm whether the outbound protocol succeeds.

Overall Troubleshooting Flow#

1. Whether the core is running
2. Whether traffic enters Link1
3. Whether Link1 knows the correct target
4. Whether rules hit the expected action
5. Whether the policy group selects the expected node
6. Whether the outbound protocol can connect
7. Whether DNS, TUN, HTTP Engine, or other advanced features affect the result

Do not start by changing protocol parameters. Many cases of "node unavailable" are actually caused by the client not entering the proxy, DNS not entering Link1, incorrect rule order, or the policy group currently selecting DIRECT.

Most Common Observation Points in the App#

LocationPurpose
Home statusConfirm whether the core is running, whether the configuration is applied, and whether the real-time rate changes
Connection listView real connections, targets, matched rules, outbound, and errors
Policy group pageView current selection, node latency, and health status
Provider pageView subscription refresh, filtering results, and node count
DNS/Fake-IP informationDetermine whether domains are resolved by Link1
Rule testConstruct a virtual connection to verify rule order and action
Logs pageLocate configuration, DNS, dialing, protocol handshake, and HTTP Engine errors
HTTP captureView captured HTTP requests/responses

1. Whether the Core Is Running#

First confirm in the app:

When running the core directly, you can use:

spark -f config.yaml -t
spark -d . -f config.yaml

If -t passes but startup fails, it is usually an runtime environment issue, such as a port being occupied, no permission to create TUN, missing kernel capabilities on the router, or an incorrect certificate file path.

2. Whether Traffic Enters Link1#

Explicit Proxy#

Verify with a minimal request:

curl -x http://127.0.0.1:7890 https://www.example.com/

Then check whether www.example.com appears in the app connection list.

If it does not appear:

TUN#

Check the app or system network settings:

Router Transparent Proxy#

First verify outbound connectivity on the router itself, then verify from a LAN device. Focus on:

3. Whether Link1 Knows the Correct Target#

In connection details, check:

If the rule is DOMAIN-SUFFIX,example.com,PROXY, but the connection details only show 93.184.216.34:443, the domain rule may not match. Fixes:

4. Whether Rules Match as Expected#

Use the app's rule test to enter the target host, IP, port, network type, inbound type, and source IP, then confirm:

When real connections and rule tests differ, first compare metadata: does the real connection only have an IP? Is the inbound type different? Is the source IP different? Is the port different?

5. Whether the Policy Group Selects the Expected Node#

On the policy group page, confirm:

Common misunderstandings:

SymptomExplanation
Rule points to PROXY but actually uses DIRECTDIRECT is currently selected in the PROXY group
url-test does not select the node you wantIt selects based on the test URL result, not based on the target website
Subscription refresh succeeds but the group is emptyfilter/exclude-filter filtered out the nodes
Node is shown as available but a specific website is slowThe health check URL differs from the target website path and can only represent partial network quality

6. Whether the Outbound Protocol Is Reachable#

Outbound failures usually fall into four categories:

CategoryTypical SymptomsCheckpoints
DNS/network unreachabletimeout, no route, connection refusedWhether server can be resolved and the port is reachable
Authentication failureauth failed, bad password, invalid userWhether the password, UUID, token, and username are correct
TLS/fingerprint failurecertificate, handshake, fingerprint errorssni, servername, skip-cert-verify, client-fingerprint
Protocol parameter mismatchQUIC/TUIC/Hysteria2 handshake failureVersion, ALPN, congestion control, upload/download bandwidth, UDP switch

Troubleshooting order:

  1. Use a minimal configuration with only one node and MATCH.
  1. Select that node directly in the policy group.
  1. Start a simple request.
  1. Check the first protocol-related error in the logs.
  1. Compare against Outbound Protocol Configuration and check required fields.

7. Common DNS Issues#

SymptomCommon CauseFix
Domain rules do not matchDNS does not enter Link1Enable dns.enable, TUN dns-hijack, or explicit proxy domain forwarding
Domestic websites use the proxyIncorrect rule order or GeoData unavailableCheck RULE-SET, GEOIP, and Geo files
Some domains resolve slowlynameserver timeout or too much fallbackShorten the upstream path and split DNS by domain
Fake-IP cannot access intranetIntranet domains are assigned Fake-IPAdd to fake-ip-filter or hosts
IPv6 results are abnormalGlobal ipv6 and dns.ipv6 are inconsistentExplicitly decide whether to enable IPv6

8. Common TUN Issues#

SymptomCommon CauseFix
Network disconnects after enablingDefault route conflict, DNS not taken over, or outbound also captured by TUNCheck auto-route, strict-route, and excluded addresses
Only the browser worksThe browser still uses an explicit proxy, while system traffic does not enter TUNConfirm TUN status and system routes
UDP does not workThe outbound node does not support UDP or the transparent proxy path does not support itCheck node udp and protocol capabilities
LAN access is abnormalPrivate addresses are proxied or affected by Fake-IPAdd private network rules, route exclude, and fake-ip-filter
macOS platform conflictMultiple transparent entry points are enabled at the same timeKeep only one takeover method

9. Common Provider Issues#

SymptomCommon CauseFix
provider has no nodesDownload failed, format is incorrect, or filtering is too strictCheck errors and node count on the Provider page
Subscription has nodes but the group does notproxy-groups.use does not reference the providerCheck group configuration
Selection is lost due to node name changesNode names changed after subscription updateUse a stable provider or manual group
All health checks failTest URL is unreachable or all nodes are unavailableChange the test URL and confirm basic network connectivity
WARP candidates are unavailableAccount/key/endpoint/local UDP issueCheck each item against the WARP provider example

10. Common HTTP Engine Issues#

SymptomCommon CauseFix
No captureCapture is not enabled, host does not match, or traffic does not enter HTTP EngineCheck http-engine.enabled, capture.enabled, and match
Cannot see HTTPS bodyMITM is not enabled or the client does not trust the CAConfigure mitm.hosts and install the CA
Websites cannot open after enablingCertificate is not trusted, rule is fail-closed, or body is too largeNarrow the MITM host scope and change to on-error: fail-open
Rewrite does not take effectmatch conditions do not match or direction is wrongCheck the flow's host/path/method and rule direction
Capture uses too much diskFull body is saved and limits are too largeReduce max-flows and full-body-max-bytes

11. Log Keyword Quick Reference#

KeywordLayerExplanation
compile configConfig compilationYAML field, reference, or composition errors
listen / bindInboundPort in use or permission issues
tun / routeTUNVirtual NIC, routing, or permission issues
dns, resolve, rcode, nameserverDNSDNS upstream, Fake-IP, or routing issues
rule / matchRoutingRule hits or rule-set loading issues
providerProviderSubscription download, file reading, filtering, or health checks
dial / connectOutboundRemote connection failure
handshakeProtocol/TLSAuthentication, certificate, fingerprint, or protocol parameter errors
mitm / capture / rewriteHTTP EngineCertificate, capture, or rewrite rule issues

Plain-English Translations of Common Network Errors#

Error text may vary slightly across platforms, but the meaning is generally the same. During troubleshooting, do not look only at the last error. Consider whether it occurs during DNS, dialing, TLS handshake, or the HTTP Engine stage.

Error/KeywordPlain meaningCommon causesCheck first
connection refusedThe peer received the connection, but nothing is listening on the portWrong port, service not started, firewall actively rejectingserver/port, upstream service status
timeout / i/o timeoutTimed out while connecting, reading, or writingNetwork unreachable, UDP blocked, upstream too slow, DNS stuckDNS resolution result, port reachability, node health
no route to hostThe local machine does not know how to reach the targetIncorrect routing table, TUN/transparent proxy route conflict, gateway unreachableTUN auto-route, excluded routes, default gateway
network is unreachableThe target network is unreachableIPv6 enabled but the local machine has no IPv6, missing routeipv6/dns.ipv6, ip-version
EOFThe peer closed the connection earlyProtocol mismatch, TLS/SNI error, upstream actively closedProtocol type, TLS, SNI, authentication fields
unexpected EOFThe connection closed in the middle of readingIntermediate link dropped, server closed, certificate/protocol failureFirst handshake error, upstream logs
tls: certificateCertificate verification failedSNI mismatch, self-signed certificate, incorrect system timeservername/sni, skip-cert-verify, time
handshake failureProtocol handshake failedPassword/UUID/ALPN/REALITY/obfs mismatchRequired fields and combination tables in the protocol chapter
authentication failed / auth failedAuthentication failedIncorrect username, password, UUID, or tokenWhether credentials were copied completely and whether there are extra spaces
context canceledThe request was canceledUser closed the connection, timeout protection triggered, config switchedWhether it was stopped manually, whether there was a timeout/reload
body exceeds max sizeThe body exceeds the size allowed for rule readingHTTP Engine/JQ/QuickJS body is too largemax-size, body-max-size, whether the body really needs to be read
body is required but unavailableThe rule requires a body, but no readable body is availableStreaming body, no body, wrong directionrequire-body, direction, match conditions
ReferenceErrorQuickJS accessed a variable/object that does not existTypo, or use of unavailable environments such as console/fetch/DOMQuickJS debugging methods

12. Common Issue Handling#

The browser is configured with a proxy but has no traffic#

  1. Confirm that the browser proxy port is mixed-port.
  1. Use curl -x for a minimal verification.
  1. Check whether requests appear in the App connection list.
  1. If not, check system proxy bypass rules and browser proxy extensions.

A domain rule is configured but does not match#

  1. Check whether the target in connection details is a domain or an IP.
  1. If it is an IP, check whether DNS enters Link1.
  1. Enable Fake-IP and DNS hijack under TUN/transparent proxy.
  1. Enable Sniffer as a supplement if necessary.

A policy group has a selected node but still connects directly#

  1. Check the action matched by the actual connection rule.
  1. Confirm whether the action really points to this policy group.
  1. Check whether an earlier DIRECT rule matched first.
  1. Check whether SUB-RULE, AND, or OR changes the flow.

No websites can be opened through a specific node#

  1. Use a minimal configuration that keeps only this node.
  1. Confirm that the server address and port are reachable.
  1. Check required protocol fields.
  1. Check TLS/SNI/fingerprint and certificate verification settings.
  1. If it depends on dialer-proxy, verify that the fronting node works first.

LAN devices cannot use Link1 on a router#

  1. Confirm that the LAN devices' gateway and DNS point to the router.
  1. Confirm that Link1 is listening on an address reachable from the router.
  1. Confirm that firewall/routing rules direct traffic into Link1.
  1. Check whether private addresses are incorrectly proxied.
  1. Test TCP, UDP, and DNS separately.

13. What to Provide When Reporting an Issue#

Recommended information:

Do not publicly disclose subscription URLs, node passwords, WireGuard private keys, enterprise VPN credentials, HTTP Capture bodies, or full certificate private keys.