From 54af11336319955b93c6905b7c6318a6e7e50b5a Mon Sep 17 00:00:00 2001 From: XYenon Date: Wed, 12 Oct 2022 16:20:17 +0800 Subject: [PATCH] Add custom route support (#147) --- docs/configuration/inbound/tun.md | 16 ++++++++++++++++ docs/configuration/inbound/tun.zh.md | 18 +++++++++++++++++- go.mod | 4 ++-- go.sum | 8 ++++---- inbound/tun.go | 2 ++ option/tun.go | 2 ++ 6 files changed, 43 insertions(+), 7 deletions(-) diff --git a/docs/configuration/inbound/tun.md b/docs/configuration/inbound/tun.md index 2575b589..b66ce170 100644 --- a/docs/configuration/inbound/tun.md +++ b/docs/configuration/inbound/tun.md @@ -14,6 +14,14 @@ "mtu": 9000, "auto_route": true, "strict_route": true, + "inet4_route_address": [ + "0.0.0.0/1", + "128.0.0.0/1" + ], + "inet6_route_address": [ + "::/1", + "8000::/1" + ], "endpoint_independent_nat": false, "stack": "system", "include_uid": [ @@ -99,6 +107,14 @@ not be accessible by others. Use segmented `auto_route` routing settings, which may help if you're using a dial-up network. +#### inet4_route_address + +Use custom routes instead of default when `auto_route` is enabled. + +#### inet6_route_address + +Use custom routes instead of default when `auto_route` is enabled. + #### endpoint_independent_nat !!! info "" diff --git a/docs/configuration/inbound/tun.zh.md b/docs/configuration/inbound/tun.zh.md index f4756660..2ae441e2 100644 --- a/docs/configuration/inbound/tun.zh.md +++ b/docs/configuration/inbound/tun.zh.md @@ -15,6 +15,14 @@ "mtu": 9000, "auto_route": true, "strict_route": true, + "inet4_route_address": [ + "0.0.0.0/1", + "128.0.0.0/1" + ], + "inet6_route_address": [ + "::/1", + "8000::/1" + ], "endpoint_independent_nat": false, "stack": "system", "include_uid": [ @@ -99,6 +107,14 @@ tun 接口的 IPv6 前缀。 使用分段的 `auto_route` 路由设置,如果您使用的是拨号网络,这可能会有所帮助。 +#### inet4_route_address + +启用 `auto_route` 时使用自定义路由而不是默认路由。 + +#### inet6_route_address + +启用 `auto_route` 时使用自定义路由而不是默认路由。 + #### endpoint_independent_nat 启用独立于端点的 NAT。 @@ -166,4 +182,4 @@ TCP/IP 栈。 ### 监听字段 -参阅 [监听字段](/zh/configuration/shared/listen/)。 \ No newline at end of file +参阅 [监听字段](/zh/configuration/shared/listen/)。 diff --git a/go.mod b/go.mod index 968310f6..66e53c81 100644 --- a/go.mod +++ b/go.mod @@ -26,7 +26,7 @@ require ( github.com/sagernet/sing v0.0.0-20221008120626-60a9910eefe4 github.com/sagernet/sing-dns v0.0.0-20220929010544-ee843807aae3 github.com/sagernet/sing-shadowsocks v0.0.0-20220819002358-7461bb09a8f6 - github.com/sagernet/sing-tun v0.0.0-20221009132126-1ede22e6eb7e + github.com/sagernet/sing-tun v0.0.0-20221010052616-99492e0d70a1 github.com/sagernet/sing-vmess v0.0.0-20220925083655-063bc85ea685 github.com/sagernet/smux v0.0.0-20220831015742-e0f1988e3195 github.com/sagernet/websocket v0.0.0-20220913015213-615516348b4e @@ -37,7 +37,7 @@ require ( go4.org/netipx v0.0.0-20220925034521-797b0c90d8ab golang.org/x/crypto v0.0.0-20221005025214-4161e89ecf1b golang.org/x/net v0.0.0-20221004154528-8021a29435af - golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec + golang.org/x/sys v0.0.0-20221006211917-84dc82d7e875 golang.zx2c4.com/wireguard v0.0.0-20220829161405-d1d08426b27b google.golang.org/grpc v1.49.0 google.golang.org/protobuf v1.28.1 diff --git a/go.sum b/go.sum index 66a9e607..368221ab 100644 --- a/go.sum +++ b/go.sum @@ -151,8 +151,8 @@ github.com/sagernet/sing-dns v0.0.0-20220929010544-ee843807aae3 h1:AEdyJxEDFq38z github.com/sagernet/sing-dns v0.0.0-20220929010544-ee843807aae3/go.mod h1:SrvWLfOSlnFmH32CWXicfilAGgIXR0VjrH6yRbuXYww= github.com/sagernet/sing-shadowsocks v0.0.0-20220819002358-7461bb09a8f6 h1:JJfDeYYhWunvtxsU/mOVNTmFQmnzGx9dY034qG6G3g4= github.com/sagernet/sing-shadowsocks v0.0.0-20220819002358-7461bb09a8f6/go.mod h1:EX3RbZvrwAkPI2nuGa78T2iQXmrkT+/VQtskjou42xM= -github.com/sagernet/sing-tun v0.0.0-20221009132126-1ede22e6eb7e h1:UIE1wKIr92d2VUWox3On8JQknvewl7aeG+JfthISX0w= -github.com/sagernet/sing-tun v0.0.0-20221009132126-1ede22e6eb7e/go.mod h1:qbqV9lwcXJnj1Tw4we7oA6Z8zGE/kCXQBCzuhzRWVw8= +github.com/sagernet/sing-tun v0.0.0-20221010052616-99492e0d70a1 h1:y9bgx5fcmjIAR5S9jueTIqDm9N2lkIHYEYWPE/x+pHU= +github.com/sagernet/sing-tun v0.0.0-20221010052616-99492e0d70a1/go.mod h1:1u3pjXA9HmH7kRiBJqM3C/zPxrxnCLd3svmqtub/RFU= github.com/sagernet/sing-vmess v0.0.0-20220925083655-063bc85ea685 h1:AZzFNRR/ZwMTceUQ1b/mxx6oyKqmFymdMn/yleJmoVM= github.com/sagernet/sing-vmess v0.0.0-20220925083655-063bc85ea685/go.mod h1:bwhAdSNET1X+j9DOXGj9NIQR39xgcWIk1rOQ9lLD+gM= github.com/sagernet/smux v0.0.0-20220831015742-e0f1988e3195 h1:5VBIbVw9q7aKbrFdT83mjkyvQ+VaRsQ6yflTepfln38= @@ -264,8 +264,8 @@ golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220731174439-a90be440212d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec h1:BkDtF2Ih9xZ7le9ndzTA7KJow28VbQW3odyk/8drmuI= -golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221006211917-84dc82d7e875 h1:AzgQNqF+FKwyQ5LbVrVqOcuuFB67N47F9+htZYH0wFM= +golang.org/x/sys v0.0.0-20221006211917-84dc82d7e875/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= diff --git a/inbound/tun.go b/inbound/tun.go index bf908f3e..eb6341ce 100644 --- a/inbound/tun.go +++ b/inbound/tun.go @@ -80,6 +80,8 @@ func NewTun(ctx context.Context, router adapter.Router, logger log.ContextLogger Inet6Address: common.Map(options.Inet6Address, option.ListenPrefix.Build), AutoRoute: options.AutoRoute, StrictRoute: options.StrictRoute, + Inet4RouteAddress: common.Map(options.Inet4RouteAddress, option.ListenPrefix.Build), + Inet6RouteAddress: common.Map(options.Inet6RouteAddress, option.ListenPrefix.Build), IncludeUID: includeUID, ExcludeUID: excludeUID, IncludeAndroidUser: options.IncludeAndroidUser, diff --git a/option/tun.go b/option/tun.go index b04e0dc6..a02ebaa7 100644 --- a/option/tun.go +++ b/option/tun.go @@ -7,6 +7,8 @@ type TunInboundOptions struct { Inet6Address Listable[ListenPrefix] `json:"inet6_address,omitempty"` AutoRoute bool `json:"auto_route,omitempty"` StrictRoute bool `json:"strict_route,omitempty"` + Inet4RouteAddress Listable[ListenPrefix] `json:"inet4_route_address,omitempty"` + Inet6RouteAddress Listable[ListenPrefix] `json:"inet6_route_address,omitempty"` IncludeUID Listable[uint32] `json:"include_uid,omitempty"` IncludeUIDRange Listable[string] `json:"include_uid_range,omitempty"` ExcludeUID Listable[uint32] `json:"exclude_uid,omitempty"`