diff --git a/client/example-node/single-node-core.yaml b/client/example-node/single-node-core.yaml index 4117180..a0c3dc3 100644 --- a/client/example-node/single-node-core.yaml +++ b/client/example-node/single-node-core.yaml @@ -1,176 +1,108 @@ { - "dns": { - "independent_cache": true, - "rules": [ - { - "outbound": "any", - "server": "dns-direct" - }, - { - "query_type": [ - 32, - 33 - ], - "server": "dns-block" - }, - { - "domain_suffix": ".lan", - "server": "dns-block" - } + "dns": + { + "independent_cache": true, + "rules": + [ + { "outbound": "any", "server": "dns-direct" }, + { "query_type": [32, 33], "server": "dns-block" }, + { "domain_suffix": ".lan", "server": "dns-block" }, + ], + "servers": + [ + { + "address": "https://8.8.8.8/dns-query", + "address_resolver": "dns-local", + "detour": "proxy", + "strategy": "", + "tag": "dns-remote", + }, + { + "address": "local", + "address_resolver": "dns-local", + "detour": "direct", + "strategy": "", + "tag": "dns-direct", + }, + { "address": "rcode://success", "tag": "dns-block" }, + { "address": "local", "detour": "direct", "tag": "dns-local" }, ], - "servers": [ - { - "address": "https://8.8.8.8/dns-query", - "address_resolver": "dns-local", - "detour": "proxy", - "strategy": "", - "tag": "dns-remote" - }, - { - "address": "local", - "address_resolver": "dns-local", - "detour": "direct", - "strategy": "", - "tag": "dns-direct" - }, - { - "address": "rcode://success", - "tag": "dns-block" - }, - { - "address": "local", - "detour": "direct", - "tag": "dns-local" - } - ] }, - "inbounds": [ - { - "domain_strategy": "", - "listen": "127.0.0.1", - "listen_port": 2080, - "sniff": true, - "sniff_override_destination": false, - "tag": "mixed-in", - "type": "mixed" - } + "inbounds": + [ + { + "domain_strategy": "", + "listen": "127.0.0.1", + "listen_port": 2080, + "sniff": true, + "sniff_override_destination": false, + "tag": "mixed-in", + "type": "mixed", + }, ], - "log": { - "level": "info" - }, - "outbounds": [ - { - "domain_strategy": "", - "flow": "xtls-rprx-vision", - "packet_encoding": "", - "server": "服务器IP", - "server_port": 443, - "tag": "proxy", - "tls": { + "log": { "level": "info" }, + "outbounds": + [ + { + "domain_strategy": "", + "flow": "xtls-rprx-vision", + "packet_encoding": "", + "server": "服务器IP", + "server_port": 443, + "tag": "proxy", + "tls": + { + "enabled": true, + "reality": + { "enabled": true, - "reality": { - "enabled": true, - "public_key": "singbox生成公钥", - "short_id": "singbox生成ID" - }, - "server_name": "yahoo.com", - "utls": { - "enabled": true, - "fingerprint": "chrome" - } - }, - "type": "vless", - "uuid": "singbox生成UUID" - }, - { - "tag": "direct", - "type": "direct" - }, - { - "tag": "bypass", - "type": "direct" - }, - { - "tag": "block", - "type": "block" - }, - { - "tag": "dns-out", - "type": "dns" - } + "public_key": "singbox生成公钥", + "short_id": "singbox生成ID", + }, + "server_name": "yahoo.com", + "utls": { "enabled": true, "fingerprint": "chrome" }, + }, + "type": "vless", + "uuid": "singbox生成UUID", + }, + { "tag": "direct", "type": "direct" }, + { "tag": "bypass", "type": "direct" }, + { "tag": "block", "type": "block" }, + { "tag": "dns-out", "type": "dns" }, ], - "route": { - "final": "proxy", - "rules": [ - { - "outbound": "dns-out", - "protocol": "dns" - }, - { - "domain": [ - ], - "domain_keyword": [ - ], - "domain_regex": [ - ], - "domain_suffix": [ - "appcenter.ms", - "firebase.io", - "crashlytics.com" - ], - "geosite": [ - "category-ads-all" - ], - "outbound": "block" - }, - { - "domain": [ - ], - "domain_keyword": [ - ], - "domain_regex": [ - ], - "domain_suffix": [ - ], - "geosite": [ - "cn" - ], - "outbound": "bypass" - }, - { - "geoip": [ - "cn", - "private" - ], - "ip_cidr": [ - ], - "outbound": "bypass" - }, - { - "network": "udp", - "outbound": "block", - "port": [ - 135, - 137, - 138, - 139, - 5353 - ] - }, - { - "ip_cidr": [ - "224.0.0.0/3", - "ff00::/8" - ], - "outbound": "block" - }, - { - "outbound": "block", - "source_ip_cidr": [ - "224.0.0.0/3", - "ff00::/8" - ] - } - ] - } + "route": + { + "final": "proxy", + "rules": + [ + { "outbound": "dns-out", "protocol": "dns" }, + { + "domain": [], + "domain_keyword": [], + "domain_regex": [], + "domain_suffix": ["appcenter.ms", "firebase.io", "crashlytics.com"], + "geosite": ["category-ads-all"], + "outbound": "block", + }, + { + "domain": [], + "domain_keyword": [], + "domain_regex": [], + "domain_suffix": [], + "geosite": ["cn"], + "outbound": "bypass", + }, + { "geoip": ["cn", "private"], "ip_cidr": [], "outbound": "bypass" }, + { + "network": "udp", + "outbound": "block", + "port": [135, 137, 138, 139, 5353], + }, + { "ip_cidr": ["224.0.0.0/3", "ff00::/8"], "outbound": "block" }, + { + "outbound": "block", + "source_ip_cidr": ["224.0.0.0/3", "ff00::/8"], + }, + ], + }, } diff --git a/client/example-node/single-node.yaml b/client/example-node/single-node.yaml index c38cbe0..0305574 100644 --- a/client/example-node/single-node.yaml +++ b/client/example-node/single-node.yaml @@ -1,24 +1,24 @@ [ - { - "tag": "Jp-100G", - "type": "vless", - "server": "服务器IP", - "server_port": 443, - "uuid": "singbox生成UUID", - "tls": { + { + "tag": "Jp-100G", + "type": "vless", + "server": "服务器IP", + "server_port": 443, + "uuid": "singbox生成UUID", + "tls": + { "enabled": true, "server_name": "icloud.com", "insecure": false, - "reality": { - "enabled": true, - "public_key": "singbox生成公钥", - "short_id": "singbox生成ID" - }, - "utls": { - "enabled": true, - "fingerprint": "chrome" - } + "reality": + { + "enabled": true, + "public_key": "singbox生成公钥", + "short_id": "singbox生成ID", + }, + "utls": { "enabled": true, "fingerprint": "chrome" }, }, - "flow": "xtls-rprx-vision" - } - ] \ No newline at end of file + "flow": "xtls-rprx-vision", + }, +] + diff --git a/client/example-rule/dns-rule-leak.yaml b/client/example-rule/dns-rule-leak.yaml index d813b0a..8196160 100644 --- a/client/example-rule/dns-rule-leak.yaml +++ b/client/example-rule/dns-rule-leak.yaml @@ -1,82 +1,62 @@ { - "dns": { - "servers": [ - { - "tag": "google", - "address": "tls://8.8.8.8" - }, - { - "tag": "local", - "address": "https://223.5.5.5/dns-query", - "detour": "direct" - } - ], - "rules": [ - { - "outbound": "any", - "server": "local" - }, - { - "clash_mode": "Direct", - "server": "local" - }, - { - "clash_mode": "Global", - "server": "google" - }, - { - "rule_set": "geosite-geolocation-cn", - "server": "local" - }, - { - "clash_mode": "Default", - "server": "google" - }, - { - "type": "logical", - "mode": "and", - "rules": [ + "dns": + { + "servers": + [ + { "tag": "google", "address": "tls://8.8.8.8" }, { - "rule_set": "geosite-geolocation-!cn", - "invert": true + "tag": "local", + "address": "https://223.5.5.5/dns-query", + "detour": "direct", + }, + ], + "rules": + [ + { "outbound": "any", "server": "local" }, + { "clash_mode": "Direct", "server": "local" }, + { "clash_mode": "Global", "server": "google" }, + { "rule_set": "geosite-geolocation-cn", "server": "local" }, + { "clash_mode": "Default", "server": "google" }, + { + "type": "logical", + "mode": "and", + "rules": + [ + { "rule_set": "geosite-geolocation-!cn", "invert": true }, + { "rule_set": "geoip-cn" }, + ], + "server": "local", + }, + ], + }, + "route": + { + "rule_set": + [ + { + "type": "remote", + "tag": "geosite-geolocation-cn", + "format": "binary", + "url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-geolocation-cn.srs", }, { - "rule_set": "geoip-cn" - } + "type": "remote", + "tag": "geosite-geolocation-!cn", + "format": "binary", + "url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-geolocation-!cn.srs", + }, + { + "type": "remote", + "tag": "geoip-cn", + "format": "binary", + "url": "https://raw.githubusercontent.com/SagerNet/sing-geoip/rule-set/geoip-cn.srs", + }, ], - "server": "local" - } - ] - }, - "route": { - "rule_set": [ - { - "type": "remote", - "tag": "geosite-geolocation-cn", - "format": "binary", - "url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-geolocation-cn.srs" - }, - { - "type": "remote", - "tag": "geosite-geolocation-!cn", - "format": "binary", - "url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-geolocation-!cn.srs" - }, - { - "type": "remote", - "tag": "geoip-cn", - "format": "binary", - "url": "https://raw.githubusercontent.com/SagerNet/sing-geoip/rule-set/geoip-cn.srs" - } - ] - }, - "experimental": { - "cache_file": { - "enabled": true, - "store_rdrc": true }, - "clash_api": { - "default_mode": "Enhanced" - } - } -} \ No newline at end of file + "experimental": + { + "cache_file": { "enabled": true, "store_rdrc": true }, + "clash_api": { "default_mode": "Enhanced" }, + }, +} + diff --git a/client/example-rule/dns-rule.yaml b/client/example-rule/dns-rule.yaml index b30ef2f..974e17e 100644 --- a/client/example-rule/dns-rule.yaml +++ b/client/example-rule/dns-rule.yaml @@ -1,79 +1,61 @@ { - "dns": { - "servers": [ - { - "tag": "google", - "address": "tls://8.8.8.8" - }, - { - "tag": "local", - "address": "https://223.5.5.5/dns-query", - "detour": "direct" - } - ], - "rules": [ - { - "outbound": "any", - "server": "local" - }, - { - "clash_mode": "Direct", - "server": "local" - }, - { - "clash_mode": "Global", - "server": "google" - }, - { - "rule_set": "geosite-geolocation-cn", - "server": "local" - }, - { - "type": "logical", - "mode": "and", - "rules": [ + "dns": + { + "servers": + [ + { "tag": "google", "address": "tls://8.8.8.8" }, { - "rule_set": "geosite-geolocation-!cn", - "invert": true + "tag": "local", + "address": "https://223.5.5.5/dns-query", + "detour": "direct", + }, + ], + "rules": [ + { "outbound": "any", "server": "local" }, + { "clash_mode": "Direct", "server": "local" }, + { "clash_mode": "Global", "server": "google" }, + { "rule_set": "geosite-geolocation-cn", "server": "local" }, + { + "type": "logical", + "mode": "and", + "rules": + [ + { "rule_set": "geosite-geolocation-!cn", "invert": true }, + { "rule_set": "geoip-cn" }, + ], + "server": "google", + "client_subnet": "114.114.114.114/24", #Any China client IP address + }, + ], + }, + "route": + { + "rule_set": + [ + { + "type": "remote", + "tag": "geosite-geolocation-cn", + "format": "binary", + "url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-geolocation-cn.srs", }, { - "rule_set": "geoip-cn" - } + "type": "remote", + "tag": "geosite-geolocation-!cn", + "format": "binary", + "url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-geolocation-!cn.srs", + }, + { + "type": "remote", + "tag": "geoip-cn", + "format": "binary", + "url": "https://raw.githubusercontent.com/SagerNet/sing-geoip/rule-set/geoip-cn.srs", + }, ], - "server": "google", - "client_subnet": "114.114.114.114/24" // Any China client IP address - } - ] - }, - "route": { - "rule_set": [ - { - "type": "remote", - "tag": "geosite-geolocation-cn", - "format": "binary", - "url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-geolocation-cn.srs" - }, - { - "type": "remote", - "tag": "geosite-geolocation-!cn", - "format": "binary", - "url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-geolocation-!cn.srs" - }, - { - "type": "remote", - "tag": "geoip-cn", - "format": "binary", - "url": "https://raw.githubusercontent.com/SagerNet/sing-geoip/rule-set/geoip-cn.srs" - } - ] - }, - "experimental": { - "cache_file": { - "enabled": true, - "store_rdrc": true }, - "clash_api": { - "default_mode": "Enhanced" - } - } -} \ No newline at end of file + "experimental": + { + "cache_file": { "enabled": true, "store_rdrc": true }, + "clash_api": { "default_mode": "Enhanced" }, + }, +} + diff --git a/client/example-rule/fakeip.yaml b/client/example-rule/fakeip.yaml index 4c46355..0cd48d4 100644 --- a/client/example-rule/fakeip.yaml +++ b/client/example-rule/fakeip.yaml @@ -1,73 +1,48 @@ { - "dns": { - "servers": [ - { - "tag": "google", - "address": "tls://8.8.8.8" - }, - { - "tag": "local", - "address": "223.5.5.5", - "detour": "direct" - }, - { - "tag": "remote", - "address": "fakeip" - } - ], - "rules": [ - { - "outbound": "any", - "server": "local" - }, - { - "query_type": [ - "A", - "AAAA" - ], - "server": "remote" - } - ], - "fakeip": { - "enabled": true, - "inet4_range": "198.18.0.0/15", - "inet6_range": "fc00::/18" - }, - "independent_cache": true - }, - "inbounds": [ + "dns": { - "type": "tun", - "inet4_address": "172.19.0.1/30", - "inet6_address": "fdfe:dcba:9876::1/126", - "auto_route": true, - "strict_route": true - } - ], + "servers": + [ + { "tag": "google", "address": "tls://8.8.8.8" }, + { "tag": "local", "address": "223.5.5.5", "detour": "direct" }, + { "tag": "remote", "address": "fakeip" }, + ], + "rules": + [ + { "outbound": "any", "server": "local" }, + { "query_type": ["A", "AAAA"], "server": "remote" }, + ], + "fakeip": + { + "enabled": true, + "inet4_range": "198.18.0.0/15", + "inet6_range": "fc00::/18", + }, + "independent_cache": true, + }, + "inbounds": + [ + { + "type": "tun", + "inet4_address": "172.19.0.1/30", + "inet6_address": "fdfe:dcba:9876::1/126", + "auto_route": true, + "strict_route": true, + }, + ], "outbounds": [ - // ... - { - "type": "direct", - "tag": "direct" - }, - { - "type": "dns", - "tag": "dns-out" - } - ], - "route": { - "rules": [ - { - "protocol": "dns", - "outbound": "dns-out" - }, - { - "geoip": [ - "private" - ], - "outbound": "direct" - } + # ... + { "type": "direct", "tag": "direct" }, + { "type": "dns", "tag": "dns-out" }, ], - "auto_detect_interface": true - } -} \ No newline at end of file + "route": + { + "rules": + [ + { "protocol": "dns", "outbound": "dns-out" }, + { "geoip": ["private"], "outbound": "direct" }, + ], + "auto_detect_interface": true, + }, +} # + diff --git a/client/example-rule/route-rule.yaml b/client/example-rule/route-rule.yaml index ebea93c..43d9171 100644 --- a/client/example-rule/route-rule.yaml +++ b/client/example-rule/route-rule.yaml @@ -1,79 +1,53 @@ { - "outbounds": [ - { - "type": "direct", - "tag": "direct" - }, - { - "type": "block", - "tag": "block" - } - ], - "route": { - "rules": [ - { - "type": "logical", - "mode": "or", - "rules": [ - { - "protocol": "dns" - }, - { - "port": 53 - } - ], - "outbound": "dns" - }, - { - "ip_is_private": true, - "outbound": "direct" - }, - { - "clash_mode": "Direct", - "outbound": "direct" - }, - { - "clash_mode": "Global", - "outbound": "default" - }, - { - "type": "logical", - "mode": "or", - "rules": [ - { - "port": 853 - }, - { - "network": "udp", - "port": 443 - }, - { - "protocol": "stun" - } - ], - "outbound": "block" - }, - { - "rule_set": [ - "geoip-cn", - "geosite-geolocation-cn" - ], - "outbound": "direct" - } + "outbounds": + [ + { "type": "direct", "tag": "direct" }, + { "type": "block", "tag": "block" }, ], - "rule_set": [ - { - "type": "remote", - "tag": "geoip-cn", - "format": "binary", - "url": "https://raw.githubusercontent.com/SagerNet/sing-geoip/rule-set/geoip-cn.srs" - }, - { - "type": "remote", - "tag": "geosite-geolocation-cn", - "format": "binary", - "url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-geolocation-cn.srs" - } - ] - } -} \ No newline at end of file + "route": + { + "rules": + [ + { + "type": "logical", + "mode": "or", + "rules": [{ "protocol": "dns" }, { "port": 53 }], + "outbound": "dns", + }, + { "ip_is_private": true, "outbound": "direct" }, + { "clash_mode": "Direct", "outbound": "direct" }, + { "clash_mode": "Global", "outbound": "default" }, + { + "type": "logical", + "mode": "or", + "rules": + [ + { "port": 853 }, + { "network": "udp", "port": 443 }, + { "protocol": "stun" }, + ], + "outbound": "block", + }, + { + "rule_set": ["geoip-cn", "geosite-geolocation-cn"], + "outbound": "direct", + }, + ], + "rule_set": + [ + { + "type": "remote", + "tag": "geoip-cn", + "format": "binary", + "url": "https://raw.githubusercontent.com/SagerNet/sing-geoip/rule-set/geoip-cn.srs", + }, + { + "type": "remote", + "tag": "geosite-geolocation-cn", + "format": "binary", + "url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-geolocation-cn.srs", + }, + ], + }, +} + diff --git a/client/example-rule/tun-ipv4+ipv6.yaml b/client/example-rule/tun-ipv4+ipv6.yaml index 4eba1a5..51d1af6 100644 --- a/client/example-rule/tun-ipv4+ipv6.yaml +++ b/client/example-rule/tun-ipv4+ipv6.yaml @@ -1,56 +1,36 @@ { - "dns": { - "servers": [ - { - "tag": "google", - "address": "tls://8.8.8.8" - }, - { - "tag": "local", - "address": "223.5.5.5", - "detour": "direct" - } - ], - "rules": [ - { - "outbound": "any", - "server": "local" - } - ] - }, - "inbounds": [ + "dns": { - "type": "tun", - "inet4_address": "172.19.0.1/30", - "inet6_address": "fdfe:dcba:9876::1/126", - "auto_route": true, - "strict_route": false - } - ], - "outbounds": [ - // ... - { - "type": "direct", - "tag": "direct" - }, - { - "type": "dns", - "tag": "dns-out" - } - ], - "route": { - "rules": [ - { - "protocol": "dns", - "outbound": "dns-out" - }, - { - "geoip": [ - "private" + "servers": + [ + { "tag": "google", "address": "tls://8.8.8.8" }, + { "tag": "local", "address": "223.5.5.5", "detour": "direct" }, ], - "outbound": "direct" - } + "rules": [{ "outbound": "any", "server": "local" }], + }, + "inbounds": + [ + { + "type": "tun", + "inet4_address": "172.19.0.1/30", + "inet6_address": "fdfe:dcba:9876::1/126", + "auto_route": true, + "strict_route": false, + }, ], - "auto_detect_interface": true - } -} \ No newline at end of file + "outbounds": [ + # // ... + { "type": "direct", "tag": "direct" }, + { "type": "dns", "tag": "dns-out" }, + ], + "route": + { + "rules": + [ + { "protocol": "dns", "outbound": "dns-out" }, + { "geoip": ["private"], "outbound": "direct" }, + ], + "auto_detect_interface": true, + }, +} # + diff --git a/client/example-rule/tun-ipv4only.yaml b/client/example-rule/tun-ipv4only.yaml index b89a4f9..c21b43c 100644 --- a/client/example-rule/tun-ipv4only.yaml +++ b/client/example-rule/tun-ipv4only.yaml @@ -1,56 +1,36 @@ { - "dns": { - "servers": [ - { - "tag": "google", - "address": "tls://8.8.8.8" - }, - { - "tag": "local", - "address": "223.5.5.5", - "detour": "direct" - } - ], - "rules": [ - { - "outbound": "any", - "server": "local" - } - ], - "strategy": "ipv4_only" - }, - "inbounds": [ + "dns": { - "type": "tun", - "inet4_address": "172.19.0.1/30", - "auto_route": true, - "strict_route": false - } - ], - "outbounds": [ - // ... - { - "type": "direct", - "tag": "direct" - }, - { - "type": "dns", - "tag": "dns-out" - } - ], - "route": { - "rules": [ - { - "protocol": "dns", - "outbound": "dns-out" - }, - { - "geoip": [ - "private" + "servers": + [ + { "tag": "google", "address": "tls://8.8.8.8" }, + { "tag": "local", "address": "223.5.5.5", "detour": "direct" }, ], - "outbound": "direct" - } + "rules": [{ "outbound": "any", "server": "local" }], + "strategy": "ipv4_only", + }, + "inbounds": + [ + { + "type": "tun", + "inet4_address": "172.19.0.1/30", + "auto_route": true, + "strict_route": false, + }, ], - "auto_detect_interface": true - } -} \ No newline at end of file + "outbounds": [ + #// ... + { "type": "direct", "tag": "direct" }, + { "type": "dns", "tag": "dns-out" }, + ], + "route": + { + "rules": + [ + { "protocol": "dns", "outbound": "dns-out" }, + { "geoip": ["private"], "outbound": "direct" }, + ], + "auto_detect_interface": true, + }, +} + diff --git a/server/reality_domain.yaml b/server/reality_domain.md similarity index 100% rename from server/reality_domain.yaml rename to server/reality_domain.md diff --git a/server/vless+reality.yaml b/server/vless+reality.yaml index 775f2c3..c2c9d32 100644 --- a/server/vless+reality.yaml +++ b/server/vless+reality.yaml @@ -1,59 +1,37 @@ { - "log": { - "level": "info" - }, - "dns": { - "servers": [ + "log": { "level": "info" }, + "dns": { "servers": [{ "address": "tls://8.8.8.8" }] }, + "inbounds": + [ { - "address": "tls://8.8.8.8" - } - ] - }, - "inbounds": [ - { - "type": "vless", - "tag": "VLESSReality", - "listen": "::", - "listen_port": 443, - "users": [ - { - "name": "AK-JP-100G", - "uuid": "singbox生成", - "flow": "xtls-rprx-vision" - } - ], - "tls": { - "enabled": true, - "server_name": "s0.awsstatic.com", - "reality": { - "enabled": true, - "handshake": { - "server": "s0.awsstatic.com", - "server_port": 443 + "type": "vless", + "tag": "VLESSReality", + "listen": "::", + "listen_port": 443, + "users": + [ + { + "name": "AK-JP-100G", + "uuid": "singbox生成", + "flow": "xtls-rprx-vision", + }, + ], + "tls": + { + "enabled": true, + "server_name": "s0.awsstatic.com", + "reality": + { + "enabled": true, + "handshake": + { "server": "s0.awsstatic.com", "server_port": 443 }, + "private_key": "singbox生成", + "short_id": ["singbox生成"], + }, }, - "private_key": "singbox生成", - "short_id": [ - "singbox生成" - ] - } - } - } - ], - "outbounds": [ - { - "type": "direct" - }, - { - "type": "dns", - "tag": "dns-out" - } - ], - "route": { - "rules": [ - { - "protocol": "dns", - "outbound": "dns-out" - } - ] - } -} \ No newline at end of file + }, + ], + "outbounds": [{ "type": "direct" }, { "type": "dns", "tag": "dns-out" }], + "route": { "rules": [{ "protocol": "dns", "outbound": "dns-out" }] }, +} +