|
@@ -14,11 +14,17 @@ get_config() {
|
14
|
14
|
config_get server $1 server
|
15
|
15
|
config_get server_port $1 server_port
|
16
|
16
|
config_get local_port $1 local_port
|
17
|
|
- config_get password $1 password
|
18
|
17
|
config_get timeout $1 timeout
|
|
18
|
+ config_get password $1 password
|
19
|
19
|
config_get encrypt_method $1 encrypt_method
|
20
|
20
|
config_get ignore_list $1 ignore_list
|
21
|
|
- config_get udp_relay $1 udp_relay
|
|
21
|
+ config_get udp_mode $1 udp_mode
|
|
22
|
+ config_get udp_server $1 udp_server
|
|
23
|
+ config_get udp_server_port $1 udp_server_port
|
|
24
|
+ config_get udp_local_port $1 udp_local_port
|
|
25
|
+ config_get udp_timeout $1 udp_timeout
|
|
26
|
+ config_get udp_password $1 udp_password
|
|
27
|
+ config_get udp_encrypt_method $1 udp_encrypt_method
|
22
|
28
|
config_get_bool tunnel_enable $1 tunnel_enable
|
23
|
29
|
config_get tunnel_port $1 tunnel_port
|
24
|
30
|
config_get tunnel_forward $1 tunnel_forward
|
|
@@ -27,6 +33,8 @@ get_config() {
|
27
|
33
|
config_get wan_bp_ip $1 wan_bp_ip
|
28
|
34
|
config_get wan_fw_ip $1 wan_fw_ip
|
29
|
35
|
config_get ipt_ext $1 ipt_ext
|
|
36
|
+ : ${timeout:=60}
|
|
37
|
+ : ${udp_timeout:=60}
|
30
|
38
|
: ${tunnel_port:=5300}
|
31
|
39
|
: ${tunnel_forward:=8.8.4.4:53}
|
32
|
40
|
}
|
|
@@ -45,6 +53,8 @@ start_rules() {
|
45
|
53
|
/usr/bin/ss-rules \
|
46
|
54
|
-s "$server" \
|
47
|
55
|
-l "$local_port" \
|
|
56
|
+ -S "$udp_server" \
|
|
57
|
+ -L "$udp_local_port" \
|
48
|
58
|
-i "$ignore_list" \
|
49
|
59
|
-a "$ac_args" \
|
50
|
60
|
-b "$wan_bp_ip" \
|
|
@@ -55,17 +65,48 @@ start_rules() {
|
55
|
65
|
}
|
56
|
66
|
|
57
|
67
|
start_redir() {
|
58
|
|
- service_start /usr/bin/ss-redir \
|
59
|
|
- -c "$CONFIG_FILE" $udp
|
|
68
|
+ cat <<-EOF >$CONFIG_FILE
|
|
69
|
+ {
|
|
70
|
+ "server": "$server",
|
|
71
|
+ "server_port": $server_port,
|
|
72
|
+ "local_address": "0.0.0.0",
|
|
73
|
+ "local_port": $local_port,
|
|
74
|
+ "password": "$password",
|
|
75
|
+ "timeout": $timeout,
|
|
76
|
+ "method": "$encrypt_method"
|
|
77
|
+ }
|
|
78
|
+EOF
|
|
79
|
+ if [ "$udp_mode" = 2 ]; then
|
|
80
|
+ /usr/bin/ss-redir \
|
|
81
|
+ -c $CONFIG_FILE \
|
|
82
|
+ -f /var/run/ss-redir_t.pid
|
|
83
|
+ cat <<-EOF >$CONFIG_FILE
|
|
84
|
+ {
|
|
85
|
+ "server": "$udp_server",
|
|
86
|
+ "server_port": $udp_server_port,
|
|
87
|
+ "local_address": "0.0.0.0",
|
|
88
|
+ "local_port": $udp_local_port,
|
|
89
|
+ "password": "$udp_password",
|
|
90
|
+ "timeout": $udp_timeout,
|
|
91
|
+ "method": "$udp_encrypt_method"
|
|
92
|
+ }
|
|
93
|
+EOF
|
|
94
|
+ fi
|
|
95
|
+ /usr/bin/ss-redir \
|
|
96
|
+ -c $CONFIG_FILE \
|
|
97
|
+ -f /var/run/ss-redir.pid \
|
|
98
|
+ $udp
|
60
|
99
|
return $?
|
61
|
100
|
}
|
62
|
101
|
|
63
|
102
|
start_tunnel() {
|
64
|
|
- service_start /usr/bin/ss-tunnel \
|
65
|
|
- -c "$CONFIG_FILE" \
|
66
|
|
- -l "$tunnel_port" \
|
67
|
|
- -L "$tunnel_forward" \
|
68
|
|
- -u
|
|
103
|
+ : ${udp:="-u"}
|
|
104
|
+ /usr/bin/ss-tunnel \
|
|
105
|
+ -c $CONFIG_FILE \
|
|
106
|
+ -l $tunnel_port \
|
|
107
|
+ -L $tunnel_forward \
|
|
108
|
+ -f /var/run/ss-tunnel.pid \
|
|
109
|
+ $udp
|
69
|
110
|
return $?
|
70
|
111
|
}
|
71
|
112
|
|
|
@@ -73,25 +114,26 @@ rules() {
|
73
|
114
|
config_load shadowsocks-libev
|
74
|
115
|
config_foreach get_config shadowsocks-libev
|
75
|
116
|
[ "$enable" = 1 ] || exit 0
|
76
|
|
- [ "$udp_relay" = 1 ] && udp="-u"
|
77
|
|
- mkdir -p $(dirname $CONFIG_FILE)
|
|
117
|
+ mkdir -p /var/run /var/etc
|
78
|
118
|
|
79
|
119
|
: ${server:?}
|
80
|
120
|
: ${server_port:?}
|
81
|
121
|
: ${local_port:?}
|
82
|
122
|
: ${password:?}
|
83
|
123
|
: ${encrypt_method:?}
|
84
|
|
- cat <<-EOF >$CONFIG_FILE
|
85
|
|
- {
|
86
|
|
- "server": "$server",
|
87
|
|
- "server_port": $server_port,
|
88
|
|
- "local_address": "0.0.0.0",
|
89
|
|
- "local_port": $local_port,
|
90
|
|
- "password": "$password",
|
91
|
|
- "timeout": $timeout,
|
92
|
|
- "method": "$encrypt_method"
|
93
|
|
- }
|
94
|
|
-EOF
|
|
124
|
+ case $udp_mode in
|
|
125
|
+ 1) udp="-u"
|
|
126
|
+ ;;
|
|
127
|
+ 2)
|
|
128
|
+ udp="-U"
|
|
129
|
+ : ${udp_server:?}
|
|
130
|
+ : ${udp_server_port:?}
|
|
131
|
+ : ${udp_local_port:?}
|
|
132
|
+ : ${udp_password:?}
|
|
133
|
+ : ${udp_encrypt_method:?}
|
|
134
|
+ ;;
|
|
135
|
+ esac
|
|
136
|
+
|
95
|
137
|
start_rules
|
96
|
138
|
}
|
97
|
139
|
|
|
@@ -109,7 +151,6 @@ start() {
|
109
|
151
|
|
110
|
152
|
stop() {
|
111
|
153
|
/usr/bin/ss-rules -f
|
112
|
|
- service_stop /usr/bin/ss-redir
|
113
|
|
- service_stop /usr/bin/ss-tunnel
|
114
|
|
- rm -f $CONFIG_FILE
|
|
154
|
+ killall -q -9 ss-redir
|
|
155
|
+ killall -q -9 ss-tunnel
|
115
|
156
|
}
|