Frequently Asked Questions
Here we have some common questions people ask. If you have any questions not listed here, feel free to open an issue (opens in a new tab).
[[toc]]
What is the difference between amd64 and amd64-v3?
Quoting from golang/go (opens in a new tab):
Until Go 1.17, the Go compiler always generated x86 binaries that could be executed by any 64-bit x86 processor.
Go 1.18 introduced 4 architectural levels (opens in a new tab) for AMD64. Each level differs in the set of x86 instructions that the compiler can include in the generated binaries:
- GOAMD64=v1 (default): The baseline. Exclusively generates instructions that all 64-bit x86 processors can execute.
- GOAMD64=v2: all v1 instructions, plus CMPXCHG16B, LAHF, SAHF, POPCNT, SSE3, SSE4.1, SSE4.2, SSSE3.
- GOAMD64=v3: all v2 instructions, plus AVX, AVX2, BMI1, BMI2, F16C, FMA, LZCNT, MOVBE, OSXSAVE.
- GOAMD64=v4: all v3 instructions, plus AVX512F, AVX512BW, AVX512CD, AVX512DQ, AVX512VL.
Setting, for example, GOAMD64=v3, will allow the Go compiler to use AVX2 instructions in the generated binaries (which may improve performance in some cases); but these binaries will not run on older x86 processors that don't support AVX2.
The Go toolchain may also generate newer instructions, but guarded by dynamic checks to ensure they're only executed on capable processors. For example, with GOAMD64=v1, math/bits.OnesCount (opens in a new tab) will still use the POPCNT (opens in a new tab) instruction if CPUID (opens in a new tab) reports that it's available. Otherwise, it falls back to a generic implementation.
The Go toolchain does not currently generate any AVX512 instructions.
Note that processor is a simplification in this context. In practice, support from the entire system (firmware, hypervisor, kernel) is needed.
Which release should I use for my system?
Here are some common systems that people use ClashT on, and the recommended release for each of them:
- NETGEAR WNDR3700v2: mips-hardfloat #846 (opens in a new tab)
- NETGEAR WNDR3800: mips-softfloat #579 (opens in a new tab)
- ASUS RT-AC5300: armv5 #2356 (opens in a new tab)
- MediaTek MT7620A, MT7621A: mipsle-softfloat (#136 (opens in a new tab))
- mips_24kc: #192 (opens in a new tab)
If your device is not listed here, you can check the CPU architecture of your device with uname -m
and find the corresponding release in the release page.
List of wontfix
The official ClashT core project will not implement/fix these things:
- Snell (opens in a new tab)
- Custom CA (opens in a new tab)
- VMess Mux (opens in a new tab)
- VLess (opens in a new tab)
- KCP (opens in a new tab)
- mKCP (opens in a new tab)
- TLS Encrypted Client Hello (opens in a new tab)
- TCP support for ClashT DNS server (opens in a new tab)
- MITM (opens in a new tab)
The following will be considered implementing when the official Go QUIC library releases.
Proxies work on my local machine, but not on my router or in a container
Your system might be out of sync in time. Refer to your platform documentations about time synchronisation - things will break if time is not in sync.
Time complexity of rule matching
Refer to this discussion: #422 (opens in a new tab)
ClashT Premium unable to access Internet
You can refer to these relevant discussions:
error: unsupported rule type RULE-SET
If you stumbled on this error message:
FATA[0000] Parse config error: Rules[0] [RULE-SET,apple,REJECT] error: unsupported rule type RULE-SET
You're using ClashT open-source edition. Rule Providers is currently only available in the Premium core (opens in a new tab). (it's free)
DNS Hijack does not work
Since tun.auto-route
does not intercept LAN traffic, if your system DNS is set to servers in private subnets, DNS hijack will not work. You can either:
- Use a non-private DNS server as your system DNS like
1.1.1.1
- Or manually set up your system DNS to the ClashT DNS (by default,
198.18.0.1
)