Skip to content

DNS:名字、假地址与来源策略 ​

DNS 场景的核心是把“谁在问、问什么、应该由哪个上游或本地事实回答”拆成可组合规则。dns.servers 定义命名服务器,dns.rules 按顺序决定路由、拒绝或直接回答。

完整配置 ​

yaml
networks:
  lab:
    id: 10
    address: [10.20.0.1/24]
    capture: true

inbounds:
  router:
    type: capture
    wan: [eth0]

outbounds:
  direct:
    type: direct

route:
  final: direct

dns:
  servers:
    real: {type: udp, address: 1.1.1.1:53}
    fake: {type: fakeip, inet4_range: 198.18.0.0/15}
    local: {type: hosts, hosts: {nas.lab.internal: 10.20.0.10}}
  rules:
    - {source_network: [lab], domain_suffix: [lab.internal], server: local}
    - {source_network: [lab], query_type: [A, AAAA], server: fake}
    - {query_type: AAAA, action: reject}
  final: real

完整字段见 DNS 总览、DNS 规则 和 FakeIP。

查询怎么走 ​

  1. 来源网段/租户和问题名写入 DNS Facts。
  2. 规则按顺序匹配;server 路由到指定上游,reject/predefined 可以当场回答。
  3. evaluate 保存响应供后续规则用 match_response 检查,respond 再返回。
  4. FakeIP 把名字映射为假地址;连接回到 mayami 后按映射恢复真实名字。

实践 ​

  • 客户端指定公共 DNS(例如 8.8.8.8:53)时,在路由规则里加 action: hijack-dns,交给同一 DNS 引擎。
  • 网段写了 domain 时,活租约、正向名和反向名优先由网段自己的权威答案处理。
  • source_network、source_tenant 在配置编译时换成持久号;改名字或 YAML 顺序不会串租户。
  • DNS 规则不提供进程、用户、MAC、主机名、DSCP 和 IN-PORT 事实。

相关 ​

页面历史

开发者设计、代码地图和验证记录保留在仓库 manual/。