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 Facts。
- 规则按顺序匹配;
server路由到指定上游,reject/predefined可以当场回答。 evaluate保存响应供后续规则用match_response检查,respond再返回。- FakeIP 把名字映射为假地址;连接回到 mayami 后按映射恢复真实名字。
实践
- 客户端指定公共 DNS(例如
8.8.8.8:53)时,在路由规则里加action: hijack-dns,交给同一 DNS 引擎。 - 网段写了
domain时,活租约、正向名和反向名优先由网段自己的权威答案处理。 source_network、source_tenant在配置编译时换成持久号;改名字或 YAML 顺序不会串租户。- DNS 规则不提供进程、用户、MAC、主机名、DSCP 和 IN-PORT 事实。