shadowsocks-libev.init (3205B)
1 #!/bin/sh /etc/rc.common 2 3 START=90 4 STOP=15 5 6 SERVICE_USE_PID=1 7 SERVICE_WRITE_PID=1 8 SERVICE_DAEMONIZE=1 9 EXTRA_COMMANDS="rules" 10 CONFIG_FILE=/var/etc/shadowsocks-libev.json 11 12 get_config() { 13 config_get_bool enable $1 enable 14 config_get server $1 server 15 config_get server_port $1 server_port 16 config_get local_port $1 local_port 17 config_get timeout $1 timeout 18 config_get password $1 password 19 config_get encrypt_method $1 encrypt_method 20 config_get ignore_list $1 ignore_list 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 28 config_get_bool tunnel_enable $1 tunnel_enable 29 config_get tunnel_port $1 tunnel_port 30 config_get tunnel_forward $1 tunnel_forward 31 config_get lan_ac_mode $1 lan_ac_mode 32 config_get lan_ac_ip $1 lan_ac_ip 33 config_get wan_bp_ip $1 wan_bp_ip 34 config_get wan_fw_ip $1 wan_fw_ip 35 config_get ipt_ext $1 ipt_ext 36 : ${timeout:=60} 37 : ${udp_timeout:=60} 38 : ${tunnel_port:=5300} 39 : ${tunnel_forward:=8.8.4.4:53} 40 } 41 42 start_rules() { 43 local ac_args 44 45 if [ -n "$lan_ac_ip" ]; then 46 case $lan_ac_mode in 47 1) ac_args="w$lan_ac_ip" 48 ;; 49 2) ac_args="b$lan_ac_ip" 50 ;; 51 esac 52 fi 53 /usr/bin/ss-rules \ 54 -s "$server" \ 55 -l "$local_port" \ 56 -S "$udp_server" \ 57 -L "$udp_local_port" \ 58 -i "$ignore_list" \ 59 -a "$ac_args" \ 60 -b "$wan_bp_ip" \ 61 -w "$wan_fw_ip" \ 62 -e "$ipt_ext" \ 63 -o $udp 64 return $? 65 } 66 67 start_redir() { 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 99 return $? 100 } 101 102 start_tunnel() { 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 110 return $? 111 } 112 113 rules() { 114 config_load shadowsocks-libev 115 config_foreach get_config shadowsocks-libev 116 [ "$enable" = 1 ] || exit 0 117 mkdir -p /var/run /var/etc 118 119 : ${server:?} 120 : ${server_port:?} 121 : ${local_port:?} 122 : ${password:?} 123 : ${encrypt_method:?} 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 137 start_rules 138 } 139 140 boot() { 141 until iptables-save -t nat | grep -q "^:zone_lan_prerouting"; do 142 sleep 1 143 done 144 start 145 } 146 147 start() { 148 rules && start_redir 149 [ "$tunnel_enable" = 1 ] && start_tunnel 150 } 151 152 stop() { 153 /usr/bin/ss-rules -f 154 killall -q -9 ss-redir 155 killall -q -9 ss-tunnel 156 }