mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-03 22:53:56 +08:00
3996 lines
91 KiB
JSON
3996 lines
91 KiB
JSON
{
|
|
"sections": [
|
|
{
|
|
"id": "TypedSection:#0",
|
|
"kind": "TypedSection",
|
|
"tabs": [],
|
|
"options": [],
|
|
"subsection": null
|
|
},
|
|
{
|
|
"id": "NamedSection:config#1",
|
|
"kind": "NamedSection",
|
|
"name": "config",
|
|
"tabs": [
|
|
[
|
|
"routing",
|
|
"Routing Settings"
|
|
],
|
|
[
|
|
"routing_node",
|
|
"Routing Nodes"
|
|
],
|
|
[
|
|
"routing_rule",
|
|
"Routing Rules"
|
|
],
|
|
[
|
|
"dns",
|
|
"DNS Settings"
|
|
],
|
|
[
|
|
"dns_server",
|
|
"DNS Servers"
|
|
],
|
|
[
|
|
"dns_rule",
|
|
"DNS Rules"
|
|
],
|
|
[
|
|
"ruleset",
|
|
"Rule Set"
|
|
],
|
|
[
|
|
"dns_cache",
|
|
"DNS Settings"
|
|
],
|
|
[
|
|
"control",
|
|
"Access Control"
|
|
],
|
|
[
|
|
"udp_nat",
|
|
"UDP NAT Settings"
|
|
],
|
|
[
|
|
"tun_dns",
|
|
"TUN DNS"
|
|
]
|
|
],
|
|
"options": [
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "main_node",
|
|
"title": "Main node",
|
|
"description": null,
|
|
"depends": [
|
|
{
|
|
"routing_mode": "custom",
|
|
"!reverse": true
|
|
}
|
|
],
|
|
"values": [
|
|
[
|
|
"nil",
|
|
"Disable"
|
|
],
|
|
[
|
|
"urltest",
|
|
"URLTest"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "nil",
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "CBI.StaticList",
|
|
"name": "main_urltest_nodes",
|
|
"title": "URLTest nodes",
|
|
"description": "List of nodes to test.",
|
|
"depends": [
|
|
[
|
|
"main_node",
|
|
"urltest"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "main_urltest_interval",
|
|
"title": "Test interval",
|
|
"description": "The test interval in seconds.",
|
|
"depends": [
|
|
[
|
|
"main_node",
|
|
"urltest"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "uinteger",
|
|
"placeholder": "180"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "main_urltest_tolerance",
|
|
"title": "Test tolerance",
|
|
"description": "The test tolerance in milliseconds.",
|
|
"depends": [
|
|
[
|
|
"main_node",
|
|
"urltest"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "uinteger",
|
|
"placeholder": "50"
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "main_udp_node",
|
|
"title": "Main UDP node",
|
|
"description": null,
|
|
"depends": [
|
|
{
|
|
"routing_mode": {},
|
|
"proxy_mode": {}
|
|
}
|
|
],
|
|
"values": [
|
|
[
|
|
"nil",
|
|
"Disable"
|
|
],
|
|
[
|
|
"same",
|
|
"Same as main node"
|
|
],
|
|
[
|
|
"urltest",
|
|
"URLTest"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "nil",
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "CBI.StaticList",
|
|
"name": "main_udp_urltest_nodes",
|
|
"title": "URLTest nodes",
|
|
"description": "List of nodes to test.",
|
|
"depends": [
|
|
[
|
|
"main_udp_node",
|
|
"urltest"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "main_udp_urltest_interval",
|
|
"title": "Test interval",
|
|
"description": "The test interval in seconds.",
|
|
"depends": [
|
|
[
|
|
"main_udp_node",
|
|
"urltest"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "uinteger",
|
|
"placeholder": "180"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "main_udp_urltest_tolerance",
|
|
"title": "Test tolerance",
|
|
"description": "The test tolerance in milliseconds.",
|
|
"depends": [
|
|
[
|
|
"main_udp_node",
|
|
"urltest"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "uinteger",
|
|
"placeholder": "50"
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "routing_mode",
|
|
"title": "Routing mode",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [
|
|
[
|
|
"gfwlist",
|
|
"GFWList"
|
|
],
|
|
[
|
|
"bypass_mainland_china",
|
|
"Bypass mainland China"
|
|
],
|
|
[
|
|
"proxy_mainland_china",
|
|
"Only proxy mainland China"
|
|
],
|
|
[
|
|
"custom",
|
|
"Custom routing"
|
|
],
|
|
[
|
|
"global",
|
|
"Global"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "bypass_mainland_china",
|
|
"onchange": "fn(87:72b58d771c8b)",
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "routing_port",
|
|
"title": "Routing ports",
|
|
"description": "Specify target ports to be proxied. Multiple ports must be separated by commas.",
|
|
"depends": [],
|
|
"values": [
|
|
[
|
|
"",
|
|
"All ports"
|
|
],
|
|
[
|
|
"common",
|
|
"Common ports only (bypass P2P traffic)"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"validate": "fn(376:3a1eaf5f61c2)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "proxy_mode",
|
|
"title": "Proxy mode",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [
|
|
[
|
|
"redirect",
|
|
"Redirect TCP"
|
|
],
|
|
[
|
|
"redirect_tproxy",
|
|
"Redirect TCP + TProxy UDP"
|
|
],
|
|
[
|
|
"redirect_tun",
|
|
"Redirect TCP + Tun UDP"
|
|
],
|
|
[
|
|
"tun",
|
|
"Tun TCP/UDP"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "redirect_tproxy",
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "ipv6_support",
|
|
"title": "IPv6 support",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "sniffer_advanced_mode",
|
|
"title": "Sniffer: advanced mode (100ms, universal list)",
|
|
"description": "Use the tutorial-recommended sniffer profile (100ms timeout, http/tls/stun/quic/dns). Default keeps the 300ms / unconstrained-list behaviour.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "0",
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "SectionValue",
|
|
"name": "_routing",
|
|
"description": "routing",
|
|
"depends": [
|
|
[
|
|
"routing_mode",
|
|
"custom"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": {
|
|
"id": "GridSection:_routing#2",
|
|
"kind": "GridSection",
|
|
"name": "_routing",
|
|
"tabs": [],
|
|
"options": [
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "tcpip_stack",
|
|
"title": "TCP/IP stack",
|
|
"description": "TCP/IP stack.",
|
|
"depends": [
|
|
[
|
|
"homeproxy-pro.config.proxy_mode",
|
|
"redirect_tun"
|
|
],
|
|
[
|
|
"homeproxy-pro.config.proxy_mode",
|
|
"tun"
|
|
]
|
|
],
|
|
"values": [
|
|
[
|
|
"mixed",
|
|
"Mixed"
|
|
],
|
|
[
|
|
"gvisor",
|
|
"gVisor"
|
|
],
|
|
[
|
|
"system",
|
|
"System"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "system",
|
|
"onchange": "fn(373:f3ab42d1ca03)",
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "endpoint_independent_nat",
|
|
"title": "Enable endpoint-independent NAT",
|
|
"description": "Performance may degrade slightly, so it is not recommended to enable on when it is not needed.",
|
|
"depends": [
|
|
[
|
|
"tcpip_stack",
|
|
"mixed"
|
|
],
|
|
[
|
|
"tcpip_stack",
|
|
"gvisor"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "udp_timeout",
|
|
"title": "UDP NAT expiration time",
|
|
"description": "In seconds.",
|
|
"depends": [
|
|
[
|
|
"homeproxy-pro.config.proxy_mode",
|
|
"redirect_tproxy"
|
|
],
|
|
[
|
|
"homeproxy-pro.config.proxy_mode",
|
|
"redirect_tun"
|
|
],
|
|
[
|
|
"homeproxy-pro.config.proxy_mode",
|
|
"tun"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "uinteger",
|
|
"placeholder": "300"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "bypass_cn_traffic",
|
|
"title": "Bypass CN traffic",
|
|
"description": "Bypass mainland China traffic via firewall rules by default.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "find_neighbor",
|
|
"title": "Find neighbor hosts",
|
|
"description": "Enable neighbor resolution so rules can match LAN devices by hostname (1.14).",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "domain_strategy",
|
|
"title": "Domain strategy",
|
|
"description": "If set, the requested domain name will be resolved to IP before routing.",
|
|
"depends": [],
|
|
"values": [
|
|
[
|
|
"",
|
|
"Default"
|
|
],
|
|
[
|
|
"prefer_ipv4",
|
|
"Prefer IPv4"
|
|
],
|
|
[
|
|
"prefer_ipv6",
|
|
"Prefer IPv6"
|
|
],
|
|
[
|
|
"ipv4_only",
|
|
"IPv4 only"
|
|
],
|
|
[
|
|
"ipv6_only",
|
|
"IPv6 only"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "default_outbound",
|
|
"title": "Default outbound",
|
|
"description": "Default outbound for connections not matched by any routing rules.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "nil",
|
|
"load": "fn(347:bdff551797c2)",
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "default_outbound_dns",
|
|
"title": "Default outbound DNS",
|
|
"description": "Default DNS server for resolving domain name in the server address.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "default-dns",
|
|
"load": "fn(326:345de0db50cf)",
|
|
"rmempty": false
|
|
}
|
|
}
|
|
],
|
|
"subsection": null
|
|
},
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "SectionValue",
|
|
"name": "_routing_node",
|
|
"description": "routing_node",
|
|
"depends": [
|
|
[
|
|
"routing_mode",
|
|
"custom"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": {
|
|
"id": "GridSection:_routing_node#3",
|
|
"kind": "GridSection",
|
|
"name": "_routing_node",
|
|
"tabs": [],
|
|
"options": [
|
|
{
|
|
"kind": "Value",
|
|
"name": "label",
|
|
"title": "Label",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"load": "bind(206:006f14096ca5;\"homeproxy-pro\")",
|
|
"modalonly": true,
|
|
"validate": "bind(461:3a6d28762720;\"homeproxy-pro\",\"routing_node\",\"label\")"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "enabled",
|
|
"title": "Enable",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"editable": true,
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "node",
|
|
"title": "Node",
|
|
"description": "Outbound node",
|
|
"depends": [],
|
|
"values": [
|
|
[
|
|
"urltest",
|
|
"URLTest"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"editable": true,
|
|
"validate": "bind(461:3a6d28762720;\"homeproxy-pro\",\"routing_node\",\"node\")"
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "domain_resolver",
|
|
"title": "Domain resolver",
|
|
"description": "For resolving domain name in the server address.",
|
|
"depends": [
|
|
{
|
|
"node": "urltest",
|
|
"!reverse": true
|
|
}
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"load": "fn(356:d9c0755071ec)",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "domain_strategy",
|
|
"title": "Domain strategy",
|
|
"description": "The domain strategy for resolving the domain name in the address.",
|
|
"depends": [
|
|
{
|
|
"node": "urltest",
|
|
"!reverse": true
|
|
}
|
|
],
|
|
"values": [
|
|
[
|
|
"",
|
|
"Default"
|
|
],
|
|
[
|
|
"prefer_ipv4",
|
|
"Prefer IPv4"
|
|
],
|
|
[
|
|
"prefer_ipv6",
|
|
"Prefer IPv6"
|
|
],
|
|
[
|
|
"ipv4_only",
|
|
"IPv4 only"
|
|
],
|
|
[
|
|
"ipv6_only",
|
|
"IPv6 only"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "class {}",
|
|
"name": "bind_interface",
|
|
"title": "Bind interface",
|
|
"description": "The network interface to bind to.",
|
|
"depends": [
|
|
{
|
|
"outbound": "",
|
|
"node": {}
|
|
}
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true,
|
|
"multiple": false,
|
|
"noaliases": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "outbound",
|
|
"title": "Outbound",
|
|
"description": "The tag of the upstream outbound.<br/>Other dial fields will be ignored when enabled.",
|
|
"depends": [
|
|
{
|
|
"node": "urltest",
|
|
"!reverse": true
|
|
}
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"editable": true,
|
|
"load": "fn(284:530aca6575b5)",
|
|
"validate": "fn(487:34bee8692641)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "CBI.StaticList",
|
|
"name": "urltest_nodes",
|
|
"title": "URLTest nodes",
|
|
"description": "List of nodes to test.",
|
|
"depends": [
|
|
[
|
|
"node",
|
|
"urltest"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true,
|
|
"validate": "fn(142:31d82e5bd86a)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "urltest_url",
|
|
"title": "Test URL",
|
|
"description": "The URL to test.",
|
|
"depends": [
|
|
[
|
|
"node",
|
|
"urltest"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true,
|
|
"placeholder": "https://www.gstatic.com/generate_204",
|
|
"validate": "fn(239:6318979ec65f)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "urltest_interval",
|
|
"title": "Test interval",
|
|
"description": "The test interval in seconds.",
|
|
"depends": [
|
|
[
|
|
"node",
|
|
"urltest"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "uinteger",
|
|
"modalonly": true,
|
|
"placeholder": "180",
|
|
"validate": "fn(276:b10cc6e36793)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "urltest_tolerance",
|
|
"title": "Test tolerance",
|
|
"description": "The test tolerance in milliseconds.",
|
|
"depends": [
|
|
[
|
|
"node",
|
|
"urltest"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "uinteger",
|
|
"modalonly": true,
|
|
"placeholder": "50"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "urltest_idle_timeout",
|
|
"title": "Idle timeout",
|
|
"description": "The idle timeout in seconds.",
|
|
"depends": [
|
|
[
|
|
"node",
|
|
"urltest"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "uinteger",
|
|
"modalonly": true,
|
|
"placeholder": "1800"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "urltest_interrupt_exist_connections",
|
|
"title": "Interrupt existing connections",
|
|
"description": "Interrupt existing connections when the selected outbound has changed.",
|
|
"depends": [
|
|
[
|
|
"node",
|
|
"urltest"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
}
|
|
],
|
|
"subsection": null
|
|
},
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "SectionValue",
|
|
"name": "_routing_rule",
|
|
"description": "routing_rule",
|
|
"depends": [
|
|
[
|
|
"routing_mode",
|
|
"custom"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": {
|
|
"id": "GridSection:_routing_rule#4",
|
|
"kind": "GridSection",
|
|
"name": "_routing_rule",
|
|
"tabs": [
|
|
[
|
|
"field_other",
|
|
"Other fields"
|
|
],
|
|
[
|
|
"field_host",
|
|
"Host/IP fields"
|
|
],
|
|
[
|
|
"field_port",
|
|
"Port fields"
|
|
],
|
|
[
|
|
"fields_process",
|
|
"Process fields"
|
|
]
|
|
],
|
|
"options": [
|
|
{
|
|
"kind": "Value",
|
|
"name": "label",
|
|
"title": "Label",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"load": "bind(206:006f14096ca5;\"homeproxy-pro\")",
|
|
"modalonly": true,
|
|
"validate": "bind(461:3a6d28762720;\"homeproxy-pro\",\"routing_rule\",\"label\")"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "enabled",
|
|
"title": "Enable",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"editable": true,
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "mode",
|
|
"title": "Mode",
|
|
"description": "The default rule uses the following matching logic:<br/><code>(domain || domain_suffix || domain_keyword || domain_regex || ip_cidr || ip_is_private)</code> &&<br/><code>(port || port_range)</code> &&<br/><code>(source_ip_cidr || source_ip_is_private)</code> &&<br/><code>(source_port || source_port_range)</code> &&<br/><code>other fields</code>.<br/>Additionally, included rule sets can be considered merged rather than as a single rule sub-item.",
|
|
"depends": [],
|
|
"values": [
|
|
[
|
|
"default",
|
|
"Default"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "default",
|
|
"readonly": true,
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "ip_version",
|
|
"title": "IP version",
|
|
"description": "4 or 6. Not limited if empty.",
|
|
"depends": [],
|
|
"values": [
|
|
[
|
|
"4",
|
|
"IPv4"
|
|
],
|
|
[
|
|
"6",
|
|
"IPv6"
|
|
],
|
|
[
|
|
"",
|
|
"Both"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "MultiValue",
|
|
"name": "protocol",
|
|
"title": "Protocol",
|
|
"description": "Sniffed protocol, see <a target=\"_blank\" href=\"https://sing-box.sagernet.org/configuration/route/sniff/\">Sniff</a> for details.",
|
|
"depends": [],
|
|
"values": [
|
|
[
|
|
"bittorrent",
|
|
"BitTorrent"
|
|
],
|
|
[
|
|
"dns",
|
|
"DNS"
|
|
],
|
|
[
|
|
"dtls",
|
|
"DTLS"
|
|
],
|
|
[
|
|
"http",
|
|
"HTTP"
|
|
],
|
|
[
|
|
"quic",
|
|
"QUIC"
|
|
],
|
|
[
|
|
"rdp",
|
|
"RDP"
|
|
],
|
|
[
|
|
"ssh",
|
|
"SSH"
|
|
],
|
|
[
|
|
"stun",
|
|
"STUN"
|
|
],
|
|
[
|
|
"tls",
|
|
"TLS"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "client",
|
|
"title": "Client",
|
|
"description": "Sniffed client type (QUIC client type or SSH client name).",
|
|
"depends": [
|
|
[
|
|
"protocol",
|
|
"quic"
|
|
],
|
|
[
|
|
"protocol",
|
|
"ssh"
|
|
]
|
|
],
|
|
"values": [
|
|
[
|
|
"chromium",
|
|
"Chromium / Cronet"
|
|
],
|
|
[
|
|
"firefox",
|
|
"Firefox / uquic firefox"
|
|
],
|
|
[
|
|
"quic-go",
|
|
"quic-go / uquic chrome"
|
|
],
|
|
[
|
|
"safari",
|
|
"Safari / Apple Network API"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "network",
|
|
"title": "Network",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [
|
|
[
|
|
"tcp",
|
|
"TCP"
|
|
],
|
|
[
|
|
"udp",
|
|
"UDP"
|
|
],
|
|
[
|
|
"",
|
|
"Both"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "user",
|
|
"title": "User",
|
|
"description": "Match user name.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "CBI.StaticList",
|
|
"name": "rule_set",
|
|
"title": "Rule set",
|
|
"description": "Match rule set. Since 1.14: a rule-set holding a single default rule is merged into this rule; any other rule-set matches as an OR collection.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"load": "fn(219:b7b6c816012f)",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "rule_set_ip_cidr_match_source",
|
|
"title": "Rule set IP CIDR as source IP",
|
|
"description": "Make IP CIDR in rule set used to match the source IP.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "invert",
|
|
"title": "Invert",
|
|
"description": "Invert match result.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "action",
|
|
"title": "Action",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [
|
|
[
|
|
"route",
|
|
"Route"
|
|
],
|
|
[
|
|
"reject",
|
|
"Reject"
|
|
],
|
|
[
|
|
"route-options",
|
|
"Route options"
|
|
],
|
|
[
|
|
"resolve",
|
|
"Resolve"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "route",
|
|
"editable": true,
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "outbound",
|
|
"title": "Outbound",
|
|
"description": "Tag of the target outbound.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"route"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"editable": true,
|
|
"load": "fn(263:6f52e51cea77)",
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "override_address",
|
|
"title": "Override address",
|
|
"description": "Override the connection destination address.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"route"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "ipaddr",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "override_port",
|
|
"title": "Override port",
|
|
"description": "Override the connection destination port.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"route"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "port",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "udp_disable_domain_unmapping",
|
|
"title": "Disable UDP domain unmapping",
|
|
"description": "If enabled, for UDP proxy requests addressed to a domain, the original packet address will be sent in the response instead of the mapped domain.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"route"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "udp_connect",
|
|
"title": "connect UDP connections",
|
|
"description": "If enabled, attempts to connect UDP connection to the destination instead of listen.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"route"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "udp_timeout",
|
|
"title": "UDP timeout",
|
|
"description": "Timeout for UDP connections.<br/>Setting a larger value than the UDP timeout in inbounds will have no effect.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"route"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "uinteger",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "tls_record_fragment",
|
|
"title": "TLS record fragment",
|
|
"description": "Fragment TLS handshake into multiple TLS records.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"route"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "tls_fragment",
|
|
"title": "TLS fragment",
|
|
"description": "Fragment TLS handshakes. Due to poor performance, try <code>TLS record fragment</code> first.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"route"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "tls_fragment_fallback_delay",
|
|
"title": "Fragment fallback delay",
|
|
"description": "The fallback value in milliseconds used when TLS segmentation cannot automatically determine the wait time.",
|
|
"depends": [
|
|
[
|
|
"tls_fragment",
|
|
"1"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "uinteger",
|
|
"modalonly": true,
|
|
"placeholder": "500"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "tls_spoof",
|
|
"title": "TLS spoof SNI (1.14)",
|
|
"description": "Inject a forged TLS ClientHello carrying this SNI before the real one to fool SNI-filtering middleboxes. Requires elevated privileges.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"route"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "hostname",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "tls_spoof_method",
|
|
"title": "TLS spoof method (1.14)",
|
|
"description": "How the forged segment is rejected by the real server.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"route"
|
|
],
|
|
[
|
|
"tls_spoof",
|
|
{}
|
|
]
|
|
],
|
|
"values": [
|
|
[
|
|
"",
|
|
"wrong-sequence (default)"
|
|
],
|
|
[
|
|
"wrong-checksum",
|
|
"wrong-checksum"
|
|
],
|
|
[
|
|
"wrong-ack",
|
|
"wrong-ack"
|
|
],
|
|
[
|
|
"wrong-md5",
|
|
"wrong-md5"
|
|
],
|
|
[
|
|
"wrong-timestamp",
|
|
"wrong-timestamp"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "resolve_server",
|
|
"title": "DNS server",
|
|
"description": "Specifies DNS server tag to use instead of selecting through DNS routing.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"resolve"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"load": "fn(356:d9c0755071ec)",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "reject_method",
|
|
"title": "Method",
|
|
"description": null,
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"reject"
|
|
]
|
|
],
|
|
"values": [
|
|
[
|
|
"default",
|
|
"Reply with TCP RST / ICMP port unreachable"
|
|
],
|
|
[
|
|
"drop",
|
|
"Drop packets"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "reject_no_drop",
|
|
"title": "Don't drop packets",
|
|
"description": "<code>Method</code> will be temporarily overwritten to <code>Drop packets</code> after 50 triggers in 30s if not enabled.",
|
|
"depends": [
|
|
[
|
|
"reject_method",
|
|
"default"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "resolve_strategy",
|
|
"title": "Resolve strategy",
|
|
"description": "Domain strategy for resolving the domain names.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"resolve"
|
|
]
|
|
],
|
|
"values": [
|
|
[
|
|
"",
|
|
"Default"
|
|
],
|
|
[
|
|
"prefer_ipv4",
|
|
"Prefer IPv4"
|
|
],
|
|
[
|
|
"prefer_ipv6",
|
|
"Prefer IPv6"
|
|
],
|
|
[
|
|
"ipv4_only",
|
|
"IPv4 only"
|
|
],
|
|
[
|
|
"ipv6_only",
|
|
"IPv6 only"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "resolve_disable_cache",
|
|
"title": "Disable DNS cache",
|
|
"description": "Disable DNS cache in this query.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"resolve"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "resolve_rewrite_ttl",
|
|
"title": "Rewrite TTL",
|
|
"description": "Rewrite TTL in DNS responses.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"resolve"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "uinteger",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "resolve_client_subnet",
|
|
"title": "EDNS Client subnet",
|
|
"description": "Append a <code>edns0-subnet</code> OPT extra record with the specified IP prefix to every query by default.<br/>If value is an IP address instead of prefix, <code>/32</code> or <code>/128</code> will be appended automatically.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"resolve"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "or(cidr, ipaddr)",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "resolve_disable_optimistic_cache",
|
|
"title": "Disable optimistic cache",
|
|
"description": "Disable optimistic DNS caching in this lookup (1.14).",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"resolve"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "resolve_timeout",
|
|
"title": "Query timeout",
|
|
"description": "Override dns.timeout for this lookup, in seconds (1.14).",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"resolve"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "uinteger",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "domain",
|
|
"title": "Domain name",
|
|
"description": "Match full domain.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "hostname",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "domain_suffix",
|
|
"title": "Domain suffix",
|
|
"description": "Match domain suffix.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "domain_keyword",
|
|
"title": "Domain keyword",
|
|
"description": "Match domain using keyword.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "domain_regex",
|
|
"title": "Domain regex",
|
|
"description": "Match domain using regular expression.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "source_ip_cidr",
|
|
"title": "Source IP CIDR",
|
|
"description": "Match source IP CIDR.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "or(cidr, ipaddr)",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "source_ip_is_private",
|
|
"title": "Match private source IP",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "ip_cidr",
|
|
"title": "IP CIDR",
|
|
"description": "Match IP CIDR.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "or(cidr, ipaddr)",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "ip_is_private",
|
|
"title": "Match private IP",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "source_mac_address",
|
|
"title": "Source MAC address",
|
|
"description": "Match LAN device by MAC address.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "macaddr",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "source_hostname",
|
|
"title": "Source hostname",
|
|
"description": "Match LAN device hostname via neighbor resolution; enable find_neighbor.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "source_port",
|
|
"title": "Source port",
|
|
"description": "Match source port.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "port",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "source_port_range",
|
|
"title": "Source port range",
|
|
"description": "Match source port range. Format as START:/:END/START:END.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true,
|
|
"validate": "fn(390:7d62701c74bd)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "port",
|
|
"title": "Port",
|
|
"description": "Match port.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "port",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "port_range",
|
|
"title": "Port range",
|
|
"description": "Match port range. Format as START:/:END/START:END.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true,
|
|
"validate": "fn(390:7d62701c74bd)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "process_name",
|
|
"title": "Process name",
|
|
"description": "Match process name.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "process_path",
|
|
"title": "Process path",
|
|
"description": "Match process path.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "process_path_regex",
|
|
"title": "Process path (regex)",
|
|
"description": "Match process path using regular expression.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
}
|
|
],
|
|
"subsection": null
|
|
},
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "SectionValue",
|
|
"name": "_dns",
|
|
"description": "dns",
|
|
"depends": [
|
|
[
|
|
"routing_mode",
|
|
"custom"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": {
|
|
"id": "GridSection:_dns#5",
|
|
"kind": "GridSection",
|
|
"name": "_dns",
|
|
"tabs": [],
|
|
"options": [
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "default_strategy",
|
|
"title": "Default DNS strategy",
|
|
"description": "The DNS strategy for resolving the domain name in the address.",
|
|
"depends": [],
|
|
"values": [
|
|
[
|
|
"",
|
|
"Default"
|
|
],
|
|
[
|
|
"prefer_ipv4",
|
|
"Prefer IPv4"
|
|
],
|
|
[
|
|
"prefer_ipv6",
|
|
"Prefer IPv6"
|
|
],
|
|
[
|
|
"ipv4_only",
|
|
"IPv4 only"
|
|
],
|
|
[
|
|
"ipv6_only",
|
|
"IPv6 only"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "default_server",
|
|
"title": "Default DNS server",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "default-dns",
|
|
"load": "fn(326:345de0db50cf)",
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "disable_cache",
|
|
"title": "Disable DNS cache",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "disable_cache_expire",
|
|
"title": "Disable cache expire",
|
|
"description": null,
|
|
"depends": [
|
|
[
|
|
"disable_cache",
|
|
"0"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "client_subnet",
|
|
"title": "EDNS Client subnet",
|
|
"description": "Append a <code>edns0-subnet</code> OPT extra record with the specified IP prefix to every query by default.<br/>If value is an IP address instead of prefix, <code>/32</code> or <code>/128</code> will be appended automatically.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "or(cidr, ipaddr)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "optimistic_cache",
|
|
"title": "Optimistic DNS cache",
|
|
"description": "Return expired cache immediately and refresh in background (sing-box 1.14).",
|
|
"depends": [
|
|
[
|
|
"disable_cache",
|
|
"0"
|
|
],
|
|
[
|
|
"disable_cache_expire",
|
|
"0"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "optimistic_timeout",
|
|
"title": "Optimistic cache timeout",
|
|
"description": "Max time an expired entry may be served. Examples: 3d, 1h.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "dns_timeout",
|
|
"title": "DNS query timeout",
|
|
"description": "Default timeout per DNS query in seconds (sing-box default: 10).",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "uinteger"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "cache_file_store_dns",
|
|
"title": "Store DNS cache",
|
|
"description": "Persist DNS cache across restarts (sing-box 1.14, replaces Store RDRC).",
|
|
"depends": [
|
|
[
|
|
"disable_cache",
|
|
"0"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"rmempty": false
|
|
}
|
|
}
|
|
],
|
|
"subsection": null
|
|
},
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "SectionValue",
|
|
"name": "_dns_server",
|
|
"description": "dns_server",
|
|
"depends": [
|
|
[
|
|
"routing_mode",
|
|
"custom"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": {
|
|
"id": "GridSection:_dns_server#6",
|
|
"kind": "GridSection",
|
|
"name": "_dns_server",
|
|
"tabs": [],
|
|
"options": [
|
|
{
|
|
"kind": "Value",
|
|
"name": "label",
|
|
"title": "Label",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"load": "bind(206:006f14096ca5;\"homeproxy-pro\")",
|
|
"modalonly": true,
|
|
"validate": "bind(461:3a6d28762720;\"homeproxy-pro\",\"dns_server\",\"label\")"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "enabled",
|
|
"title": "Enable",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"editable": true,
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "type",
|
|
"title": "Type",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [
|
|
[
|
|
"udp",
|
|
"UDP"
|
|
],
|
|
[
|
|
"tcp",
|
|
"TCP"
|
|
],
|
|
[
|
|
"tls",
|
|
"TLS"
|
|
],
|
|
[
|
|
"https",
|
|
"HTTPS"
|
|
],
|
|
[
|
|
"h3",
|
|
"HTTP/3"
|
|
],
|
|
[
|
|
"quic",
|
|
"QUIC"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "udp",
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "server",
|
|
"title": "Address",
|
|
"description": "The address of the dns server.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "or(hostname, ipaddr)",
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "server_port",
|
|
"title": "Port",
|
|
"description": "The port of the DNS server.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "port",
|
|
"placeholder": "auto"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "path",
|
|
"title": "Path",
|
|
"description": "The path of the DNS server.",
|
|
"depends": [
|
|
[
|
|
"type",
|
|
"https"
|
|
],
|
|
[
|
|
"type",
|
|
"h3"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true,
|
|
"placeholder": "/dns-query"
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "headers",
|
|
"title": "Headers",
|
|
"description": "Additional headers to be sent to the DNS server.",
|
|
"depends": [
|
|
[
|
|
"type",
|
|
"https"
|
|
],
|
|
[
|
|
"type",
|
|
"h3"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "tls_sni",
|
|
"title": "TLS SNI",
|
|
"description": "Used to verify the hostname on the returned certificates.",
|
|
"depends": [
|
|
[
|
|
"type",
|
|
"tls"
|
|
],
|
|
[
|
|
"type",
|
|
"https"
|
|
],
|
|
[
|
|
"type",
|
|
"h3"
|
|
],
|
|
[
|
|
"type",
|
|
"quic"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "address_resolver",
|
|
"title": "Address resolver",
|
|
"description": "Tag of a another server to resolve the domain name in the address. Required if address contains domain.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"load": "fn(384:9fa59da460cf)",
|
|
"modalonly": true,
|
|
"validate": "fn(322:e76c15d647fc)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "address_strategy",
|
|
"title": "Address strategy",
|
|
"description": "The domain strategy for resolving the domain name in the address.",
|
|
"depends": [
|
|
{
|
|
"address_resolver": "",
|
|
"!reverse": true
|
|
}
|
|
],
|
|
"values": [
|
|
[
|
|
"",
|
|
"Default"
|
|
],
|
|
[
|
|
"prefer_ipv4",
|
|
"Prefer IPv4"
|
|
],
|
|
[
|
|
"prefer_ipv6",
|
|
"Prefer IPv6"
|
|
],
|
|
[
|
|
"ipv4_only",
|
|
"IPv4 only"
|
|
],
|
|
[
|
|
"ipv6_only",
|
|
"IPv6 only"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "outbound",
|
|
"title": "Outbound",
|
|
"description": "Tag of an outbound for connecting to the dns server.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "direct-out",
|
|
"editable": true,
|
|
"load": "fn(263:6f52e51cea77)",
|
|
"rmempty": false
|
|
}
|
|
}
|
|
],
|
|
"subsection": null
|
|
},
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "SectionValue",
|
|
"name": "_dns_rule",
|
|
"description": "dns_rule",
|
|
"depends": [
|
|
[
|
|
"routing_mode",
|
|
"custom"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": {
|
|
"id": "GridSection:_dns_rule#7",
|
|
"kind": "GridSection",
|
|
"name": "_dns_rule",
|
|
"tabs": [
|
|
[
|
|
"field_other",
|
|
"Other fields"
|
|
],
|
|
[
|
|
"field_host",
|
|
"Host/IP fields"
|
|
],
|
|
[
|
|
"field_port",
|
|
"Port fields"
|
|
],
|
|
[
|
|
"fields_process",
|
|
"Process fields"
|
|
]
|
|
],
|
|
"options": [
|
|
{
|
|
"kind": "Value",
|
|
"name": "label",
|
|
"title": "Label",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"load": "bind(206:006f14096ca5;\"homeproxy-pro\")",
|
|
"modalonly": true,
|
|
"validate": "bind(461:3a6d28762720;\"homeproxy-pro\",\"dns_rule\",\"label\")"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "enabled",
|
|
"title": "Enable",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"editable": true,
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "mode",
|
|
"title": "Mode",
|
|
"description": "The default rule uses the following matching logic:<br/><code>(domain || domain_suffix || domain_keyword || domain_regex)</code> &&<br/><code>(port || port_range)</code> &&<br/><code>(source_ip_cidr || source_ip_is_private)</code> &&<br/><code>(source_port || source_port_range)</code> &&<br/><code>other fields</code>.<br/>Additionally, included rule sets can be considered merged rather than as a single rule sub-item.",
|
|
"depends": [],
|
|
"values": [
|
|
[
|
|
"default",
|
|
"Default"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "default",
|
|
"modalonly": true,
|
|
"readonly": true,
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "ip_version",
|
|
"title": "IP version",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [
|
|
[
|
|
"4",
|
|
"IPv4"
|
|
],
|
|
[
|
|
"6",
|
|
"IPv6"
|
|
],
|
|
[
|
|
"",
|
|
"Both"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "query_type",
|
|
"title": "Query type",
|
|
"description": "Match query type.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "network",
|
|
"title": "Network",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [
|
|
[
|
|
"tcp",
|
|
"TCP"
|
|
],
|
|
[
|
|
"udp",
|
|
"UDP"
|
|
],
|
|
[
|
|
"",
|
|
"Both"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "MultiValue",
|
|
"name": "protocol",
|
|
"title": "Protocol",
|
|
"description": "Sniffed protocol, see <a target=\"_blank\" href=\"https://sing-box.sagernet.org/configuration/route/sniff/\">Sniff</a> for details.",
|
|
"depends": [],
|
|
"values": [
|
|
[
|
|
"bittorrent",
|
|
"BitTorrent"
|
|
],
|
|
[
|
|
"dtls",
|
|
"DTLS"
|
|
],
|
|
[
|
|
"http",
|
|
"HTTP"
|
|
],
|
|
[
|
|
"quic",
|
|
"QUIC"
|
|
],
|
|
[
|
|
"rdp",
|
|
"RDP"
|
|
],
|
|
[
|
|
"ssh",
|
|
"SSH"
|
|
],
|
|
[
|
|
"stun",
|
|
"STUN"
|
|
],
|
|
[
|
|
"tls",
|
|
"TLS"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "user",
|
|
"title": "User",
|
|
"description": "Match user name.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "CBI.StaticList",
|
|
"name": "rule_set",
|
|
"title": "Rule set",
|
|
"description": "Match rule set. DNS: rules referencing rule-sets that contain query_type are incompatible with legacy address filters (ip_cidr / ip_is_private) — use match_response instead (1.14).",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"load": "fn(219:b7b6c816012f)",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "rule_set_ip_cidr_match_source",
|
|
"title": "Rule set IP CIDR as source IP",
|
|
"description": "Make IP CIDR in rule sets match the source IP.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "invert",
|
|
"title": "Invert",
|
|
"description": "Invert match result.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "action",
|
|
"title": "Action",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [
|
|
[
|
|
"route",
|
|
"Route"
|
|
],
|
|
[
|
|
"reject",
|
|
"Reject"
|
|
],
|
|
[
|
|
"predefined",
|
|
"Predefined"
|
|
],
|
|
[
|
|
"evaluate",
|
|
"Evaluate (1.14)"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "route",
|
|
"editable": true,
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "server",
|
|
"title": "Server",
|
|
"description": "Tag of the target dns server.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"route"
|
|
],
|
|
[
|
|
"action",
|
|
"evaluate"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"editable": true,
|
|
"load": "fn(326:345de0db50cf)",
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "dns_disable_cache",
|
|
"title": "Disable dns cache",
|
|
"description": "Disable cache and save cache in this query.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"route"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "rewrite_ttl",
|
|
"title": "Rewrite TTL",
|
|
"description": "Rewrite TTL in DNS responses.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"route"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "uinteger",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "client_subnet",
|
|
"title": "EDNS Client subnet",
|
|
"description": "Append a <code>edns0-subnet</code> OPT extra record with the specified IP prefix to every query by default.<br/>If value is an IP address instead of prefix, <code>/32</code> or <code>/128</code> will be appended automatically.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"route"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "or(cidr, ipaddr)",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "match_response",
|
|
"title": "Match response",
|
|
"description": "1 matches the latest untagged evaluate result; other values match an evaluate tag (1.14).",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"route"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "evaluate_tag",
|
|
"title": "Evaluate tag",
|
|
"description": "Optional tag for this evaluate result.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"evaluate"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "race",
|
|
"title": "Race",
|
|
"description": "Judge this response-dependent rule in parallel; first match wins (1.14).",
|
|
"depends": [
|
|
{
|
|
"action": "route",
|
|
"match_response": {}
|
|
}
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "speculative",
|
|
"title": "Speculative",
|
|
"description": "Send the query before pending race rules are judged (1.14).",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"route"
|
|
],
|
|
[
|
|
"action",
|
|
"evaluate"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "disable_optimistic_cache",
|
|
"title": "Disable optimistic cache",
|
|
"description": "Disable optimistic DNS caching for this query.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"route"
|
|
],
|
|
[
|
|
"action",
|
|
"evaluate"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "dns_timeout",
|
|
"title": "Query timeout",
|
|
"description": "Override dns.timeout for this query, in seconds.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"route"
|
|
],
|
|
[
|
|
"action",
|
|
"evaluate"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "uinteger",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "remove_client_subnet",
|
|
"title": "Remove EDNS client subnet",
|
|
"description": "Remove the edns0-subnet record from the query (1.14).",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"route"
|
|
],
|
|
[
|
|
"action",
|
|
"evaluate"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "response_rcode",
|
|
"title": "Response RCode",
|
|
"description": "Match the evaluated response code (requires match_response).",
|
|
"depends": [
|
|
{
|
|
"action": "route",
|
|
"match_response": {}
|
|
}
|
|
],
|
|
"values": [
|
|
[
|
|
"NOERROR",
|
|
null
|
|
],
|
|
[
|
|
"FORMERR",
|
|
null
|
|
],
|
|
[
|
|
"SERVFAIL",
|
|
null
|
|
],
|
|
[
|
|
"NXDOMAIN",
|
|
null
|
|
],
|
|
[
|
|
"NOTIMP",
|
|
null
|
|
],
|
|
[
|
|
"REFUSED",
|
|
null
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "response_answer",
|
|
"title": "Response answer",
|
|
"description": "Text DNS records to match in the evaluated answer.",
|
|
"depends": [
|
|
{
|
|
"action": "route",
|
|
"match_response": {}
|
|
}
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "response_ns",
|
|
"title": "Response NS",
|
|
"description": null,
|
|
"depends": [
|
|
{
|
|
"action": "route",
|
|
"match_response": {}
|
|
}
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "response_extra",
|
|
"title": "Response extra",
|
|
"description": null,
|
|
"depends": [
|
|
{
|
|
"action": "route",
|
|
"match_response": {}
|
|
}
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "reject_method",
|
|
"title": "Method",
|
|
"description": null,
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"reject"
|
|
]
|
|
],
|
|
"values": [
|
|
[
|
|
"default",
|
|
"Reply with REFUSED"
|
|
],
|
|
[
|
|
"drop",
|
|
"Drop requests"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "default",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "reject_no_drop",
|
|
"title": "Don't drop requests",
|
|
"description": "<code>Method</code> will be temporarily overwritten to <code>Drop requests</code> after 50 triggers in 30s if not enabled.",
|
|
"depends": [
|
|
[
|
|
"reject_method",
|
|
"default"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "predefined_rcode",
|
|
"title": "RCode",
|
|
"description": "The response code.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"predefined"
|
|
]
|
|
],
|
|
"values": [
|
|
[
|
|
"NOERROR",
|
|
null
|
|
],
|
|
[
|
|
"FORMERR",
|
|
null
|
|
],
|
|
[
|
|
"SERVFAIL",
|
|
null
|
|
],
|
|
[
|
|
"NXDOMAIN",
|
|
null
|
|
],
|
|
[
|
|
"NOTIMP",
|
|
null
|
|
],
|
|
[
|
|
"REFUSED",
|
|
null
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "NOERROR",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "predefined_answer",
|
|
"title": "Answer",
|
|
"description": "List of text DNS record to respond as answers.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"predefined"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "predefined_ns",
|
|
"title": "NS",
|
|
"description": "List of text DNS record to respond as name servers.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"predefined"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "predefined_extra",
|
|
"title": "Extra records",
|
|
"description": "List of text DNS record to respond as extra records.",
|
|
"depends": [
|
|
[
|
|
"action",
|
|
"predefined"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "domain",
|
|
"title": "Domain name",
|
|
"description": "Match full domain.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "hostname",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "domain_suffix",
|
|
"title": "Domain suffix",
|
|
"description": "Match domain suffix.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "domain_keyword",
|
|
"title": "Domain keyword",
|
|
"description": "Match domain using keyword.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "domain_regex",
|
|
"title": "Domain regex",
|
|
"description": "Match domain using regular expression.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "source_ip_cidr",
|
|
"title": "Source IP CIDR",
|
|
"description": "Match source IP CIDR.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "or(cidr, ipaddr)",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "source_ip_is_private",
|
|
"title": "Match private source IP",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "ip_cidr",
|
|
"title": "IP CIDR",
|
|
"description": "Match IP CIDR with the evaluated response (needs match_response; old rules are auto-wrapped in 1.14).",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "or(cidr, ipaddr)",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "ip_is_private",
|
|
"title": "Match private IP",
|
|
"description": "Match private IP with the evaluated response (needs match_response).",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "source_mac_address",
|
|
"title": "Source MAC address",
|
|
"description": "Match LAN device by MAC address.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "macaddr",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "source_hostname",
|
|
"title": "Source hostname",
|
|
"description": "Match LAN device hostname via neighbor resolution; enable find_neighbor.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "query_client_subnet",
|
|
"title": "Query EDNS client subnet",
|
|
"description": "Match the EDNS Client Subnet in the query (1.14).",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "or(cidr, ipaddr)",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "query_dnssec",
|
|
"title": "Match DNSSEC OK",
|
|
"description": "Match queries with the DNSSEC OK bit set (1.14).",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "source_port",
|
|
"title": "Source port",
|
|
"description": "Match source port.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "port",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "source_port_range",
|
|
"title": "Source port range",
|
|
"description": "Match source port range. Format as START:/:END/START:END.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true,
|
|
"validate": "fn(390:7d62701c74bd)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "port",
|
|
"title": "Port",
|
|
"description": "Match port.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "port",
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "port_range",
|
|
"title": "Port range",
|
|
"description": "Match port range. Format as START:/:END/START:END.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true,
|
|
"validate": "fn(390:7d62701c74bd)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "process_name",
|
|
"title": "Process name",
|
|
"description": "Match process name.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "process_path",
|
|
"title": "Process path",
|
|
"description": "Match process path.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "process_path_regex",
|
|
"title": "Process path (regex)",
|
|
"description": "Match process path using regular expression.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true
|
|
}
|
|
}
|
|
],
|
|
"subsection": null
|
|
},
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "SectionValue",
|
|
"name": "_ruleset",
|
|
"description": "ruleset",
|
|
"depends": [
|
|
[
|
|
"routing_mode",
|
|
"custom"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": {
|
|
"id": "GridSection:_ruleset#8",
|
|
"kind": "GridSection",
|
|
"name": "_ruleset",
|
|
"tabs": [],
|
|
"options": [
|
|
{
|
|
"kind": "Value",
|
|
"name": "label",
|
|
"title": "Label",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"load": "bind(206:006f14096ca5;\"homeproxy-pro\")",
|
|
"modalonly": true,
|
|
"validate": "bind(461:3a6d28762720;\"homeproxy-pro\",\"ruleset\",\"label\")"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "enabled",
|
|
"title": "Enable",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"editable": true,
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "type",
|
|
"title": "Type",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [
|
|
[
|
|
"local",
|
|
"Local"
|
|
],
|
|
[
|
|
"remote",
|
|
"Remote"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "remote",
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "format",
|
|
"title": "Format",
|
|
"description": "Rule-set file format. Leave it empty and HomeProxy reads it from the file itself; a value that does not match the file is corrected and reported in the log.",
|
|
"depends": [],
|
|
"values": [
|
|
[
|
|
"binary",
|
|
"Binary file"
|
|
],
|
|
[
|
|
"source",
|
|
"Source file"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"rmempty": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "path",
|
|
"title": "Path",
|
|
"description": "Rule-set file in /etc/homeproxy-pro/ruleset/. Copy it there first: the generator refuses a rule-set whose file is missing.",
|
|
"depends": [
|
|
[
|
|
"type",
|
|
"local"
|
|
]
|
|
],
|
|
"values": [
|
|
[
|
|
"/etc/homeproxy-pro/ruleset/example.srs",
|
|
null
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "file",
|
|
"modalonly": true,
|
|
"placeholder": "/etc/homeproxy-pro/ruleset/example.srs",
|
|
"rmempty": false,
|
|
"validate": "fn(279:52e3f36f3a3c)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "url",
|
|
"title": "Rule set URL",
|
|
"description": null,
|
|
"depends": [
|
|
[
|
|
"type",
|
|
"remote"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true,
|
|
"rmempty": false,
|
|
"validate": "fn(490:744c4c36ac8a)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "outbound",
|
|
"title": "Outbound",
|
|
"description": "Outbound used to download this rule-set (via sing-box 1.14 http_clients).",
|
|
"depends": [
|
|
[
|
|
"type",
|
|
"remote"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"load": "fn(293:8a1c8158e8ba)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "initial_path",
|
|
"title": "Initial path",
|
|
"description": "Local file with initial rule-set content; avoids blocking startup on first download (1.14). Must be under /etc/homeproxy-pro/ruleset/.",
|
|
"depends": [
|
|
[
|
|
"type",
|
|
"remote"
|
|
]
|
|
],
|
|
"values": [
|
|
[
|
|
"/etc/homeproxy-pro/ruleset/example.srs",
|
|
null
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "file",
|
|
"modalonly": true,
|
|
"placeholder": "/etc/homeproxy-pro/ruleset/example.srs",
|
|
"validate": "fn(279:52e3f36f3a3c)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "extra_tags",
|
|
"title": "Extra tags",
|
|
"description": "Extra rule-set tags sharing these options. Requires {tag} in path/url (1.14).",
|
|
"depends": [
|
|
[
|
|
"type",
|
|
"remote"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"modalonly": true,
|
|
"validate": "fn(481:26f8e4956cd4)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "update_interval",
|
|
"title": "Update interval",
|
|
"description": "Update interval of rule set, e.g. 24h or 3600 (seconds).",
|
|
"depends": [
|
|
[
|
|
"type",
|
|
"remote"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"placeholder": "24h",
|
|
"validate": "fn(242:e40abf36902a)"
|
|
}
|
|
}
|
|
],
|
|
"subsection": null
|
|
},
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "dns_server",
|
|
"title": "Overseas DNS server",
|
|
"description": "Resolves every domain that is not on the China DNS path, through the selected proxy node. A domestic resolver answers these queries with polluted or NXDOMAIN results, which is what makes a foreign site fail to resolve while the proxy itself works - so only overseas services are offered here. Support UDP, TCP, DoH, DoQ, DoT. TCP protocol will be used if not specified.",
|
|
"depends": [
|
|
{
|
|
"routing_mode": "custom",
|
|
"!reverse": true
|
|
}
|
|
],
|
|
"values": [
|
|
[
|
|
"1.1.1.1",
|
|
"CloudFlare Public DNS (1.1.1.1)"
|
|
],
|
|
[
|
|
"208.67.222.222",
|
|
"Cisco Public DNS (208.67.222.222)"
|
|
],
|
|
[
|
|
"8.8.8.8",
|
|
"Google Public DNS (8.8.8.8)"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "8.8.8.8",
|
|
"rmempty": false,
|
|
"validate": "fn(758:77dbe8107e5c)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "china_dns_server",
|
|
"title": "China DNS server",
|
|
"description": "Resolves the domains on the China path, so it has to be a domestic service to get the correct local CDN answers. Keep the default; the upstream may block UDP/53, in which case a DoH address (https://dns.alidns.com/dns-query, https://doh.pub/dns-query) also works. Support UDP, TCP, DoH, DoQ, DoT. This address is also the resolver the proxy DNS server above uses to look up its own hostname when that one is a domain - and a URL here is a domain, which cannot do that lookup itself, so with a URL here the proxy DNS server falls back to the WAN resolver. Enter the bare IP form of the same service to keep that lookup on this router.",
|
|
"depends": [
|
|
[
|
|
"routing_mode",
|
|
"bypass_mainland_china"
|
|
]
|
|
],
|
|
"values": [
|
|
[
|
|
"wan",
|
|
"WAN DNS (read from interface)"
|
|
],
|
|
[
|
|
"223.5.5.5",
|
|
"Aliyun Public DNS (223.5.5.5)"
|
|
],
|
|
[
|
|
"210.2.4.8",
|
|
"CNNIC Public DNS (210.2.4.8)"
|
|
],
|
|
[
|
|
"119.29.29.29",
|
|
"Tencent Public DNS (119.29.29.29)"
|
|
],
|
|
[
|
|
"117.50.10.10",
|
|
"ThreatBook Public DNS (117.50.10.10)"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "223.5.5.5",
|
|
"rmempty": false,
|
|
"validate": "fn(624:299cd4e865be)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "cn_ip_fallback",
|
|
"title": "CN-IP DNS fallback (sing-box 1.14)",
|
|
"description": "When the main DNS returns a mainland China IP, re-resolve via China DNS using evaluate/match_response.",
|
|
"depends": [
|
|
[
|
|
"routing_mode",
|
|
"bypass_mainland_china"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "SectionValue",
|
|
"name": "_dns_cache",
|
|
"description": "dns",
|
|
"depends": [
|
|
{
|
|
"routing_mode": "custom",
|
|
"!reverse": true
|
|
}
|
|
],
|
|
"values": [],
|
|
"subsection": {
|
|
"id": "GridSection:_dns_cache#9",
|
|
"kind": "GridSection",
|
|
"name": "_dns_cache",
|
|
"tabs": [],
|
|
"options": [
|
|
{
|
|
"kind": "Flag",
|
|
"name": "optimistic_cache",
|
|
"title": "Optimistic DNS cache",
|
|
"description": "Return expired cache immediately and refresh in background (sing-box 1.14).",
|
|
"depends": [
|
|
[
|
|
"disable_cache",
|
|
"0"
|
|
],
|
|
[
|
|
"disable_cache_expire",
|
|
"0"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "optimistic_timeout",
|
|
"title": "Optimistic cache timeout",
|
|
"description": "Max time an expired entry may be served. Examples: 3d, 1h.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "dns_timeout",
|
|
"title": "DNS query timeout",
|
|
"description": "Default timeout per DNS query in seconds (sing-box default: 10).",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "uinteger"
|
|
}
|
|
},
|
|
{
|
|
"kind": "Flag",
|
|
"name": "cache_file_store_dns",
|
|
"title": "Store DNS cache",
|
|
"description": "Persist DNS cache across restarts (sing-box 1.14, replaces Store RDRC).",
|
|
"depends": [
|
|
[
|
|
"disable_cache",
|
|
"0"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"rmempty": false
|
|
}
|
|
}
|
|
],
|
|
"subsection": null
|
|
},
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "SectionValue",
|
|
"name": "_control",
|
|
"description": "control",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": {
|
|
"id": "GridSection:_control#10",
|
|
"kind": "GridSection",
|
|
"name": "_control",
|
|
"tabs": [
|
|
[
|
|
"interface",
|
|
"Interface Control"
|
|
],
|
|
[
|
|
"lan_ip_policy",
|
|
"LAN IP Policy"
|
|
],
|
|
[
|
|
"wan_ip_policy",
|
|
"WAN IP Policy"
|
|
],
|
|
[
|
|
"proxy_domain_list",
|
|
"Proxy Domain List"
|
|
],
|
|
[
|
|
"direct_domain_list",
|
|
"Direct Domain List"
|
|
]
|
|
],
|
|
"options": [
|
|
{
|
|
"kind": "class {}",
|
|
"name": "listen_interfaces",
|
|
"title": "Listen interfaces",
|
|
"description": "Only process traffic from specific interfaces. Leave empty for all.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"multiple": true,
|
|
"noaliases": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "class {}",
|
|
"name": "bind_interface",
|
|
"title": "Bind interface",
|
|
"description": "Bind outbound traffic to specific interface. Leave empty to auto detect.",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"multiple": false,
|
|
"noaliases": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "lan_proxy_mode",
|
|
"title": "Proxy filter mode",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [
|
|
[
|
|
"disabled",
|
|
"Disable"
|
|
],
|
|
[
|
|
"listed_only",
|
|
"Proxy listed only"
|
|
],
|
|
[
|
|
"except_listed",
|
|
"Proxy all except listed"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "disabled",
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "lan_ip_policy",
|
|
"title": "lan_direct_ipv4_ips",
|
|
"description": "Direct IPv4 IP-s",
|
|
"depends": [
|
|
[
|
|
"lan_proxy_mode",
|
|
"except_listed"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "lan_ip_policy",
|
|
"title": "lan_direct_ipv6_ips",
|
|
"description": "Direct IPv6 IP-s",
|
|
"depends": [
|
|
{
|
|
"lan_proxy_mode": "except_listed",
|
|
"homeproxy-pro.config.ipv6_support": "1"
|
|
}
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "lan_ip_policy",
|
|
"title": "lan_direct_mac_addrs",
|
|
"description": "Direct MAC-s",
|
|
"depends": [
|
|
[
|
|
"lan_proxy_mode",
|
|
"except_listed"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "lan_ip_policy",
|
|
"title": "lan_proxy_ipv4_ips",
|
|
"description": "Proxy IPv4 IP-s",
|
|
"depends": [
|
|
[
|
|
"lan_proxy_mode",
|
|
"listed_only"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "lan_ip_policy",
|
|
"title": "lan_proxy_ipv6_ips",
|
|
"description": "Proxy IPv6 IP-s",
|
|
"depends": [
|
|
{
|
|
"lan_proxy_mode": "listed_only",
|
|
"homeproxy-pro.config.ipv6_support": "1"
|
|
}
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "lan_ip_policy",
|
|
"title": "lan_proxy_mac_addrs",
|
|
"description": "Proxy MAC-s",
|
|
"depends": [
|
|
[
|
|
"lan_proxy_mode",
|
|
"listed_only"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "lan_ip_policy",
|
|
"title": "lan_gaming_mode_ipv4_ips",
|
|
"description": "Gaming mode IPv4 IP-s",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "lan_ip_policy",
|
|
"title": "lan_gaming_mode_ipv6_ips",
|
|
"description": "Gaming mode IPv6 IP-s",
|
|
"depends": [
|
|
[
|
|
"homeproxy-pro.config.ipv6_support",
|
|
"1"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "lan_ip_policy",
|
|
"title": "lan_gaming_mode_mac_addrs",
|
|
"description": "Gaming mode MAC-s",
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "lan_ip_policy",
|
|
"title": "lan_global_proxy_ipv4_ips",
|
|
"description": "Global proxy IPv4 IP-s",
|
|
"depends": [
|
|
{
|
|
"homeproxy-pro.config.routing_mode": "custom",
|
|
"!reverse": true
|
|
}
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "lan_ip_policy",
|
|
"title": "lan_global_proxy_ipv6_ips",
|
|
"description": "Global proxy IPv6 IP-s",
|
|
"depends": [
|
|
{
|
|
"homeproxy-pro.config.routing_mode": {},
|
|
"homeproxy-pro.config.ipv6_support": "1"
|
|
}
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "lan_ip_policy",
|
|
"title": "lan_global_proxy_mac_addrs",
|
|
"description": "Global proxy MAC-s",
|
|
"depends": [
|
|
{
|
|
"homeproxy-pro.config.routing_mode": "custom",
|
|
"!reverse": true
|
|
}
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "wan_proxy_ipv4_ips",
|
|
"title": "Proxy IPv4 IP-s",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "or(ip4addr, cidr4)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "wan_proxy_ipv6_ips",
|
|
"title": "Proxy IPv6 IP-s",
|
|
"description": null,
|
|
"depends": [
|
|
[
|
|
"homeproxy-pro.config.ipv6_support",
|
|
"1"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "or(ip6addr, cidr6)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "wan_direct_ipv4_ips",
|
|
"title": "Direct IPv4 IP-s",
|
|
"description": null,
|
|
"depends": [],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "or(ip4addr, cidr4)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "wan_direct_ipv6_ips",
|
|
"title": "Direct IPv6 IP-s",
|
|
"description": null,
|
|
"depends": [
|
|
[
|
|
"homeproxy-pro.config.ipv6_support",
|
|
"1"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "or(ip6addr, cidr6)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "TextValue",
|
|
"name": "_proxy_domain_list",
|
|
"description": null,
|
|
"depends": [
|
|
{
|
|
"homeproxy-pro.config.routing_mode": "custom",
|
|
"!reverse": true
|
|
}
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "hostname",
|
|
"description": "One domain per line. No spaces, no comments, no wildcards; the backend rejects invalid characters and tells you which line.",
|
|
"load": "fn(274:3a38855f08ed)",
|
|
"monospace": true,
|
|
"remove": "fn(338:d04583a0e63e)",
|
|
"rows": 10,
|
|
"validate": "fn(203:c60da90ca2f3)",
|
|
"write": "fn(247:51376a274a47)"
|
|
}
|
|
},
|
|
{
|
|
"kind": "TextValue",
|
|
"name": "_direct_domain_list",
|
|
"description": null,
|
|
"depends": [
|
|
{
|
|
"homeproxy-pro.config.routing_mode": "custom",
|
|
"!reverse": true
|
|
}
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "hostname",
|
|
"description": "One domain per line. No spaces, no comments, no wildcards; the backend rejects invalid characters and tells you which line.",
|
|
"load": "fn(275:0bec3bd57ebe)",
|
|
"monospace": true,
|
|
"remove": "fn(339:4486a5c409ee)",
|
|
"rows": 10,
|
|
"validate": "fn(203:c60da90ca2f3)",
|
|
"write": "fn(248:6bd5224288bd)"
|
|
}
|
|
}
|
|
],
|
|
"subsection": null
|
|
},
|
|
"props": {}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "udp_mapping",
|
|
"title": "UDP NAT mapping (1.14)",
|
|
"description": null,
|
|
"depends": [
|
|
[
|
|
"proxy_mode",
|
|
"redirect_tproxy"
|
|
],
|
|
[
|
|
"proxy_mode",
|
|
"redirect_tun"
|
|
],
|
|
[
|
|
"proxy_mode",
|
|
"tun"
|
|
]
|
|
],
|
|
"values": [
|
|
[
|
|
"endpoint_independent",
|
|
"Endpoint independent"
|
|
],
|
|
[
|
|
"address_dependent",
|
|
"Address dependent"
|
|
],
|
|
[
|
|
"address_and_port_dependent",
|
|
"Address and port dependent"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "endpoint_independent",
|
|
"description": "sing-box default; recommended for home use (small NAT table, QUIC/game friendly). Choose stricter only for specific UDP issues.",
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "udp_filtering",
|
|
"title": "UDP NAT filtering (1.14)",
|
|
"description": null,
|
|
"depends": [
|
|
[
|
|
"proxy_mode",
|
|
"redirect_tproxy"
|
|
],
|
|
[
|
|
"proxy_mode",
|
|
"redirect_tun"
|
|
],
|
|
[
|
|
"proxy_mode",
|
|
"tun"
|
|
]
|
|
],
|
|
"values": [
|
|
[
|
|
"endpoint_independent",
|
|
"Endpoint independent"
|
|
],
|
|
[
|
|
"address_dependent",
|
|
"Address dependent"
|
|
],
|
|
[
|
|
"address_and_port_dependent",
|
|
"Address and port dependent"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "endpoint_independent",
|
|
"description": "sing-box default; recommended for home use (accepts replies from any remote after mapping). Choose stricter only for specific UDP issues.",
|
|
"rmempty": false
|
|
}
|
|
},
|
|
{
|
|
"kind": "Value",
|
|
"name": "udp_nat_max",
|
|
"title": "UDP NAT sessions max (1.14)",
|
|
"description": null,
|
|
"depends": [
|
|
[
|
|
"proxy_mode",
|
|
"redirect_tproxy"
|
|
],
|
|
[
|
|
"proxy_mode",
|
|
"redirect_tun"
|
|
],
|
|
[
|
|
"proxy_mode",
|
|
"tun"
|
|
]
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "uinteger"
|
|
}
|
|
},
|
|
{
|
|
"kind": "ListValue",
|
|
"name": "tun_dns_mode",
|
|
"title": "TUN DNS mode (1.14)",
|
|
"description": "Since sing-box 1.14 the default (Unset) behaves as hijack: sing-box sets the platform interface DNS and hijacks port 53. On OpenWrt this overlaps with the own dnsmasq/nftables DNS hijack of this plugin, so keep Disabled on a gateway unless you need sing-box to own TUN DNS.",
|
|
"depends": [
|
|
[
|
|
"proxy_mode",
|
|
"redirect_tun"
|
|
],
|
|
[
|
|
"proxy_mode",
|
|
"tun"
|
|
]
|
|
],
|
|
"values": [
|
|
[
|
|
"default",
|
|
"Unset (default)"
|
|
],
|
|
[
|
|
"disabled",
|
|
"Disabled"
|
|
],
|
|
[
|
|
"native",
|
|
"Native"
|
|
],
|
|
[
|
|
"hijack",
|
|
"Hijack"
|
|
]
|
|
],
|
|
"subsection": null,
|
|
"props": {
|
|
"default": "default",
|
|
"rmempty": true
|
|
}
|
|
},
|
|
{
|
|
"kind": "DynamicList",
|
|
"name": "tun_dns_address",
|
|
"title": "TUN DNS addresses (1.14)",
|
|
"description": null,
|
|
"depends": [
|
|
{
|
|
"proxy_mode": {},
|
|
"tun_dns_mode": {}
|
|
}
|
|
],
|
|
"values": [],
|
|
"subsection": null,
|
|
"props": {
|
|
"datatype": "ipaddr",
|
|
"modalonly": true
|
|
}
|
|
}
|
|
],
|
|
"subsection": null
|
|
}
|
|
]
|
|
}
|