diff --git a/.github/workflows/build-mosdns.yml b/.github/workflows/build-mosdns.yml index 2988d49c..52327c33 100644 --- a/.github/workflows/build-mosdns.yml +++ b/.github/workflows/build-mosdns.yml @@ -40,11 +40,17 @@ jobs: run: rm target/* - name: Rebuild target branch run: | - ./raydata.py ref/geoip.dat -c cn -o target/chinaip.txt geoip - ./raydata.py ref/geosite.dat -c cn -o target/chinasite.txt geosite --formatter format_mosdns.json + cp mosdns/config.yml target/config.yml + ./raydata.py ref/geoip.dat -c cn -o target/rule/chinaip.txt geoip + ./raydata.py ref/geosite.dat -c cn -o target/rule/chinasite.txt geosite --formatter mosdns/format.json + ./raydata.py ref/geosite.dat -c category-ads-all -o target/rule/blocklist.txt geosite --formatter mosdns/format.json + touch target/rule/hosts.txt + touch target/rule/whitelist.txt + touch target/rule/greylist.txt + mkdir target/tmp cd target - tar -cf mosdns.tar *.txt - rm *.txt + tar -cf mosdns.tar tmp rule *.yml + rm tmp rule *.yml -r - name: Push to target branch continue-on-error: true run: | diff --git a/mosdns/config.yml b/mosdns/config.yml new file mode 100644 index 00000000..44e9d969 --- /dev/null +++ b/mosdns/config.yml @@ -0,0 +1,150 @@ +log: + level: debug + +api: + http: :8080 + +include: [] + +plugins: + - tag: hosts + type: hosts + args: + files: + - './rule/hosts.txt' + + - tag: lazy_cache + type: cache + args: + size: 102400 + lazy_cache_ttl: 259200 + dump_file: './tmp/cache.dump' + dump_interval: 600 + + - tag: whitelist + type: domain_set + args: + files: + - './rule/whitelist.txt' + + - tag: blocklist + type: domain_set + args: + files: + - './rule/blocklist.txt' + + - tag: greylist + type: domain_set + args: + files: + - './rule/greylist.txt' + + - tag: chinasite + type: domain_set + args: + files: + - './rule/chinasite.txt' + + - tag: chinaip + type: ip_set + args: + files: + - './rule/chinaip.txt' + + - tag: forward_remote + type: forward + args: + concurrent: 1 + upstreams: + - addr: 'https://1.1.1.1/dns-query' + dial_addr: '1.1.1.1' + bootstrap: '223.5.5.5:53' + enable_pipeline: true + max_conns: 2 + insecure_skip_verify: false + idle_timeout: 10 + #enable_http3: true + + - tag: remote_sequence + type: sequence + args: + - exec: ecs 8.209.36.0/23 240b:4000::/32 + - exec: $forward_remote + + - tag: local_sequence + type: sequence + args: + - exec: forward 223.5.5.5:53 + + - tag: has_resp_sequence + type: sequence + args: + - matches: has_resp + exec: accept + + - tag: has_china_resp_sequence + type: sequence + args: + - matches: '!resp_ip $chinaip' + exec: drop_resp + - matches: has_resp + exec: accept + + - tag: query_is_whitelist_domain + type: sequence + args: + - matches: qname $whitelist + exec: $local_sequence + + - tag: reject_blocklist + type: sequence + args: + - matches: qname $blocklist + exec: reject 3 + + - tag: query_is_greylist_domain + type: sequence + args: + - matches: qname $greylist + exec: $remote_sequence + + - tag: query_is_china_domain + type: sequence + args: + - matches: qname $chinasite + exec: $local_sequence + + - tag: main_sequence + type: sequence + args: + - exec: $hosts + - exec: jump has_resp_sequence + - matches: + - '!qname $blocklist' + exec: $lazy_cache + - exec: jump has_resp_sequence + - exec: $query_is_whitelist_domain + - exec: jump has_resp_sequence + - exec: $reject_blocklist + - exec: $query_is_greylist_domain + - exec: jump has_resp_sequence + - exec: $query_is_china_domain + - exec: jump has_china_resp_sequence + - exec: $remote_sequence + - exec: jump has_resp_sequence + - exec: $local_sequence + + - tag: udp_server + type: udp_server + args: + entry: main_sequence + listen: :53 + + - tag: http_server + type: http_server + args: + entries: + - path: /dns-query + exec: main_sequence + listen: :80 + idle_timeout: 10 diff --git a/format_mosdns.json b/mosdns/format.json similarity index 100% rename from format_mosdns.json rename to mosdns/format.json