6. DNS 与 hosts#
DNS 是透明代理和 TUN 的核心。很多“规则不生效”本质上是 Link1 没拿到域名。
DNS 最小配置#
dns:
enable: true
listen: 127.0.0.1:1053
ipv6: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- https://223.5.5.5/dns-query
- tls://223.5.5.5:853
实际影响:
enable=true才会启用 Link1 DNS resolver。
listen开启本地 DNS 服务,供系统或路由器转发查询。
enhanced-mode=fake-ip能提高透明代理下域名规则命中率。
nameserver是默认上游 DNS。
DNS server 写法#
Link1 支持以下 DNS 上游写法:
| 写法 | 协议 | 示例 | 说明 |
|---|---|---|---|
1.1.1.1 | UDP | 1.1.1.1 | 无 scheme 时按 UDP DNS |
udp://host:53 | UDP | udp://8.8.8.8:53 | 显式 UDP |
tcp://host:53 | TCP | tcp://8.8.8.8:53 | TCP DNS |
tls://host:853 | DoT | tls://1.1.1.1:853 | DNS over TLS |
quic://host:853 | DoQ | quic://dns.adguard-dns.com:853 | DNS over QUIC |
https://host/dns-query | DoH | https://dns.google/dns-query | DNS over HTTPS |
http://host/dns-query | HTTP DNS | http://127.0.0.1:8053/dns-query | 明文 HTTP DNS |
system:// | 系统 DNS | system:// | 使用系统解析器 |
dhcp://iface | DHCP DNS | dhcp://eth0 | 从指定网卡 DHCP 获取 DNS |
rcode://name | 固定 RCode | rcode://refused | 用于测试或阻断 |
openvpn://name | OpenVPN 动态 DNS | openvpn://ovpn-node | 使用 OpenVPN 出口提供的 DNS |
tailscale://name / ts://name | Tailscale MagicDNS | ts://tailnet | 使用 Tailscale 出口的 MagicDNS / tailnet DNS |
DoH 可以通过 URL fragment 指定 HTTP/3:
nameserver:
- https://dns.google/dns-query#h3=true
也可以用 fragment 选择路由出口:
nameserver:
- https://dns.google/dns-query#PROXY
DNS 字段说明#
| 字段 | 含义 | 实际影响 |
|---|---|---|
enable | 启用 DNS 模块 | 关闭时 DNS/Fake-IP 不工作 |
prefer-h3 | DoH 优先尝试 HTTP/3 | 影响 https:// DNS 上游传输 |
listen | DNS 服务监听地址 | 供系统、路由器或 TUN hijack 查询 |
ipv6 | DNS 是否返回 IPv6 | 还受顶层 ipv6 限制 |
ipv6-timeout | IPv6 查询等待时间,毫秒 | 双栈解析时影响等待时长 |
enhanced-mode | normal 或 fake-ip | Fake-IP 模式可提高域名规则命中 |
fake-ip-range | IPv4 Fake-IP 池 | 默认 198.18.0.1/16 |
fake-ip-range6 | IPv6 Fake-IP 池 | 用于 IPv6 Fake-IP |
fake-ip-filter | 不分配 Fake-IP 的域名 | 内网、连通性检测域名常放这里 |
fake-ip-filter-mode | filter 模式 | 通常用 blacklist |
fake-ip-ttl | Fake-IP DNS TTL | 影响客户端缓存时间 |
cache-algorithm | DNS 缓存算法 | 影响缓存淘汰策略 |
cache-max-size | DNS 缓存上限 | 过小会增加查询,过大占内存 |
default-nameserver | 解析 DNS 上游自身域名的 DNS | 解决 DoH/DoT 上游域名 bootstrap |
nameserver | 默认 DNS 上游 | 普通域名解析使用 |
fallback | 备用 DNS 上游 | 配合 fallback-filter 使用 |
fallback-filter | fallback 使用条件 | 按 GeoIP/GeoSite/domain/ipcidr 判断 |
proxy-server-nameserver | 解析代理服务器域名的 DNS | 避免代理服务器域名受普通分流影响 |
proxy-server-nameserver-policy | 代理服务器 DNS 分流策略 | 对代理服务器域名单独指定 DNS |
direct-nameserver | 直连场景 DNS | 用于 direct 路径解析 |
direct-nameserver-follow-policy | direct DNS 是否跟随 policy | 影响直连域名是否仍按 policy 分流 DNS |
respect-rules | DNS 是否尊重路由规则 | 让 DNS 查询选择更贴近最终出口 |
use-hosts | 使用配置里的 hosts | 静态域名覆盖生效 |
use-system-hosts | 使用系统 hosts 文件 | /etc/hosts 或平台 hosts 生效 |
nameserver-policy | 按域名/规则集指定 DNS | 实现 DNS 分流 |
Fake-IP#
Fake-IP 的工作方式:
客户端查询 api.example.com
-> Link1 返回 198.18.0.10
客户端连接 198.18.0.10:443
-> Link1 反查:198.18.0.10 属于 api.example.com
-> 域名规则可以命中
适合:
- TUN。
- 透明代理。
- 路由器网关模式。
不适合或需要过滤:
- 某些局域网设备连通性检测域名。
- 依赖真实 IP 的服务发现。
- 内网域名。
示例:
dns:
enhanced-mode: fake-ip
fake-ip-filter:
- '*.lan'
- '+.local'
- 'dns.msftnsci.com'
nameserver-policy#
按域名指定不同 DNS:
dns:
nameserver:
- https://dns.google/dns-query
nameserver-policy:
'+.corp.example.com':
- openvpn://corp-vpn
'+.tailnet.ts.net':
- ts://tailnet
'geosite:cn':
- https://223.5.5.5/dns-query
'rule-set:private':
- system://
实际影响:
- 企业域名可走企业 VPN DNS。
- Tailnet 域名可走 Tailscale MagicDNS;
tailscale://name和ts://name等价。
- 国内域名可走国内 DNS。
- 特定规则集可使用专用 DNS。
- policy key 支持逗号拆分,例如
geosite:cn,private。
fallback-filter#
dns:
fallback:
- https://1.1.1.1/dns-query
fallback-filter:
geoip: true
geoip-code: CN
geosite:
- geolocation-!cn
domain:
- '+.google.com'
ipcidr:
- 240.0.0.0/4
含义:当默认 DNS 返回结果不符合预期时,使用 fallback 结果。常见用途是减少 DNS 污染影响。
字段影响:
| 字段 | 含义 |
|---|---|
geoip | 按 GeoIP 判断是否使用 fallback |
geoip-code | 期望国家/区域代码 |
geosite | 按 GeoSite 分类触发 fallback |
domain | 按域名模式触发 fallback |
ipcidr | 按返回 IP CIDR 触发 fallback |
hosts#
静态 hosts:
hosts:
router.lan: 192.168.9.1
api.local:
- 10.0.0.10
- 10.0.0.11
实际影响:
- 优先于上游 DNS。
- 适合内网服务、测试域名、固定映射。
- 如果
dns.use-hosts=false,配置里的hosts不生效。
hosts-providers#
从外部文件或 URL 加载 hosts:
hosts-providers:
intranet:
type: file
path: ./hosts/intranet.hosts
remote-hosts:
type: http
url: https://example.com/hosts.txt
path: ./hosts/remote.hosts
interval: 3600
proxy: DIRECT
字段影响:
| 字段 | 含义 |
|---|---|
type | file 或 http |
path | 本地文件或缓存路径 |
url | HTTP 下载地址 |
interval | 刷新间隔,秒 |
dialer-proxy / proxy | 下载时使用的出口 |
header | HTTP 请求头 |
size-limit | 下载大小限制 |
DNS 与规则的关系#
域名规则依赖域名上下文,IP 规则依赖 IP 上下文。TUN/透明代理下推荐:
dns:
enable: true
enhanced-mode: fake-ip
tun:
enable: true
dns-hijack:
- any:53
sniffer:
enable: true
这样能让规则引擎尽可能同时拿到域名和 IP。