├── README.md ├── libsodium-1.0.10.tar.gz ├── shadowsocks-manyuser.zip ├── ShadowsocksR ├── ShadowsocksR-debian └── SSR /README.md: -------------------------------------------------------------------------------- 1 | 这是一个通过shadowsocks实现的免流量上网脚本 2 | -------------------------------------------------------------------------------- /libsodium-1.0.10.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greatdou/Freely-surfing-the-Internet/HEAD/libsodium-1.0.10.tar.gz -------------------------------------------------------------------------------- /shadowsocks-manyuser.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greatdou/Freely-surfing-the-Internet/HEAD/shadowsocks-manyuser.zip -------------------------------------------------------------------------------- /ShadowsocksR: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # chkconfig: 2345 90 10 3 | # description: start or stop the ShadowsocksR server 4 | # 5 | ### BEGIN INIT INFO 6 | # Provides: ShadowsocksR 7 | # Required-Start: $network $syslog 8 | # Required-Stop: $network 9 | # Default-Start: 2 3 4 5 10 | # Default-Stop: 0 1 6 11 | # Description: Start or stop the ShadowsocksR server 12 | ### END INIT INFO 13 | 14 | # Author: Teddysun 15 | 16 | name=ShadowsocksR 17 | BIN=/usr/local/shadowsocks/shadowsocks/server.py 18 | conf=/etc/shadowsocks.json 19 | 20 | start(){ 21 | $BIN -c $conf -d start 22 | RETVAL=$? 23 | if [ "$RETVAL" = "0" ]; then 24 | echo "$name start success" 25 | else 26 | echo "$name start failed" 27 | fi 28 | } 29 | 30 | stop(){ 31 | pid=`ps -ef | grep -v grep | grep -i "${BIN}" | awk '{print $2}'` 32 | if [[ ! -z $pid ]]; then 33 | $BIN -c $conf -d stop 34 | RETVAL=$? 35 | if [ "$RETVAL" = "0" ]; then 36 | echo "$name stop success" 37 | else 38 | echo "$name stop failed" 39 | fi 40 | else 41 | echo "$name is not running" 42 | RETVAL=1 43 | fi 44 | } 45 | 46 | status(){ 47 | pid=`ps -ef | grep -v grep | grep -i "${BIN}" | awk '{print $2}'` 48 | if [[ -z $pid ]]; then 49 | echo "$name is not running" 50 | RETVAL=1 51 | else 52 | echo "$name is running with PID $pid" 53 | RETVAL=0 54 | fi 55 | } 56 | 57 | case "$1" in 58 | 'start') 59 | start 60 | ;; 61 | 'stop') 62 | stop 63 | ;; 64 | 'status') 65 | status 66 | ;; 67 | 'restart') 68 | stop 69 | start 70 | RETVAL=$? 71 | ;; 72 | *) 73 | echo "Usage: $0 { start | stop | restart | status }" 74 | RETVAL=1 75 | ;; 76 | esac 77 | exit $RETVAL -------------------------------------------------------------------------------- /ShadowsocksR-debian: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ### BEGIN INIT INFO 3 | # Provides: ShadowsocksR 4 | # Required-Start: $network $local_fs $remote_fs 5 | # Required-Stop: $network $local_fs $remote_fs 6 | # Default-Start: 2 3 4 5 7 | # Default-Stop: 0 1 6 8 | # Short-Description: Fast tunnel proxy that helps you bypass firewalls 9 | # Description: A secure socks5 proxy, designed to protect your Internet traffic. 10 | ### END INIT INFO 11 | 12 | # Author: Teddysun 13 | 14 | name=ShadowsocksR 15 | BIN=/usr/local/shadowsocks/shadowsocks/server.py 16 | conf=/etc/shadowsocks.json 17 | 18 | start(){ 19 | $BIN -c $conf -d start 20 | RETVAL=$? 21 | if [ "$RETVAL" = "0" ]; then 22 | echo "$name start success" 23 | else 24 | echo "$name start failed" 25 | fi 26 | } 27 | 28 | stop(){ 29 | pid=`ps -ef | grep -v grep | grep -i "${BIN}" | awk '{print $2}'` 30 | if [[ ! -z $pid ]]; then 31 | $BIN -c $conf -d stop 32 | RETVAL=$? 33 | if [ "$RETVAL" = "0" ]; then 34 | echo "$name stop success" 35 | else 36 | echo "$name stop failed" 37 | fi 38 | else 39 | echo "$name is not running" 40 | RETVAL=1 41 | fi 42 | } 43 | 44 | status(){ 45 | pid=`ps -ef | grep -v grep | grep -i "${BIN}" | awk '{print $2}'` 46 | if [[ -z $pid ]]; then 47 | echo "$name is not running" 48 | RETVAL=1 49 | else 50 | echo "$name is running with PID $pid" 51 | RETVAL=0 52 | fi 53 | } 54 | 55 | case "$1" in 56 | 'start') 57 | start 58 | ;; 59 | 'stop') 60 | stop 61 | ;; 62 | 'status') 63 | status 64 | ;; 65 | 'restart') 66 | stop 67 | start 68 | RETVAL=$? 69 | ;; 70 | *) 71 | echo "Usage: $0 { start | stop | restart | status }" 72 | RETVAL=1 73 | ;; 74 | esac 75 | exit $RETVAL -------------------------------------------------------------------------------- /SSR: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin 3 | export PATH 4 | clear 5 | echo 6 | 7 | echo 8 | 9 | #Current folder 10 | cur_dir=`pwd` 11 | # Get public IP address 12 | IP=$(ip addr | egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | egrep -v "^192\.168|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-2]\.|^10\.|^127\.|^255\.|^0\." | head -n 1) 13 | if [[ "$IP" = "" ]]; then 14 | IP=$(wget -qO- -t1 -T2 ipv4.icanhazip.com) 15 | fi 16 | 17 | # Make sure only root can run our script 18 | function rootness(){ 19 | if [[ $EUID -ne 0 ]]; then 20 | echo "错误:请使用Root帐号进行安装" 1>&2 21 | exit 1 22 | fi 23 | } 24 | 25 | # Check OS 26 | function checkos(){ 27 | if [ -f /etc/redhat-release ];then 28 | OS='CentOS' 29 | elif [ ! -z "`cat /etc/issue | grep bian`" ];then 30 | OS='Debian' 31 | elif [ ! -z "`cat /etc/issue | grep Ubuntu`" ];then 32 | OS='Ubuntu' 33 | else 34 | echo "非常抱歉,一键脚本并不支持当前所在的环境!" 35 | exit 1 36 | fi 37 | } 38 | # Get version 39 | function getversion(){ 40 | if [[ -s /etc/redhat-release ]];then 41 | grep -oE "[0-9.]+" /etc/redhat-release 42 | else 43 | grep -oE "[0-9.]+" /etc/issue 44 | fi 45 | } 46 | 47 | # CentOS version 48 | function centosversion(){ 49 | local code=$1 50 | local version="`getversion`" 51 | local main_ver=${version%%.*} 52 | if [ $main_ver == $code ];then 53 | return 0 54 | else 55 | return 1 56 | fi 57 | } 58 | 59 | # Disable selinux 60 | function disable_selinux(){ 61 | if [ -s /etc/selinux/config ] && grep 'SELINUX=enforcing' /etc/selinux/config; then 62 | sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 63 | setenforce 0 64 | fi 65 | } 66 | 67 | # Pre-installation settings 68 | function pre_install(){ 69 | # Not support CentOS 5 70 | if centosversion 5; then 71 | echo "不支持CentOS 5,请更改操作系统CentOS 6 + / 7 + 12 + Debian / Ubuntu并重试。" 72 | exit 1 73 | fi 74 | # Set ShadowsocksR config password 75 | echo -e "感谢使用 一键SSR翻墙加速脚本【已支持国内一键安装】" 76 | read -p "(回车将默认设置连接密码为:123456789):" shadowsockspwd 77 | [ -z "$shadowsockspwd" ] && shadowsockspwd="123456789" 78 | echo 79 | echo "---------------------------" 80 | echo "Ok,密码已设置为 = $shadowsockspwd" 81 | echo "---------------------------" 82 | echo 83 | # Set ShadowsocksR config port 84 | while true 85 | do 86 | echo -e "设置远程连接端口 [1-65535]:" 87 | read -p "(回车默认设置远程连接端口为: 138):" shadowsocksport 88 | [ -z "$shadowsocksport" ] && shadowsocksport="138" 89 | expr $shadowsocksport + 0 &>/dev/null 90 | if [ $? -eq 0 ]; then 91 | if [ $shadowsocksport -ge 1 ] && [ $shadowsocksport -le 65535 ]; then 92 | echo 93 | echo "---------------------------" 94 | echo "Ok,远程连接端口已设置为 = $shadowsocksport" 95 | echo "---------------------------" 96 | echo 97 | break 98 | else 99 | echo "错误:请正确设置端口为1-65535之间的数字" 100 | fi 101 | else 102 | echo "错误:请正确设置端口为1-65535之间的数字" 103 | fi 104 | done 105 | get_char(){ 106 | SAVEDSTTY=`stty -g` 107 | stty -echo 108 | stty cbreak 109 | dd if=/dev/tty bs=1 count=1 2> /dev/null 110 | stty -raw 111 | stty echo 112 | stty $SAVEDSTTY 113 | } 114 | echo 115 | echo "Press any key to start...or Press Ctrl+C to cancel" 116 | char=`get_char` 117 | # Install necessary dependencies 118 | if [ "$OS" == 'CentOS' ]; then 119 | yum install -y wget unzip openssl-devel gcc swig python python-devel python-setuptools autoconf libtool libevent git ntpdate 120 | yum install -y m2crypto automake make curl curl-devel zlib-devel perl perl-devel cpio expat-devel gettext-devel 121 | else 122 | apt-get -y update 123 | apt-get -y install python python-dev python-pip python-m2crypto curl wget unzip gcc swig automake make perl cpio build-essential git ntpdate 124 | fi 125 | cd $cur_dir 126 | } 127 | # Download files 128 | function download_files(){ 129 | # Download libsodium file 130 | if ! wget --no-check-certificate -O libsodium-1.0.10.tar.gz https://raw.githubusercontent.com/AlphaBrock/Freely-surfing-the-Internet/master/libsodium-1.0.10.tar.gz; then 131 | echo "错误:抱歉,libsodium文件下载失败!" 132 | exit 1 133 | fi 134 | # Download ShadowsocksR file 135 | # if ! wget --no-check-certificate -O manyuser.zip https://raw.githubusercontent.com/AlphaBrock/Freely-surfing-the-Internet/master/shadowsocks-manyuser.zip; then 136 | # echo "错误:抱歉,shadowsocksr文件下载失败!" 137 | # exit 1 138 | # fi 139 | # Download ShadowsocksR chkconfig file 140 | if [ "$OS" == 'CentOS' ]; then 141 | if ! wget --no-check-certificate https://raw.githubusercontent.com/AlphaBrock/Freely-surfing-the-Internet/master/ShadowsocksR -O /etc/init.d/shadowsocks; then 142 | echo "错误:抱歉,shadowsocksr chkconfig文件下载失败!" 143 | exit 1 144 | fi 145 | else 146 | if ! wget --no-check-certificate https://raw.githubusercontent.com/AlphaBrock/Freely-surfing-the-Internet/master/ShadowsocksR-debian -O /etc/init.d/shadowsocks; then 147 | echo "错误:抱歉,ShadowsocksR-debian文件下载失败!" 148 | exit 1 149 | fi 150 | fi 151 | } 152 | 153 | # firewall set 154 | function firewall_set(){ 155 | echo "请稍候......正在设置防火墙" 156 | if centosversion 6; then 157 | /etc/init.d/iptables status > /dev/null 2>&1 158 | if [ $? -eq 0 ]; then 159 | iptables -L -n | grep '${shadowsocksport}' | grep 'ACCEPT' > /dev/null 2>&1 160 | if [ $? -ne 0 ]; then 161 | iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport ${shadowsocksport} -j ACCEPT 162 | iptables -I INPUT -m state --state NEW -m udp -p udp --dport ${shadowsocksport} -j ACCEPT 163 | /etc/init.d/iptables save 164 | /etc/init.d/iptables restart 165 | else 166 | echo "端口 ${shadowsocksport} 已创建成功" 167 | fi 168 | else 169 | echo "警告:防火墙似乎没有安装请手动安装防火墙" 170 | fi 171 | elif centosversion 7; then 172 | systemctl status firewalld > /dev/null 2>&1 173 | if [ $? -eq 0 ];then 174 | firewall-cmd --permanent --zone=public --add-port=${shadowsocksport}/tcp 175 | firewall-cmd --permanent --zone=public --add-port=${shadowsocksport}/udp 176 | firewall-cmd --reload 177 | else 178 | echo "防火墙好像没有启动,正在尝试启动!" 179 | systemctl start firewalld 180 | if [ $? -eq 0 ];then 181 | firewall-cmd --permanent --zone=public --add-port=${shadowsocksport}/tcp 182 | firewall-cmd --permanent --zone=public --add-port=${shadowsocksport}/udp 183 | firewall-cmd --reload 184 | else 185 | echo "警告:防火墙启动失败,请手动启用端口${shadowsocksport}" 186 | fi 187 | fi 188 | fi 189 | echo "firewall set completed..." 190 | } 191 | 192 | # Config ShadowsocksR 193 | function config_shadowsocks(){ 194 | cat > /etc/shadowsocks.json<<-EOF 195 | { 196 | "server": "0.0.0.0", 197 | "server_ipv6": "::", 198 | "server_port": ${shadowsocksport}, 199 | "local_address": "127.0.0.1", 200 | "local_port": 443, 201 | "password": "${shadowsockspwd}", 202 | "timeout": 120, 203 | "udp_timeout": 60, 204 | "method": "chacha20", 205 | "protocol": "auth_sha1_compatible", 206 | "protocol_param": "", 207 | "obfs": "http_simple_compatible", 208 | "obfs_param": "", 209 | "dns_ipv6": false, 210 | "connect_verbose_info": 0, 211 | "redirect": "", 212 | "fast_open": false, 213 | "workers": 1 214 | 215 | } 216 | EOF 217 | } 218 | # Install ShadowsocksR 219 | function install_ss(){ 220 | # Install libsodium 221 | tar zxf libsodium-1.0.10.tar.gz 222 | cd $cur_dir/libsodium-1.0.10 223 | ./configure && make && make install 224 | echo "/usr/local/lib" > /etc/ld.so.conf.d/local.conf 225 | ldconfig 226 | # Install ShadowsocksR 227 | cd $cur_dir 228 | # unzip -q manyuser.zip 229 | # mv shadowsocks-manyuser/shadowsocks /usr/local/ 230 | git clone -b manyuser https://github.com/breakwa11/shadowsocks.git /usr/local/shadowsocks 231 | if [ -f /usr/local/shadowsocks/server.py ]; then 232 | chmod +x /etc/init.d/shadowsocks 233 | # Add run on system start up 234 | if [ "$OS" == 'CentOS' ]; then 235 | chkconfig --add shadowsocks 236 | chkconfig shadowsocks on 237 | else 238 | update-rc.d -f shadowsocks defaults 239 | fi 240 | # Run ShadowsocksR in the background 241 | /etc/init.d/shadowsocks start 242 | clear 243 | echo 244 | echo "恭喜你!我们以为你完成了所有的安装,以下是连接信息!" 245 | echo -e "服务器IP地址: \033[41;37m ${IP} \033[0m" 246 | echo -e "远程端口: \033[41;37m ${shadowsocksport} \033[0m" 247 | echo -e "密码: \033[41;37m ${shadowsockspwd} \033[0m" 248 | echo -e "本地IP地址: \033[41;37m 127.0.0.1 \033[0m" 249 | echo -e "本地端口: \033[41;37m 1080 \033[0m" 250 | echo -e "认证协议: \033[41;37m auth_sha1 \033[0m" 251 | echo -e "混淆方式: \033[41;37m http_simple \033[0m" 252 | echo -e "加密方法: \033[41;37m chacha20 \033[0m" 253 | echo 254 | echo "感谢使用一键SSR脚本" 255 | echo "本脚本仅供学习交流工作使用,请勿用于非法用途" 256 | echo 257 | echo "任何法律责任由使用人自我承担" 258 | echo 259 | else 260 | echo "ShadowsocksR 安装失败!" 261 | install_cleanup 262 | exit 1 263 | fi 264 | } 265 | 266 | #改成北京时间 267 | function check_datetime(){ 268 | rm -rf /etc/localtime 269 | ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 270 | ntpdate 1.cn.pool.ntp.org 271 | } 272 | 273 | # Install cleanup 274 | function install_cleanup(){ 275 | cd $cur_dir 276 | rm -f manyuser.zip 277 | rm -rf shadowsocks-manyuser 278 | rm -f libsodium-1.0.10.tar.gz 279 | rm -rf libsodium-1.0.10 280 | rm -f SSR 281 | 282 | } 283 | 284 | 285 | # Uninstall ShadowsocksR 286 | function uninstall_shadowsocks(){ 287 | printf "你真的要卸载ShadowsocksR?(Y/n) " 288 | printf "\n" 289 | read -p "(回车将默认为: n):" answer 290 | if [ -z $answer ]; then 291 | answer="n" 292 | fi 293 | if [ "$answer" = "y" ]; then 294 | /etc/init.d/shadowsocks status > /dev/null 2>&1 295 | if [ $? -eq 0 ]; then 296 | /etc/init.d/shadowsocks stop 297 | fi 298 | checkos 299 | if [ "$OS" == 'CentOS' ]; then 300 | chkconfig --del shadowsocks 301 | else 302 | update-rc.d -f shadowsocks remove 303 | fi 304 | rm -f /etc/shadowsocks.json 305 | rm -f /etc/init.d/shadowsocks 306 | rm -rf /usr/local/shadowsocks 307 | echo "ShadowsocksR 已成功卸载!" 308 | else 309 | echo "卸载请求已取消!" 310 | fi 311 | } 312 | 313 | 314 | # Install ShadowsocksR 315 | function install_shadowsocks(){ 316 | checkos 317 | rootness 318 | disable_selinux 319 | pre_install 320 | download_files 321 | config_shadowsocks 322 | install_ss 323 | if [ "$OS" == 'CentOS' ]; then 324 | firewall_set > /dev/null 2>&1 325 | fi 326 | check_datetime 327 | install_cleanup 328 | 329 | } 330 | 331 | # Initialization step 332 | action=$1 333 | [ -z $1 ] && action=install 334 | case "$action" in 335 | install) 336 | install_shadowsocks 337 | ;; 338 | uninstall) 339 | uninstall_shadowsocks 340 | ;; 341 | *) 342 | echo "参数错误 [${action} ]" 343 | echo "Usage: `basename $0` {install|uninstall}" 344 | ;; 345 | esac 346 | --------------------------------------------------------------------------------