Introduction · Clash documentation

Common questions

Review common Clash core questions about GOAMD64 architecture, router and container node failures, rule-matching complexity, Premium connectivity, RULE-SET errors, and DNS hijacking.

  • GOAMD64
  • RULE-SET
  • Premium core
  • DNS hijacking
  • tun.auto-route
Introduction

Here are some common questions. If yours is not listed, feel free to open an issue.

What is the difference between amd64 and amd64-v3?

Quoted from golang/go:

Before Go 1.17, the Go compiler always generated x86 binaries that could run on any 64-bit x86 processor.

Go 1.18 introduced 4 architecture levels for AMD64. Each level defines a different set of x86 instructions that the compiler may include in the generated binary:

  • GOAMD64=v1 (default): baseline. Generates only instructions that all 64-bit x86 processors can execute.
  • GOAMD64=v2: all v1 instructions, plus CMPXCHG16B, LAHF, SAHF, POPCNT, SSE3, SSE4.1, SSE4.2, and SSSE3.
  • GOAMD64=v3: all v2 instructions, plus AVX, AVX2, BMI1, BMI2, F16C, FMA, LZCNT, MOVBE, and OSXSAVE.
  • GOAMD64=v4: all v3 instructions, plus AVX512F, AVX512BW, AVX512CD, AVX512DQ, and AVX512VL.

For example, setting GOAMD64=v3 allows the Go compiler to use AVX2 instructions in the generated binary, which may improve performance in some cases. However, such binaries cannot run on older x86 processors without AVX2 support.

The Go toolchain may also generate newer instructions guarded by runtime checks, so they run only on capable processors. For example, with GOAMD64=v1, if CPUID reports that the POPCNT instruction is available, math/bits.OnesCount will still use it; otherwise, it falls back to a generic implementation.

The Go toolchain currently does not generate any AVX512 instructions.

Focusing only on the processor is a simplification here. In practice, the entire system—firmware, hypervisor, and kernel—must provide support.

Which build should I use for my system?

Here are several systems commonly used with Clash and the recommended build for each:

  • NETGEAR WNDR3700v2: mips-hardfloat #846
  • NETGEAR WNDR3800: mips-softfloat #579
  • ASUS RT-AC5300: armv5 #2356
  • MediaTek MT7620A and MT7621A: mipsle-softfloat (#136)
  • mips_24kc: #192

If your device is not listed here, use uname -m to check its CPU architecture, then find the corresponding build on the release page.

Issues that will not be fixed

The official Clash core project will not implement or fix the following:

The following may be considered when the official Go QUIC library is released:

A node works on the local machine but not on a router or in a container

Your system clock may not be synchronized. Consult your platform's time-synchronization documentation; some protocols may not work correctly when the clock is out of sync.

Time complexity of rule matching

See this discussion: #422

Clash Premium cannot access the Internet

See these related discussions:

Error: unsupported RULE-SET rule type

If you encounter this error message:

txt
FATA[0000] Parse config error: Rules[0] [RULE-SET,apple,REJECT] error: unsupported rule type RULE-SET

You are using the open-source edition of Clash. Rule Providers are currently available only in Premium core.

DNS hijacking does not work

Because tun.auto-route does not intercept LAN traffic, DNS hijacking will not work if your system DNS points to a server on a private subnet. You can:

  1. Use a non-private DNS server as the system DNS, such as 1.1.1.1
  2. Or manually set the system DNS to Clash DNS (the default is 198.18.0.1)