From fb34b505222cfd96dce652986b31a89fd73068fd Mon Sep 17 00:00:00 2001 From: database64128 Date: Sun, 7 Mar 2021 02:12:40 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=BF=20Interop:=20v2ray?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shadowsocks.Interop/V2Ray/Config.cs | 1 - Shadowsocks.Interop/V2Ray/Dns/ServerObject.cs | 6 +++++ Shadowsocks.Interop/V2Ray/DnsObject.cs | 9 +++++++ Shadowsocks.Interop/V2Ray/FakeDnsObject.cs | 15 +++++++++++ .../V2Ray/Inbound/SniffingObject.cs | 30 ++++++++++++++++++++++ Shadowsocks.Interop/V2Ray/InboundObject.cs | 10 ++------ .../V2Ray/Outbound/ProxySettingsObject.cs | 14 ++++++++++ Shadowsocks.Interop/V2Ray/RoutingObject.cs | 14 ++++++++++ 8 files changed, 90 insertions(+), 9 deletions(-) create mode 100644 Shadowsocks.Interop/V2Ray/FakeDnsObject.cs diff --git a/Shadowsocks.Interop/V2Ray/Config.cs b/Shadowsocks.Interop/V2Ray/Config.cs index a6682104..2f23f5d7 100644 --- a/Shadowsocks.Interop/V2Ray/Config.cs +++ b/Shadowsocks.Interop/V2Ray/Config.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using System.Text.Json.Serialization; namespace Shadowsocks.Interop.V2Ray { diff --git a/Shadowsocks.Interop/V2Ray/Dns/ServerObject.cs b/Shadowsocks.Interop/V2Ray/Dns/ServerObject.cs index c9a56681..d340e5b2 100644 --- a/Shadowsocks.Interop/V2Ray/Dns/ServerObject.cs +++ b/Shadowsocks.Interop/V2Ray/Dns/ServerObject.cs @@ -17,6 +17,12 @@ namespace Shadowsocks.Interop.V2Ray.Dns public int Port { get; set; } /// + /// Gets or sets the client IP + /// to include in DNS queries. + /// + public string? ClientIp { get; set; } + + /// /// Gets or sets the list of domains /// that prefers this DNS server. /// diff --git a/Shadowsocks.Interop/V2Ray/DnsObject.cs b/Shadowsocks.Interop/V2Ray/DnsObject.cs index 23381319..1fc15c4f 100644 --- a/Shadowsocks.Interop/V2Ray/DnsObject.cs +++ b/Shadowsocks.Interop/V2Ray/DnsObject.cs @@ -23,6 +23,15 @@ namespace Shadowsocks.Interop.V2Ray /// public string? ClientIp { get; set; } + /// + /// Gets or sets whether to disable internal DNS cache. + /// Defaults to false, or DNS cache is enabled. + /// + public bool DisableCache { get; set; } + + /// + /// Gets or sets the inbound tag for DNS traffic. + /// public string? Tag { get; set; } public DnsObject() diff --git a/Shadowsocks.Interop/V2Ray/FakeDnsObject.cs b/Shadowsocks.Interop/V2Ray/FakeDnsObject.cs new file mode 100644 index 00000000..40af739d --- /dev/null +++ b/Shadowsocks.Interop/V2Ray/FakeDnsObject.cs @@ -0,0 +1,15 @@ +namespace Shadowsocks.Interop.V2Ray +{ + public class FakeDnsObject + { + /// + /// Gets or sets the IP pool CIDR. + /// + public string IpPool { get; set; } = "240.0.0.0/8"; + + /// + /// Gets or sets the IP pool size. + /// + public long PoolSize { get; set; } = 65535L; + } +} diff --git a/Shadowsocks.Interop/V2Ray/Inbound/SniffingObject.cs b/Shadowsocks.Interop/V2Ray/Inbound/SniffingObject.cs index 23c41336..07d97bca 100644 --- a/Shadowsocks.Interop/V2Ray/Inbound/SniffingObject.cs +++ b/Shadowsocks.Interop/V2Ray/Inbound/SniffingObject.cs @@ -15,6 +15,14 @@ namespace Shadowsocks.Interop.V2Ray.Inbound /// public List DestOverride { get; set; } + /// + /// Gets or sets whether the target address is sniffed + /// solely based on metadata. + /// Defaults to false. + /// Change to true to use FakeDNS. + /// + public bool MetadataOnly { get; set; } + public SniffingObject() { Enabled = true; @@ -24,5 +32,27 @@ namespace Shadowsocks.Interop.V2Ray.Inbound "tls", }; } + + public static SniffingObject Default => new() + { + Enabled = false, + DestOverride = new() + { + "http", + "tls", + }, + }; + + public static SniffingObject DefaultFakeDns => new() + { + Enabled = true, + DestOverride = new() + { + "http", + "tls", + "fakedns", + }, + MetadataOnly = true, + }; } } diff --git a/Shadowsocks.Interop/V2Ray/InboundObject.cs b/Shadowsocks.Interop/V2Ray/InboundObject.cs index 94ed120d..9a4afcb1 100644 --- a/Shadowsocks.Interop/V2Ray/InboundObject.cs +++ b/Shadowsocks.Interop/V2Ray/InboundObject.cs @@ -27,10 +27,7 @@ namespace Shadowsocks.Interop.V2Ray Port = 1080, Protocol = "socks", Settings = Protocols.Socks.InboundConfigurationObject.Default, - Sniffing = new() - { - Enabled = false, - }, + Sniffing = SniffingObject.Default, }; public static InboundObject DefaultLocalHttp => new() @@ -39,10 +36,7 @@ namespace Shadowsocks.Interop.V2Ray Listen = "127.0.0.1", Port = 8080, Protocol = "http", - Sniffing = new() - { - Enabled = false, - }, + Sniffing = SniffingObject.Default, }; } } diff --git a/Shadowsocks.Interop/V2Ray/Outbound/ProxySettingsObject.cs b/Shadowsocks.Interop/V2Ray/Outbound/ProxySettingsObject.cs index 6b476d93..2baf2194 100644 --- a/Shadowsocks.Interop/V2Ray/Outbound/ProxySettingsObject.cs +++ b/Shadowsocks.Interop/V2Ray/Outbound/ProxySettingsObject.cs @@ -8,9 +8,23 @@ namespace Shadowsocks.Interop.V2Ray.Outbound /// public string Tag { get; set; } + /// + /// Gets or sets whether to keep the protocol + /// itself's transport layer intact. + /// Defaults to false, or only proxy internal TCP traffic. + /// Set to true to proxy the protocol. + /// The tag will act as a forward proxy. + /// + public bool TransportLayer { get; set; } + public ProxySettingsObject() { Tag = ""; } + + public static ProxySettingsObject Default => new() + { + TransportLayer = true, + }; } } diff --git a/Shadowsocks.Interop/V2Ray/RoutingObject.cs b/Shadowsocks.Interop/V2Ray/RoutingObject.cs index 97aaaea5..093c20e7 100644 --- a/Shadowsocks.Interop/V2Ray/RoutingObject.cs +++ b/Shadowsocks.Interop/V2Ray/RoutingObject.cs @@ -13,6 +13,13 @@ namespace Shadowsocks.Interop.V2Ray public string DomainStrategy { get; set; } /// + /// Gets or sets the domain matcher used for routing. + /// Default value: "" (binary search). + /// Available values: "" | "hybrid" + /// + public string DomainMatcher { get; set; } + + /// /// Gets or sets the list of routing rules. /// public List Rules { get; set; } @@ -25,9 +32,16 @@ namespace Shadowsocks.Interop.V2Ray public RoutingObject() { DomainStrategy = "AsIs"; + DomainMatcher = ""; Rules = new(); } + public static RoutingObject Default => new() + { + DomainStrategy = "IPOnDemand", + DomainMatcher = "hybrid", + }; + public static RoutingObject DefaultBalancers => new() { Balancers = new(),