浏览代码

Add documentation and example for linux tun

世界 3 年之前
父节点
当前提交
b417bd5be4
共有 6 个文件被更改,包括 162 次插入4 次删除
  1. 78 0
      docs/configuration/inbound/tun.md
  2. 13 2
      docs/configuration/route/index.md
  3. 2 1
      docs/examples/index.md
  4. 66 0
      docs/examples/ss-tun.md
  5. 2 0
      mkdocs.yml
  6. 1 1
      option/route.go

+ 78 - 0
docs/configuration/inbound/tun.md

@@ -0,0 +1,78 @@
+!!! error ""
+
+    Linux only
+
+### Structure
+
+```json
+{
+  "inbounds": [
+    {
+      "type": "tun",
+      "tag": "tun-in",
+      
+      "inet4_address": "172.19.0.1/30",
+      "inet6_address": "fdfe:dcba:9876::1/128",
+      "mtu": 1500,
+      "auto_route": true,
+      "hijack_dns": true,
+      
+      "sniff": true,
+      "sniff_override_destination": false,
+      "domain_strategy": "prefer_ipv4"
+    }
+  ]
+}
+```
+
+### Tun Fields
+
+#### inet4_address
+
+==Required==
+
+IPv4 prefix for the tun interface.
+
+#### inet6_address
+
+IPv6 prefix for the tun interface.
+
+#### mtu
+
+The maximum transmission unit.
+
+#### auto_route
+
+Set the default route to the Tun.
+
+!!! error ""
+
+    To avoid traffic loopback, set `route.auto_delect_interface` or `outbound.bind_interface`
+
+#### hijack_dns
+
+Hijack TCP/UDP DNS requests to the built-in DNS adapter.
+
+### Listen Fields
+
+#### sniff
+
+Enable sniffing.
+
+Reads domain names for routing, supports HTTP TLS for TCP, QUIC for UDP.
+
+This does not break zero copy, like splice.
+
+#### sniff_override_destination
+
+Override the connection destination address with the sniffed domain.
+
+If the domain name is invalid (like tor), this will not work.
+
+#### domain_strategy
+
+One of `prefer_ipv4` `prefer_ipv6` `ipv4_only` `ipv6_only`.
+
+If set, the requested domain name will be resolved to IP before routing.
+
+If `sniff_override_destination` is in effect, its value will be taken as a fallback.

+ 13 - 2
docs/configuration/route/index.md

@@ -6,7 +6,8 @@
     "geoip": {},
     "geoip": {},
     "geosite": {},
     "geosite": {},
     "rules": [],
     "rules": [],
-    "final": ""
+    "final": "",
+    "auto_detect_interface": false
   }
   }
 }
 }
 ```
 ```
@@ -21,4 +22,14 @@
 
 
 #### final
 #### final
 
 
-Default outbound tag. the first outbound will be used if empty.
+Default outbound tag. the first outbound will be used if empty.
+
+#### auto_detect_interface
+
+!!! error ""
+
+    Linux only
+
+Bind outbound connections to the default NIC by default to prevent routing loops under Tun.
+
+Takes no effect if `outbound.bind_interface` is set.

+ 2 - 1
docs/examples/index.md

@@ -3,4 +3,5 @@
 Configuration examples for sing-box.
 Configuration examples for sing-box.
 
 
 * [Shadowsocks Server](./ss-server)
 * [Shadowsocks Server](./ss-server)
-* [Shadowsocks Client](./ss-client)
+* [Shadowsocks Client](./ss-client)
+* [Shadowsocks Tun](./ss-tun)

+ 66 - 0
docs/examples/ss-tun.md

@@ -0,0 +1,66 @@
+```json
+{
+  "dns": {
+    "servers": [
+      {
+        "tag": "google",
+        "address": "tls://8.8.8.8"
+      },
+      {
+        "tag": "local",
+        "address": "223.5.5.5",
+        "detour": "direct"
+      }
+    ],
+    "rules": [
+      {
+        "domain": "mydomain.com",
+        "geosite": "cn",
+        "server": "local"
+      }
+    ],
+    "strategy": "ipv4_only"
+  },
+  "inbounds": [
+    {
+      "type": "tun",
+      "inet4_address": "172.19.0.1/30",
+      "auto_route": true,
+      "hijack_dns": true,
+      "sniff": true
+    }
+  ],
+  "outbounds": [
+    {
+      "type": "shadowsocks",
+      "tag": "proxy",
+      "server": "mydomain.com",
+      "server_port": 8080,
+      "method": "2022-blake3-aes-128-gcm",
+      "password": "8JCsPssfgS8tiRwiMlhARg=="
+    },
+    {
+      "type": "direct",
+      "tag": "direct"
+    },
+    {
+      "type": "block",
+      "tag": "block"
+    }
+  ],
+  "route": {
+    "rules": [
+      {
+        "geosite": "category-ads-all",
+        "outbound": "block"
+      },
+      {
+        "geosite": "cn",
+        "geoip": "cn",
+        "outbound": "direct"
+      }
+    ],
+    "auto_detect_interface": true
+  }
+}
+```

+ 2 - 0
mkdocs.yml

@@ -40,6 +40,7 @@ nav:
           - DNS Rule: configuration/dns/rule.md
           - DNS Rule: configuration/dns/rule.md
       - Inbound:
       - Inbound:
           - configuration/inbound/index.md
           - configuration/inbound/index.md
+          - Tun: configuration/inbound/tun.md
           - Direct: configuration/inbound/direct.md
           - Direct: configuration/inbound/direct.md
           - Mixed: configuration/inbound/mixed.md
           - Mixed: configuration/inbound/mixed.md
           - Socks: configuration/inbound/socks.md
           - Socks: configuration/inbound/socks.md
@@ -61,6 +62,7 @@ nav:
       - examples/index.md
       - examples/index.md
       - Shadowsocks Server: examples/ss-server.md
       - Shadowsocks Server: examples/ss-server.md
       - Shadowsocks Client: examples/ss-client.md
       - Shadowsocks Client: examples/ss-client.md
+      - Shadowsocks Tun: examples/ss-tun.md
   - Benchmark: benchmark.md
   - Benchmark: benchmark.md
 markdown_extensions:
 markdown_extensions:
   - pymdownx.inlinehilite
   - pymdownx.inlinehilite

+ 1 - 1
option/route.go

@@ -69,7 +69,7 @@ func (r *Rule) UnmarshalJSON(bytes []byte) error {
 	}
 	}
 	var v any
 	var v any
 	switch r.Type {
 	switch r.Type {
-	case "":
+	case "", C.RuleTypeDefault:
 		r.Type = C.RuleTypeDefault
 		r.Type = C.RuleTypeDefault
 		v = &r.DefaultOptions
 		v = &r.DefaultOptions
 	case C.RuleTypeLogical:
 	case C.RuleTypeLogical: