lede-packages-rs

git clone git://archive.git.mtrnord.blog/MTRNord/lede-packages-rs.git
Log | Files | Refs | README | LICENSE

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 }