Clash meta dns only configs
A minimal Clash.Meta template focused solely on DNS resolution. This template is ideal for users who want fast, reliable DNS handling without routing full traffic through proxies. Perfect for circumventing local DNS hijacking, enhancing privacy, or simply testing DNS features.
- DNS-Only Mode: The configuration only handles DNS queries and doesn’t route general internet traffic.
- Enhanced DNS: Supports
fake-ipandredir-hostmodes to bypass DNS-based blocking. - Custom Nameservers: Easily switch to trusted DNS servers (Cloudflare, Google, Quad9, or regional).
- NTP Support: Optional NTP synchronization for timestamp-sensitive domains.
- Lightweight: Minimal resource usage.
port: 7890
socks-port: 7891
mixed-port: 7892
allow-lan: true
mode: rule
log-level: info
external-controller: 127.0.0.1:9090
dns:
enable: true
listen: 0.0.0.0:7874
default-nameserver:
- 1.1.1.1
- 8.8.8.8
enhanced-mode: fake-ip
nameserver:
- 1.1.1.1
- 8.8.8.8
- 9.9.9.9
fallback:
- 8.8.4.4
- 1.0.0.1
ntp:
enable: true
server: time.apple.com
port: 123
interval: 30-
Download the template and save it as
config.yaml. -
Edit DNS servers if necessary to match your preferred providers.
-
Start Clash.Meta with the configuration:
clash-meta -f config.yaml
-
Verify DNS resolution using tools like
nslookupordig.
In Clash / Clash.Meta YAML configs, the DNS section can define multiple types of upstream resolvers. Each serves a different role in the DNS workflow:
-
Used for bootstrapping DNS before Clash’s own DNS is ready.
-
Typically set to public, reliable IP-based resolvers (not domain names, because Clash hasn’t resolved anything yet).
-
Example:
default-nameserver: - 1.1.1.1 - 8.8.8.8
-
Purpose: resolve domain names of your configured
nameserver(especially if those are DoH/DoT endpoints). -
SHOULD BE ONLY PURE IP (IPV4/IPV6)
-
The main resolvers Clash uses to resolve domains.
-
You can mix plain DNS, DoH, DoT.
-
Example:
nameserver: - https://dns.google/dns-query - tls://1.1.1.1:853
-
Clash uses these to resolve most queries, depending on rules and fake-IP setup.
-
Used only when traffic is DIRECT (bypasses proxy).
-
Ensures local/IR domains resolve correctly without being forced through foreign resolvers.
-
Example:
direct-nameserver: - 178.22.122.100 # Shecan (Iran DNS) - 185.51.200.2
-
Purpose: avoid DNS poisoning/hijacking when accessing local sites directly.
-
Used when queries for proxy servers themselves need resolution.
-
Example: if your proxy node’s hostname (
hk.example.com) needs resolving, Clash uses this. -
Example:
proxy-server-nameserver: - 8.8.8.8 - 1.1.1.1
-
Keeps node resolution separate from normal traffic, so proxies can still be reached if normal DNS is blocked.
✅ Summary table:
| Field | Purpose |
|---|---|
default-nameserver |
Bootstrap resolver to reach your DoH/DoT servers |
nameserver |
Main resolvers for general queries |
direct-nameserver |
Used for DIRECT connections only |
proxy-server-nameserver |
Used for resolving proxy server hostnames |
| Provider | IPv4 | Notes |
|---|---|---|
| Cloudflare | 1.1.1.1 | Fast, privacy-focused |
| 8.8.8.8 | Widely available | |
| Quad9 | 9.9.9.9 | Security-focused, blocks malware |
| AdGuard | 94.140.14.14 | Blocks ads and trackers |
- This template does not route web traffic; only DNS queries are handled.
- If you want to combine this with full proxy routing, use
mode: ruleand add proxy groups. enhanced-mode: fake-ipis recommended in regions with DNS hijacking, as it provides more reliable domain resolution.
If you have better DNS servers, fallback strategies, or improvements to the configuration, feel free to submit a pull request.
nameserver:
- 1.1.1.1
- 1.0.0.1
- 2606:4700:4700::1111
- 2606:4700:4700::1001
- https://1.1.1.1/dns-query
- https://security.cloudflare-dns.com/dns-query
- tls://one.one.one.one
- one.one.one.one
- tls://security.cloudflare-dns.com
nameserver:
- 8.8.8.8
- 8.8.4.4
- 2001:4860:4860::8888
- 2001:4860:4860::8844
- https://dns.google.com/resolve
- https://dns.google/dns-query
- tls://dns.google
- dns.google
- tls://dns.google
nameserver:
- 9.9.9.9
- 149.112.112.112
- 2620:fe::fe
- 2620:fe::9
- https://dns.quad9.net/dns-query
- https://dns.quad9.net/dns-query
- tls://dns.quad9.net
- dns.quad9.net
- tls://dns.quad9.net
nameserver:
- 185.228.168.9
- 185.228.169.9
- 2a0d:2a00:1::1
- 2a0d:2a00:2::2
- https://doh.cleanbrowsing.org/doh/family-filter/
- https://doh.cleanbrowsing.org/doh/security-filter/
- tls://dns.cleanbrowsing.org
- dns.cleanbrowsing.org
- tls://dns.cleanbrowsing.org
nameserver:
- 94.140.14.14
- 94.140.15.15
- 2a10:50c0::ad1:ff
- 2a10:50c0::ad2:ff
- https://dns.adguard-dns.com/dns-query
- https://dns.adguard-dns.com/dns-query
- tls://dns.adguard-dns.com
- dns.adguard-dns.com
- tls://dns.adguard-dns.com
In Clash.Meta, the nameserver-policy (sometimes called dns-policy in older configs) controls how DNS queries are routed to your configured nameservers. It’s useful when you have multiple DNS servers and want to specify which queries go to which server.
Here’s a breakdown:
Example:
dns:
enable: true
listen: 0.0.0.0:7874
enhanced-mode: fake-ip
nameserver:
- 1.1.1.1
- 8.8.8.8This just sets the DNS servers Clash will use. But all queries are sent to these servers in order, without policy control.
You can define policies for specific domains. Syntax:
dns:
enable: true
listen: 0.0.0.0:7874
enhanced-mode: fake-ip
nameserver:
- 1.1.1.1
- 8.8.8.8
default-nameserver-policy: all
nameserver-policy:
- domain: "geosite:cn"
server:
- 223.5.5.5
- 223.6.6.6
- domain: "geosite:private"
server:
- 127.0.0.1Explanation:
| Field | Meaning |
|---|---|
default-nameserver-policy |
Which server(s) are used if no policy matches (all, random, round-robin) |
nameserver-policy |
List of domain-based rules mapping queries to specific DNS servers |
domain |
Can be an exact domain, suffix, or geosite category (requires geosite.dat) |
server |
DNS server(s) to use for that domain |
Split DNS:
- Chinese domains → China DNS
- Foreign domains → Public DNS
dns:
enable: true
enhanced-mode: fake-ip
nameserver:
- 1.1.1.1
- 8.8.8.8
default-nameserver-policy: all
nameserver-policy:
- domain: "geosite:cn"
server:
- 223.5.5.5
- 223.6.6.6Here, queries to geosite:cn (China sites) go to AliDNS, others go to Cloudflare/Google.
-
Order matters: Clash checks
nameserver-policyfirst, then falls back todefault-nameserver-policy. -
Enhanced-mode options:
fake-ip→ resolves domains to fake IPs for routing through proxiesredir-host→ normal host-based resolution
-
Works with rule providers: You can reference geosite categories for policy-based routing.
Here’s a Clash.Meta DNS config optimized for Iran, using nameserver-policy to avoid DNS hijacking while maintaining fast resolution:
dns:
enable: true
listen: 0.0.0.0:7874
ipv6: false
default-nameserver-policy: all
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16 # standard fake IP range
nameserver:
# Public, secure DNS for foreign sites
- 1.1.1.1 # Cloudflare
- 1.0.0.1
- 8.8.8.8 # Google
- 8.8.4.4
- https://cloudflare-dns.com/dns-query # Cloudflare DoH
- https://dns.google/dns-query # Google DoH
- tls://1.1.1.1 # Cloudflare DoT
- tls://8.8.8.8 # Google DoT
nameserver-policy:
# Iran domains go to local/ISP DNS to prevent hijacking
- domain: "geosite:ir"
server:
- 2.188.21.140 # local Iranian DNS (Fars, etc.)
- 37.10.67.10
# Private networks go to local resolver
- domain: "geosite:private"
server:
- 127.0.0.1
# Optional: Chinese domains to AliDNS
- domain: "geosite:cn"
server:
- 223.5.5.5
- 223.6.6.6fake-ip-rangeensures Clash can route connections through proxies even for foreign domains.default-nameserver-policy: all→ all other domains not matched innameserver-policywill use the public DNS servers.nameserver-policyprevents hijacking of.irdomains by routing them to trusted local DNS servers.- Private networks (
geosite:private) use127.0.0.1if you have a local resolver.
dns:
enable: true
listen: 0.0.0.0:7874
ipv6: false
default-nameserver-policy: all
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
query-url-ttl: 600 # optional: cache TTL for faster responses
fallback:
- https://cloudflare-dns.com/dns-query
- https://dns.google/dns-query
- tls://1.1.1.1
- tls://8.8.8.8
# Primary nameservers for different regions
nameserver:
# Foreign/Public domains
- https://cloudflare-dns.com/dns-query
- https://dns.google/dns-query
- tls://1.1.1.1
- tls://8.8.8.8
- tls://9.9.9.9 # Quad9 DoT
- tls://149.112.112.112
nameserver-policy:
# Iranian domains → local DNS (avoid hijacking)
- domain: "geosite:ir"
server:
- 37.10.67.10
- 2.188.21.140
# Private/local networks
- domain: "geosite:private"
server:
- 127.0.0.1
# Chinese domains → AliDNS
- domain: "geosite:cn"
server:
- 223.5.5.5
- 223.6.6.6
- 180.76.76.76
# Optional: fallback for general regional categories
- domain: "geosite:asia"
server:
- 1.1.1.1
- 8.8.8.8This document explains what each configuration key does in a typical Clash/Clash.Meta configuration.
| Key | Default / Example | Description |
|---|---|---|
port |
7890 |
The main HTTP proxy port. Applications can connect here using HTTP/HTTPS proxy. |
socks-port |
7891 |
The SOCKS5 proxy port for applications that support SOCKS. |
mixed-port |
7892 |
A hybrid port that accepts both HTTP and SOCKS connections. Useful for apps with unknown proxy type. |
allow-lan |
true |
Whether devices on the local network (LAN) can connect to your proxy. |
mode |
rule |
Determines how traffic is handled: - direct: bypass proxy - global: all traffic through proxy - rule: use rules to decide per domain/IP |
log-level |
info |
Sets logging verbosity: - info: normal logs - warning, error, debug available for troubleshooting |
external-controller |
127.0.0.1:9090 |
API/GUI controller endpoint. Allows external tools (like Clash Dashboard) to interact with Clash. |
DNS is crucial for domain resolution, filtering, and preventing ISP hijacking.
| Key | Example | Description |
|---|---|---|
enable |
true |
Turns DNS service on or off. |
listen |
0.0.0.0:7874 |
IP and port where the DNS service listens. 0.0.0.0 allows all interfaces. |
ipv6 |
false |
Whether to enable IPv6 resolution. |
enhanced-mode |
fake-ip |
Resolves certain domains to "fake" IPs so they can be proxied without DNS leaks. Options: redir-host, fake-ip. |
fake-ip-range |
198.18.0.1/16 |
IP range used for fake-IP resolution. Standard private testing range. |
query-url-ttl |
600 |
Optional: cache time for DNS queries in seconds. Improves performance. |
default-nameserver |
1.1.1.1, 8.8.8.8 |
The DNS servers used when no nameserver-policy matches. |
nameserver |
multiple | List of DNS servers for general resolution, can include: - Plain IP (UDP/TCP) - https:// (DoH) - tls:// (DoT) |
fallback |
multiple | DNS servers used if primary servers fail. Supports DoH/DoT. |
default-nameserver-policy |
all |
Which domains use the default-nameserver. Usually all. |
nameserver-policy |
structured list | Domain-specific DNS overrides. Example: - "geosite:ir" → local Iranian DNS to prevent hijacking - "geosite:cn" → AliDNS for Chinese domains - "geosite:private" → 127.0.0.1 for local/private networks |
geosite:*domains are groups of domains categorized by region or type. Useful for selective DNS routing.- DNS policies ensure sensitive or regional domains are resolved by trusted servers to prevent interference or hijacking.
| Key | Example | Description |
|---|---|---|
enable |
true |
Enables NTP client to synchronize system clock via Clash. |
server |
time.apple.com |
NTP server to query time from. |
port |
123 |
Standard NTP port. |
interval |
30 |
Interval (in seconds) for time synchronization. |
NTP ensures accurate system time, which is critical for SSL/TLS verification, certificate validation, and some proxy behaviors.
This configuration allows Clash/Clash.Meta to:
- Handle HTTP/SOCKS traffic with multiple ports and rules.
- Provide advanced DNS features: fake-IP, DoH/DoT, fallback, and domain-specific policies.
- Synchronize time using NTP for secure connections.