修改梅林不可描述插件中 UDPspeeder 与 udp2raw 之间的串联策略

在梅林的 55 插件中可以配置 UDPspeederudp2raw,但是默认策略中一旦同时开启这两个功能,则一定把 UDPspeeder 与 udp2raw 串联起来。

但是我们一般只是把 kcptun 与 udp2raw 串联起来逃过 ISP 的 udp 策略,而 UDPspeeder 单独加速 55-redir 的 udp 流量。如此一来插件默认的串联策略就会导致冲突。

修改方法

  • 一个是 /ss/ssconfig.sh 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
--- a/shadowsocks/shadowsocks/ss/ssconfig.sh
+++ b/shadowsocks/shadowsocks/ss/ssconfig.sh
@@ -705,8 +705,8 @@
[ -n "$ss_basic_udpv1_password" ] && key1="-k $ss_basic_udpv1_password" || key1=""
[ "$ss_basic_udpv1_disable_filter" == "1" ] && filter="--disable-filter" || filter=""

- if [ "$ss_basic_udp2raw_boost_enable" == "1" ];then
- #串联:如果两者都开启了,则把udpspeeder的流udp量转发给udp2raw
+ if [ "$ss_basic_udp2raw_boost_enable" == "1" ] && [ "$SPEED_KCP" != "2" ];then
+ #串联:如果两者都开启了,并且KCP与UDP2raw之间没有串联,则把udpspeeder的流udp量转发给udp2raw
speederv1 -c -l 0.0.0.0:1092 -r 127.0.0.1:1093 $key1 $ss_basic_udpv1_password \
$duplicate_time $jitter $report $drop $filter $duplicate $ss_basic_udpv1_duplicate_nu >/dev/null 2>&1 &
#如果只开启了udpspeeder,则把udpspeeder的流udp量转发给服务器
@@ -727,8 +727,8 @@
[ -n "$ss_basic_udpv2_password" ] && key2="-k $ss_basic_udpv2_password" || key2=""
[ -n "$ss_basic_udpv2_fec" ] && fec="-f $ss_basic_udpv2_fec" || fec=""

- if [ "$ss_basic_udp2raw_boost_enable" == "1" ];then
- #串联:如果两者都开启了,则把udpspeeder的流udp量转发给udp2raw
+ if [ "$ss_basic_udp2raw_boost_enable" == "1" ] && [ "$SPEED_KCP" != "2" ];then
+ #串联:如果两者都开启了,并且KCP与UDP2raw之间没有串联,则把udpspeeder的流udp量转发给udp2raw
speederv2 -c -l 0.0.0.0:1092 -r 127.0.0.1:1093 $key2 \
$fec $timeout $mode $report $mtu $jitter $interval $drop $disable_obscure $ss_basic_udpv2_other --fifo /tmp/fifo.file >/dev/null 2>&1 &
#如果只开启了udpspeeder,则把udpspeeder的流udp量转发给服务器
@@ -802,9 +802,9 @@
fi
$BIN -s 127.0.0.1 -p 1091 -c $CONFIG_FILE $ARG_OBFS -f /var/run/shadowsocks.pid >/dev/null 2>&1
# udp go udpspeeder
- [ "$ss_basic_udp2raw_boost_enable" == "1" ] && [ "$ss_basic_udp_boost_enable" == "1" ] && echo_date $BIN的 udp 走udpspeeder, udpspeeder的 udp 走 udpraw
+ [ "$ss_basic_udp2raw_boost_enable" == "1" ] && [ "$SPEED_KCP" != "2" ] && [ "$ss_basic_udp_boost_enable" == "1" ] && echo_date $BIN的 udp 走udpspeeder, udpspeeder的 udp 走 udpraw
[ "$ss_basic_udp2raw_boost_enable" == "1" ] && [ "$ss_basic_udp_boost_enable" != "1" ] && echo_date $BIN的 udp 走udpraw.
- [ "$ss_basic_udp2raw_boost_enable" != "1" ] && [ "$ss_basic_udp_boost_enable" == "1" ] && echo_date $BIN的 udp 走udpspeeder.
+ [ "$ss_basic_udp2raw_boost_enable" != "1" ] || [ "$SPEED_KCP" == "2" ] && [ "$ss_basic_udp_boost_enable" == "1" ] && echo_date $BIN的 udp 走udpspeeder.
[ "$ss_basic_udp2raw_boost_enable" != "1" ] && [ "$ss_basic_udp_boost_enable" != "1" ] && echo_date $BIN的 udp 走$BIN.
$BIN -s 127.0.0.1 -p $SPEED_PORT -c $CONFIG_FILE $ARG_OBFS -U -f /var/run/shadowsocks.pid >/dev/null 2>&1
else
@@ -840,9 +840,9 @@
echo_date $BIN的 tcp 走$BIN.
$BIN -c $CONFIG_FILE $ARG_OBFS -f /var/run/shadowsocks.pid >/dev/null 2>&1
# udp go udpspeeder
- [ "$ss_basic_udp2raw_boost_enable" == "1" ] && [ "$ss_basic_udp_boost_enable" == "1" ] && echo_date $BIN的 udp 走udpspeeder, udpspeeder的 udp 走 udpraw
+ [ "$ss_basic_udp2raw_boost_enable" == "1" ] && [ "$SPEED_KCP" != "2" ] && [ "$ss_basic_udp_boost_enable" == "1" ] && echo_date $BIN的 udp 走udpspeeder, udpspeeder的 udp 走 udpraw
[ "$ss_basic_udp2raw_boost_enable" == "1" ] && [ "$ss_basic_udp_boost_enable" != "1" ] && echo_date $BIN的 udp 走udpraw.
- [ "$ss_basic_udp2raw_boost_enable" != "1" ] && [ "$ss_basic_udp_boost_enable" == "1" ] && echo_date $BIN的 udp 走udpspeeder.
+ [ "$ss_basic_udp2raw_boost_enable" != "1" ] || [ "$SPEED_KCP" == "2" ] && [ "$ss_basic_udp_boost_enable" == "1" ] && echo_date $BIN的 udp 走udpspeeder.
[ "$ss_basic_udp2raw_boost_enable" != "1" ] && [ "$ss_basic_udp_boost_enable" != "1" ] && echo_date $BIN的 udp 走$BIN.
$BIN -s 127.0.0.1 -p $SPEED_PORT -c $CONFIG_FILE $ARG_OBFS -U -f /var/run/shadowsocks.pid >/dev/null 2>&1
else
  • 另一个是 /scripts/ss_udp_status.sh 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
--- a/shadowsocks/shadowsocks/scripts/ss_udp_status.sh
+++ b/shadowsocks/shadowsocks/scripts/ss_udp_status.sh
@@ -8,6 +8,7 @@
v2=`pidof speederv2`
RAW=`pidof udp2raw`
[ "$ss_basic_udp2raw_boost_enable" == "1" ] || [ "$ss_basic_udp2_boost_enable" == "1" ] && SPEED_UDP=1
+[ "$ss_basic_use_kcp" == "1" ] && [ "$ss_basic_kcp_server" == "127.0.0.1" ] && [ "$ss_basic_kcp_port" == "1093" ] && SPEED_KCP=2

[ -n "$v1" ] && message1="【UDPspeederV1运行中,pid:$v1】" || message1="【UDPspeederV1未运行】"
[ -n "$v2" ] && message2="【UDPspeederV2运行中,pid:$v2】" || message2="【UDPspeederV2未运行】"
@@ -19,6 +20,7 @@ RAW=`pidof udp2raw`

[ -n "$v1" ] && [ -n "$RAW" ] && message0="串联模式: "
[ -n "$v2" ] && [ -n "$RAW" ] && message0="串联模式: "
+[ "$SPEED_KCP" == "2" ] && message0="非串联模式:"

[ -z "$v1" ] && [ -z "$v2" ] && [ -n "$RAW" ] && message0="" && message1="" && message2=""
[ -n "$v1" ] && [ -z "$v2" ] && [ -z "$RAW" ] && message3=""

效果

这样便达到了上面提到的要求,分开了 UDPspeeder 与 udp2raw 之间的强制串联。

rules

1
2
tcp: ss-redir -> kcptun -> udp2raw -> ... -> server
udp: ss-redir -> UDPspeeder -> ... -> server