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

实际影响:

DNS server 写法#

Link1 支持以下 DNS 上游写法:

写法协议示例说明
1.1.1.1UDP1.1.1.1无 scheme 时按 UDP DNS
udp://host:53UDPudp://8.8.8.8:53显式 UDP
tcp://host:53TCPtcp://8.8.8.8:53TCP DNS
tls://host:853DoTtls://1.1.1.1:853DNS over TLS
quic://host:853DoQquic://dns.adguard-dns.com:853DNS over QUIC
https://host/dns-queryDoHhttps://dns.google/dns-queryDNS over HTTPS
http://host/dns-queryHTTP DNShttp://127.0.0.1:8053/dns-query明文 HTTP DNS
system://系统 DNSsystem://使用系统解析器
dhcp://ifaceDHCP DNSdhcp://eth0从指定网卡 DHCP 获取 DNS
rcode://name固定 RCodercode://refused用于测试或阻断
openvpn://nameOpenVPN 动态 DNSopenvpn://ovpn-node使用 OpenVPN 出口提供的 DNS
tailscale://name / ts://nameTailscale MagicDNSts://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-h3DoH 优先尝试 HTTP/3影响 https:// DNS 上游传输
listenDNS 服务监听地址供系统、路由器或 TUN hijack 查询
ipv6DNS 是否返回 IPv6还受顶层 ipv6 限制
ipv6-timeoutIPv6 查询等待时间,毫秒双栈解析时影响等待时长
enhanced-modenormalfake-ipFake-IP 模式可提高域名规则命中
fake-ip-rangeIPv4 Fake-IP 池默认 198.18.0.1/16
fake-ip-range6IPv6 Fake-IP 池用于 IPv6 Fake-IP
fake-ip-filter不分配 Fake-IP 的域名内网、连通性检测域名常放这里
fake-ip-filter-modefilter 模式通常用 blacklist
fake-ip-ttlFake-IP DNS TTL影响客户端缓存时间
cache-algorithmDNS 缓存算法影响缓存淘汰策略
cache-max-sizeDNS 缓存上限过小会增加查询,过大占内存
default-nameserver解析 DNS 上游自身域名的 DNS解决 DoH/DoT 上游域名 bootstrap
nameserver默认 DNS 上游普通域名解析使用
fallback备用 DNS 上游配合 fallback-filter 使用
fallback-filterfallback 使用条件按 GeoIP/GeoSite/domain/ipcidr 判断
proxy-server-nameserver解析代理服务器域名的 DNS避免代理服务器域名受普通分流影响
proxy-server-nameserver-policy代理服务器 DNS 分流策略对代理服务器域名单独指定 DNS
direct-nameserver直连场景 DNS用于 direct 路径解析
direct-nameserver-follow-policydirect DNS 是否跟随 policy影响直连域名是否仍按 policy 分流 DNS
respect-rulesDNS 是否尊重路由规则让 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
  -> 域名规则可以命中

适合:

不适合或需要过滤:

示例:

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://

实际影响:

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

实际影响:

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

字段影响:

字段含义
typefilehttp
path本地文件或缓存路径
urlHTTP 下载地址
interval刷新间隔,秒
dialer-proxy / proxy下载时使用的出口
headerHTTP 请求头
size-limit下载大小限制

DNS 与规则的关系#

域名规则依赖域名上下文,IP 规则依赖 IP 上下文。TUN/透明代理下推荐:

dns:
  enable: true
  enhanced-mode: fake-ip

tun:
  enable: true
  dns-hijack:
    - any:53

sniffer:
  enable: true

这样能让规则引擎尽可能同时拿到域名和 IP。