@@ -2,8 +2,10 @@ package core
2
2
3
3
import (
4
4
"bepass/cache"
5
+ "bepass/dialer"
5
6
"bepass/doh"
6
7
"bepass/logger"
8
+ "bepass/resolve"
7
9
"bepass/server"
8
10
"bepass/socks5"
9
11
"fmt"
@@ -16,21 +18,26 @@ import (
16
18
)
17
19
18
20
type Config struct {
19
- TLSHeaderLength int `mapstructure:"TLSHeaderLength"`
20
- DnsCacheTTL int `mapstructure:"DnsCacheTTL"`
21
- WorkerAddress string `mapstructure:"WorkerAddress"`
22
- WorkerIPPortAddress string `mapstructure:"WorkerIPPortAddress"`
23
- WorkerEnabled bool `mapstructure:"WorkerEnabled"`
24
- WorkerDNSOnly bool `mapstructure:"WorkerDNSOnly"`
25
- EnableLowLevelSockets bool `mapstructure:"EnableLowLevelSockets"`
26
- RemoteDNSAddr string `mapstructure:"RemoteDNSAddr"`
27
- BindAddress string `mapstructure:"BindAddress"`
28
- ChunksLengthBeforeSni [2 ]int `mapstructure:"ChunksLengthBeforeSni"`
29
- SniChunksLength [2 ]int `mapstructure:"SniChunksLength"`
30
- ChunksLengthAfterSni [2 ]int `mapstructure:"ChunksLengthAfterSni"`
31
- DelayBetweenChunks [2 ]int `mapstructure:"DelayBetweenChunks"`
32
- ResolveSystem string `mapstructure:"-"`
33
- DoHClient * doh.Client `mapstructure:"-"`
21
+ TLSHeaderLength int `mapstructure:"TLSHeaderLength"`
22
+ TLSPaddingEnabled bool `mapstructure:"TLSPaddingEnabled"`
23
+ TLSPaddingSize [2 ]int `mapstructure:"TLSPaddingSize"`
24
+ DnsCacheTTL int `mapstructure:"DnsCacheTTL"`
25
+ DnsRequestTimeout int `mapstructure:"DnsRequestTimeout"`
26
+ WorkerAddress string `mapstructure:"WorkerAddress"`
27
+ WorkerIPPortAddress string `mapstructure:"WorkerIPPortAddress"`
28
+ WorkerEnabled bool `mapstructure:"WorkerEnabled"`
29
+ WorkerDNSOnly bool `mapstructure:"WorkerDNSOnly"`
30
+ EnableLowLevelSockets bool `mapstructure:"EnableLowLevelSockets"`
31
+ EnableDNSFragmentation bool `mapstructure:"EnableDNSFragmentation"`
32
+ RemoteDNSAddr string `mapstructure:"RemoteDNSAddr"`
33
+ BindAddress string `mapstructure:"BindAddress"`
34
+ ChunksLengthBeforeSni [2 ]int `mapstructure:"ChunksLengthBeforeSni"`
35
+ SniChunksLength [2 ]int `mapstructure:"SniChunksLength"`
36
+ ChunksLengthAfterSni [2 ]int `mapstructure:"ChunksLengthAfterSni"`
37
+ DelayBetweenChunks [2 ]int `mapstructure:"DelayBetweenChunks"`
38
+ Hosts []resolve.Hosts `mapstructure:"Hosts"`
39
+ ResolveSystem string `mapstructure:"-"`
40
+ DoHClient * doh.Client `mapstructure:"-"`
34
41
}
35
42
36
43
var s5 * socks5.Server
@@ -41,18 +48,33 @@ func RunServer(config *Config, captureCTRLC bool) error {
41
48
var resolveSystem string
42
49
var dohClient * doh.Client
43
50
51
+ stdLogger := log .New (os .Stderr , "" , log .Ldate | log .Ltime )
52
+ appLogger := logger .NewLogger (stdLogger )
53
+
54
+ localResolver := & resolve.LocalResolver {
55
+ Logger : appLogger ,
56
+ Hosts : config .Hosts ,
57
+ }
58
+
59
+ dialer_ := & dialer.Dialer {
60
+ Logger : appLogger ,
61
+ EnableLowLevelSockets : config .EnableLowLevelSockets ,
62
+ TLSPaddingEnabled : config .TLSPaddingEnabled ,
63
+ TLSPaddingSize : config .TLSPaddingSize ,
64
+ ProxyAddress : fmt .Sprintf ("socks5://%s" , config .BindAddress ),
65
+ }
66
+
44
67
if strings .HasPrefix (config .RemoteDNSAddr , "https://" ) {
45
68
resolveSystem = "doh"
46
69
dohClient = doh .NewClient (
47
- doh .WithTimeout (10 * time .Second ),
48
- doh .WithSocks5 (fmt .Sprintf ("socks5://%s" , config .BindAddress )),
70
+ doh .WithDNSFragmentation ((config .WorkerEnabled && config .WorkerDNSOnly ) || config .EnableDNSFragmentation ),
71
+ doh .WithDialer (dialer_ ),
72
+ doh .WithLocalResolver (localResolver ),
49
73
)
50
74
} else {
51
75
resolveSystem = "DNSCrypt"
52
76
}
53
77
54
- stdLogger := log .New (os .Stderr , "" , log .Ldate | log .Ltime )
55
- appLogger := logger .NewLogger (stdLogger )
56
78
chunkConfig := server.ChunkConfig {
57
79
BeforeSniLength : config .SniChunksLength ,
58
80
AfterSniLength : config .ChunksLengthAfterSni ,
@@ -77,6 +99,8 @@ func RunServer(config *Config, captureCTRLC bool) error {
77
99
WorkerConfig : workerConfig ,
78
100
BindAddress : config .BindAddress ,
79
101
EnableLowLevelSockets : config .EnableLowLevelSockets ,
102
+ Dialer : dialer_ ,
103
+ LocalResolver : localResolver ,
80
104
}
81
105
82
106
if captureCTRLC {
@@ -93,7 +117,7 @@ func RunServer(config *Config, captureCTRLC bool) error {
93
117
socks5 .WithConnectHandle (serverHandler .Handle ),
94
118
)
95
119
96
- fmt .Println ("Starting socks server:" , config .BindAddress )
120
+ fmt .Println ("Starting socks, http server:" , config .BindAddress )
97
121
if err := s5 .ListenAndServe ("tcp" , config .BindAddress ); err != nil {
98
122
return err
99
123
}
0 commit comments