Skip to content
 
 

Latest commit

 

History

106 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mosproxy

一个 DNS 转发/代理软件。

wiki: https://irine-sistiana.gitbook.io/mosproxy-wiki/

V2Ray dat 规则与热重载

支持 Loyalsoldier/v2ray-rules-dat 等使用 V2Ray protobuf 格式的本地 geosite.dat 和 geoip.dat 文件。 先将文件下载到本机,再在 router 配置中引用:

servers:
  - tag: local
    protocol: udp
    listen: 127.0.0.1:5353

upstreams:
  - tag: domestic
    addr: udp://223.5.5.5:53
  - tag: default
    addr: udp://1.1.1.1:53

domain_sets:
  - tag: cn
    geosite:
      - file: /etc/mosproxy/geosite.dat
        codes: [cn, "google@cn"]
  - tag: ads
    geosite:
      - file: /etc/mosproxy/geosite.dat
        codes: [category-ads-all]

rules:
  - domain: ads
    reject: 3 # NXDOMAIN
  - domain: cn
    forward: domestic
  - forward: default

# 秒。配置 dat 后,0(默认)表示每 30 秒检查一次。
# 正数:指定间隔,并检查所有已注册的规则文件;-1:关闭自动检查。
reload_interval: 30

# 可选:仅监听可信的本机地址,接口没有身份验证。
api:
  addr: 127.0.0.1:8080

domain_sets[].files 仍支持原有文本规则,可与 geosite 同时使用; 多个文件、多个 codes 取并集。分类名不区分大小写,支持 分类@属性、分类@!属性,多个 @属性 表示同时满足;属性按是否存在筛选。 支持完整域名、根域名(包括子域名)、关键字和正则四种规则。 文件路径与原有 files 一致,相对路径以进程工作目录为基准。

geoip.dat 可用于 ECS 区域标记(不是 DNS 应答 IP 分流):

ecs:
  enabled: true
  geoip:
    - file: /etc/mosproxy/geoip.dat
      codes: [cn, us]

ECS 区域名为小写分类名,可供原有 zone_overwrite 使用。 同一 GeoIP 数据源中选择的 CIDR 不能重叠,否则加载失败; 不要把国家分类和包含这些网段的运营商分类混在同一数据源中。 不支持将 inverse_match 分类用作 ECS 区域。 原有 ecs.ip_zone 文本文件仍受支持,优先于 geoip 数据源匹配。

自动检查读取文件内容并比较 SHA-256,因此支持同名替换、符号链接目标变化, 以及保留时间戳的更新。所有数据加载成功后才提交;任一文件读取或解析失败时, 继续使用上次成功加载的数据并记录错误,下次检查会重试。 查询无需等待解析完成,各文件通过原子指针切换;多个文件不保证在同一查询时刻同时切换。 未配置 dat 且 reload_interval 为 0 时,保持原有手动重载行为。 也可以随时调用原有接口立即重载:

curl --fail http://127.0.0.1:8080/ctl/reload

mosproxy 不自动从远程下载更新。外部定时任务下载完成并校验后, 应在同一目录用 mv 原子替换正式文件,避免读到下载中的不完整内容:

cd /etc/mosproxy
curl --fail --location --output geosite.dat.new \
  https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat && \
  mv geosite.dat.new geosite.dat

热重载更新规则数据,不重读 YAML 配置。分类、路径、间隔等配置变更仍需重启。 已在处理的请求可以使用旧规则;DNS 缓存遵循现有缓存策略,不会因重载自动清空。

开发验证:go test ./... 与 go test -race ./app/router ./internal/geodata。 如需验证真实文件,将 geosite.dat、geoip.dat 分别保存为 mosproxy-geosite.dat、mosproxy-geoip.dat,然后运行 MOSPROXY_DAT_TEST_DIR=/path/to/files go test ./internal/geodata -run TestRealDat。

About

一个 DNS 转发/代理软件。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages